Amazon EC2 Auto Scaling と CodeDeploy - AWS CodeDeploy

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon EC2 Auto Scaling と CodeDeploy

CodeDeploy は Amazon EC2 Auto Scaling をサポートしていますAWS定義した条件に従って Amazon EC2 インスタンスを自動的に起動するサービス。これらの条件には、CPU 使用率、ディスクの読み取り/書き込み、インバウンド/アウトバウンドのネットワークトラフィックに関して、指定された時間間隔を超えた制限を含めることができます。Amazon EC2 Auto Scaling は、不要になったときにインスタンスを終了します。詳細については、「」を参照してください。Amazon EC2 Auto Scaling とはAmazon EC2 Auto Scaling ユーザーガイド

Amazon EC2 Auto Scaling グループの一部として新しい Amazon EC2 インスタンスを起動すると、CodeDeploy ではリビジョンを新しいインスタンスに自動的にデプロイできます。また、Elastic Load Balancing ロードバランサーに登録された Amazon EC2 Auto Scaling インスタンスを使用して CodeDeploy のデプロイを調整できます。詳細については、「Integrating CodeDeploy with Elastic Load Balancing」および「Elastic Load Balancing でロードバランサーをセットアップするにはCodeDeployアマゾン EC2 デプロイメント」を参照してください。

注記

複数のデプロイグループを単一の Amazon EC2 Auto Scaling グループに関連付けると、問題が発生する可能性があります。たとえば、1 つのデプロイが失敗すると、インスタンスはシャットダウンを開始しますが、実行中の他のデプロイはタイムアウトに 1 時間かかる可能性があります。詳細については、「」を参照してください。複数のデプロイグループを 1 つの Amazon EC2 Auto Scaling グループに関連付けることは避けるそしてフードの下: CodeDeploy と Amazon EC2 Auto Scaling

Amazon EC2 Auto Scaling グループにCodeDeploy アプリケーションをデプロイする

CodeDeploy アプリケーションリビジョンを Amazon EC2 Auto Scaling グループにデプロイするには:

  1. Amazon EC2 Auto Scaling グループが Amazon S3 で作業できるようにする IAM インスタンスプロファイルを作成または検索します。詳細については、「ステップ 4: Amazon EC2 インスタンス用の IAM インスタンスプロファイルを作成する」を参照してください。

    注記

    また、CodeDeploy を使用して GitHub リポジトリから Amazon EC2 Auto Scaling グループにリビジョンをデプロイすることもできます。Amazon EC2 インスタンスでは依然として IAM インスタンスプロファイルが必要な場合でも、GitHub リポジトリからデプロイするには、プロファイルに追加のアクセス許可は必要ありません。

  2. Amazon EC2 Auto Scaling グループを作成または使用し、起動設定またはテンプレートで IAM インスタンスプロファイルを指定します。詳細については、「」を参照してください。Amazon EC2 インスタンスで実行中のアプリケーション用の IAM ロール

  3. CodeDeploy で Amazon EC2 Auto Scaling グループを含むデプロイグループを作成または検索します。サービスロールを作成または検索します。

  4. CodeDeploy を使用してデプロイグループを作成し、Amazon EC2 Auto Scaling グループ名とサービスロールを指定します。

  5. CodeDeploy を使用して Amazon EC2 Auto Scaling グループを含むデプロイグループにリビジョンをデプロイします。

詳細については、「チュートリアル:使用CodeDeployアプリケーションを Auto Scaling グループにデプロイするには」を参照してください。

CodeDeploy での Amazon EC2 Auto Scaling の

CodeDeploy が Auto Scaling スケールアウトイベント中にアプリケーションリビジョンを新しい EC2 インスタンスにデプロイするために、CodeDeploy は Auto Scaling ライフサイクルフックを使用します。ライフサイクルフックは、Auto Scaling スケールアウトイベントが進行中であり、CodeDeploy がスケールアウトインスタンスにリビジョンをデプロイする必要があることを CodeDeploy に通知します。

注記

このセクションでは、「ライフサイクルフック」と「フック」という用語は、CodeDeploy と Auto Scaling を統合するために使用されるフックを指します。このフックは、で説明されているフックとは異なります。AppSpec「フック」セクション

