CodeDeploy と Amazon EC2 Auto Scaling - AWS CodeDeploy

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

CodeDeploy と Amazon EC2 Auto Scaling

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

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

注記

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

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

CodeDeploy アプリケーションリビジョンを Amazon EC2 Auto Scaling グループにデプロイするには、次の手順を実行します。

  1. Amazon EC2 Auto Scaling グループが Amazon S3 を操作できるようにする IAM インスタンスプロファイルを作成または検索します。

    注記

    また、CodeDeploy を使用して GitHub リポジトリからリビジョンを Amazon EC2 Auto Scaling グループにデプロイすることもできます。Amazon EC2 インスタンスでは IAM インスタンスプロファイルが必要ですが、GitHub リポジトリからデプロイするために、プロファイルに追加のアクセス許可は必要ありません。詳細については、「ステップ 4: Amazon EC2 インスタンス用の IAM インスタンスプロファイルを作成する」を参照してください。

  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 を使用して、Amazon EC2 Auto Scaling グループにアプリケーションをデプロイする」を参照してください。

Amazon EC2 Auto Scaling との CodeDeploy

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

注記

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

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

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 で定義されている目的のインスタンス数を満たすために必要に応じて起動手順を再開します。希望する容量設定設定。

CodeDeploy が Amazon EC2 Auto Scaling グループの

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 スケールアウトイベントが発生すると、新しいインスタンスは、現在デプロイ中のアプリケーションリビジョンではなく、最後にデプロイしたアプリケーションリビジョンで更新されます。デプロイが成功すると、古いインスタンスと新しくスケールアウトされたインスタンスは、異なるアプリケーションリビジョンをホストします。これらのインスタンスを最新の状態にするために、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 エージェントの最新バージョンを使用します。