AWS CodeDeploy
ユーザーガイド (API バージョン 2014-10-06)

CodeDeploy を Amazon EC2 Auto Scaling と統合する

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

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

注記

複数のデプロイグループを 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 S3 の使用を Amazon EC2 Auto Scaling グループに許可する 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. Amazon EC2 Auto Scaling グループを含むデプロイグループの作成を CodeDeploy に許可するサービスロールを作成または検索します。

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

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

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

CodeDeploy での Amazon EC2 Auto Scaling の動作

CodeDeploy による Amazon EC2 Auto Scaling グループの命名方法

EC2/オンプレミス compute platform で 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 デプロイライフサイクルイベントに対して事前に決定できません。たとえば、Amazon EC2 Auto Scaling グループに ReadyForSoftwareInstall というカスタムライフサイクルフックを追加すると、それが実行されるのが CodeDeploy のデフォルトデプロイライフサイクルの最初のイベントの前であるか、最後のイベントの後であるか、事前に知ることはできません。

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

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

デプロイ中に Amazon EC2 Auto Scaling スケールアップイベントが発生すると、新しいインスタンスが更新されて、現在デプロイ中のアプリケーションリビジョンではなく、前回デプロイしたアプリケーションリビジョンが反映されます。デプロイが成功すると、古いインスタンスと新しくスケールアップされたインスタンスは異なるアプリケーションリビジョンを反映します。

この問題が発生したときに解決するには、新しいほうのアプリケーションリビジョンを該当するデプロイグループに再デプロイできます。

この問題を回避するには、デプロイの進行中は Amazon EC2 Auto Scaling スケールアッププロセスを中断することをお勧めします。これは、CodeDeploy でロードバランシング用の common_functions.sh スクリプトの設定を通じて行うことができます。HANDLE_PROCS=true の場合、デプロイ中は以下の Amazon EC2 Auto Scaling イベントが自動的に中断されます。

  • AZRebalance

  • AlarmNotification

  • ScheduledActions

  • ReplaceUnhealthy

重要

この機能をサポートするのは、CodeDeployDefault.OneAtATime デプロイ設定のみです。他のデプロイ設定を使用する場合は、デプロイグループのインスタンス間で適用されるアプリケーションリビジョンが異なる場合があります。

HANDLE_PROCS=true を使用して Amazon EC2 Auto Scaling 使用時のデプロイ問題を避ける詳しい方法については、GitHub の「aws-codedeploy」で「Important notice about handling AutoScaling processes」を参照してください。

AWS CloudFormation cfn-init スクリプトのイベントの順序

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

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

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

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

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

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

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

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

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

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

cfn-init を使用する方法については、「cfn-init」 (AWS 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 エージェントの最新バージョンを使用します。