ライフサイクルフックはどのように作成され、インストールされますか。

Auto Scaling グループを含めるようにデプロイグループを作成または更新すると、CodeDeploy は CodeDeploy サービスロールを使用して Auto Scaling グループにアクセスし、Auto Scaling グループにライフサイクルフックをインストールします。

CodeDeploy がライフサイクルフックを追加した後、どのように使用されますか。

ライフサイクルフックがインストールされると、スケールアウトイベント中に使用されます。スケールアウトイベントは次のように展開されます。

  1. Auto Scaling サービス(または単に Auto Scaling)は、スケールアウトイベントが発生する必要があると判断し、EC2 サービスに連絡して新しい EC2 インスタンスを起動します。

  2. EC2 サービスは新しい EC2 インスタンスを起動します。インスタンスは、Pendingの状態をして、Pending:Wait状態。

  3. Pending:Waitでは、Auto Scaling は、CodeDeploy によって作成されたライフサイクルフックを含め、Auto Scaling グループにアタッチされたすべてのライフサイクルフックを実行します。

  4. ライフサイクルフックは、Amazon SQS キューこれは CodeDeploy によってポーリングされます。

  5. 通知を受信すると、CodeDeploy はメッセージを解析し、検証を実行し、最後に成功したリビジョンを使用して新しい EC2 インスタンスへのアプリケーションのデプロイを開始します。

  6. デプロイの実行中、CodeDeploy は 5 分ごとに Auto Scaling にハートビートを送信し、インスタンスがまだ動作中であることを知らせます。

  7. これまでのところ、EC2 インスタンスはまだPending:Wait状態。

  8. デプロイが完了すると、CodeDeploy は Auto Scaling に次のいずれかを示します。CONTINUEまたはABANDONEC2 起動プロセス。デプロイが成功したか失敗したかによって異なります。

    • CodeDeploy がCONTINUEの場合、Auto Scaling は他のフックの完了を待機するか、インスタンスをPending:Proceedそして、InService状態。

    • CodeDeploy がABANDONでは、Auto Scaling は EC2 インスタンスを終了し、Auto Scaling で定義されているように、必要な数のインスタンスを満たすために必要に応じて起動手順を再開します。希望する容量設定設定。

Amazon EC2 Auto Scaling グループを CodeDeploy

EC2/オンプレミスのコンピューティングプラットフォームでの Blue/Green のデプロイ中に、代替 (Green) 環境にインスタンスを追加するには 2 つのオプションがあります。

  • 既存のインスタンス、または手動で作成したインスタンスを使用します。

  • 指定した Amazon EC2 Auto Scaling グループの設定を使用して、新しい Amazon EC2 Auto Scaling グループにインスタンスを定義および作成します。

2 番目のオプションを選択した場合は、CodeDeploy は新しい Amazon EC2 Auto Scaling グループをプロビジョニングします。以下の規則を使用して、グループに名前を付けます。

CodeDeploy_deployment_group_name_deployment_id

たとえば、ID を持つデプロイメントの場合10という名前のデプロイグループをデプロイします。alpha-deploymentsの場合、プロビジョニングされた Amazon EC2 Auto Scaling グループの名前はCodeDeploy_alpha-deployments_10。詳細については、EC2/オンプレミス Blue/Green デプロイ用のデプロイグループを作成する (コンソール) および「GreenFleetProvisioningOption」を参照してください。

カスタムライフサイクルフックイベントの実行順序

CodeDeploy がデプロイする Amazon EC2 Auto Scaling グループに独自のライフサイクルフックを追加できます。ただし、CodeDeploy のデフォルトデプロイライフサイクルイベントに関して、これらのカスタムライフサイクルフックイベントが実行される順序は事前に決定できません。たとえば、という名前のカスタムライフサイクルフックを追加するとします。ReadyForSoftwareInstallAmazon EC2 Auto Scaling グループに対して、それが実行されるのがのデフォルトデプロイライフサイクルの最初のイベントの前であるか、前回の CodeDeploy のデフォルトデプロイライフサイクルのイベントの前であるか、事前に知ることはできません。

Amazon EC2 Auto Scaling グループにカスタムライフサイクルフックを追加する方法については、「」を参照してください。ライフサイクルフックの追加Amazon EC2 Auto Scaling ユーザーガイド

デプロイ中のスケールアウトイベント

デプロイ中に Amazon EC2 Auto Scaling スケールアウトイベントが発生すると、新しいインスタンスは、今回デプロイ中のアプリケーションリビジョンではなく、前回デプロイしたアプリケーションリビジョンで更新されます。デプロイが成功すると、古いインスタンスと新しくスケールアウトされたインスタンスは、異なるアプリケーションリビジョンをホストします。これらのインスタンスを最新の状態にするために、CodeDeploy は自動的にフォローオンデプロイを開始し(最初のインスタンスの直後)、古いインスタンスを更新します。このデフォルトの動作を変更して、古い EC2 インスタンスが古いリビジョンに残るようにする場合は、「」を参照してください。Automatic updates to outdated instances

デプロイ中に Amazon EC2 Auto Scaling スケールアウトプロセスを中断する場合は、のcommon_functions.shCodeDeploy での負荷分散に使用されるスクリプト。もしHANDLE_PROCS=trueの場合、デプロイ中に次の Auto Scaling イベントが自動的に中断されます。

  • AZRebalance

  • AlarmNotification

  • ScheduledActions

  • ReplaceUnhealthy

重要

この機能をサポートするのは、CodeDeployDefault.oneAtatime デプロイ設定のみです。

の使用方法についての詳細HANDLE_PROCS=trueAmazon EC2 Auto Scaling の使用時にデプロイの問題を回避するには、「」を参照してください。AutoScaling プロセスの処理に関する重要な注意事項aws-codedeploy-サンプルGitHub で。

でのイベントの順序AWS CloudFormationcfn-init スクリプト

cfn-init (または cloud-init) を使用して新しくプロビジョニングした Linux ベースのインスタンスでスクリプトを実行する場合、インスタンスの開始後に発生するイベントの順序を厳密に制御しないと、デプロイは失敗することがあります。

次の順序に従う必要があります。

  1. 新しくプロビジョニングしたインスタンスが開始する。

  2. すべての cfn-init ブートストラップスクリプトが最後まで実行する。

  3. CodeDeploy エージェントが開始する。

  4. 最新のアプリケーションリビジョンがインスタンスにデプロイされる。

イベントの順序を慎重に制御しないと、CodeDeploy エージェントはすべてのスクリプトの実行が終了する前にデプロイを開始する可能性があります。

イベントの順序を制御するには、以下のベストプラクティスのいずれかを使用します。

  • CodeDeploy エージェントをインストールするにはcfn-initスクリプト、他のすべてのスクリプトの後に配置します。

  • CodeDeploy エージェントをカスタム AMI に含め、cfn-initスクリプトを起動し、他のすべてのスクリプトの後に配置します。

の使用方法についてcfn-init「」を参照してください。cfn-initAWS CloudFormationユーザーガイド

CodeDeploy と Amazon EC2 Auto Scaling でのカスタム AMI の使用

Amazon EC2 Auto Scaling グループで新しいAmazon EC2 インスタンスを起動するときに必要な基本 AMI を指定する 2 つのオプションがあります。

  • CodeDeploy エージェントがインストールされている基本カスタム AMI を指定できます。エージェントが既にインストールされているため、このオプションは他のオプションよりも迅速に新しい Amazon EC2 インスタンスを起動します。ただし、このオプションを使用すると、特に CodeDeploy エージェントが古い場合、Amazon EC2 インスタンスの最初のデプロイが失敗する可能性が大きくなります。このオプションを選択した場合は、基本カスタム AMI で CodeDeploy エージェントを定期的に更新することをお勧めします。

  • CodeDeploy エージェントがインストールされていない基本 AMI を指定し、Amazon EC2 Auto Scaling グループで新しいインスタンスが起動されるたびにエージェントをインストールできます。このオプションでは、他のオプションよりも新しい Amazon EC2 インスタンスの起動が遅くなりますが、インスタンスの初期デプロイが成功する可能性は大きくなります。このオプションは、CodeDeploy エージェントの最新バージョンを使用します。