EC2/オンプレミスコンピューティングプラットフォームの Blue/Green デプロイ - AWS CodeDeploy

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

EC2/オンプレミスコンピューティングプラットフォームの Blue/Green デプロイ

このトピックでは、EC2CodeDeploy オンプレミスのコンピューティングプラットフォームを使用するデプロイのコンポーネントおよびワークフローについて説明します。Blue/Green デプロイの詳細については、「Blue/Green デプロイの概要」を参照してください。

EC2/オンプレミスコンピューティングプラットフォームのデプロイコンポーネント

以下の図は、EC2/オンプレミスコンピューティングプラットフォームの CodeDeploy デプロイのコンポーネントを示します。

EC2/オンプレミスコンピューティングプラットフォームのデプロイワークフロー

次の図は、アプリケーションリビジョンのデプロイの主要なステップを示しています。

ステップには以下が含まれます。

  1. アプリケーションを作成し、デプロイするアプリケーションリビジョンとアプリケーションのコンピューティングプラットフォームを一意に識別する名前を付けます。CodeDeployこの名前を使用して、デプロイグループ、デプロイ設定、アプリケーションリビジョンなど、正しいデプロイコンポーネントを参照していることを確認します。詳細については、「でアプリケーションを作成する CodeDeploy」を参照してください。

  2. アプリケーションリビジョンをデプロイするデプロイタイプとインスタンスを指定して、デプロイグループをセットアップします。インプレースデプロイでは、最新のアプリケーションリビジョンでインスタンスを更新します。Blue/Green デプロイはロードバランサーでデプロイグループ用の代替セットを登録し、元のインスタンスを登録解除します。

    インスタンス、Amazon EC2 Auto Scaling グループ名、または両方に適用するタグを指定できます。

    デプロイグループのタグのグループを指定すると、CodeDeploy は指定されたタグの少なくとも 1 つが適用されたインスタンスにデプロイします。2 つ以上のタググループを指定した場合、CodeDeploy はそれぞれのタググループの条件を満たすインスタンスにのみデプロイします。詳細については、「Tagging Instances for Deployments」を参照してください。

    いずれの場合も、インスタンスはデプロイで使用するよう設定されていること (つまり、タグが付いているか、Amazon EC2 Auto Scaling グループに所属していること)、CodeDeployおよびエージェントをインストールして実行していることが必要です。

    当社は、Amazon Linux または Windows Server に基づいて Amazon EC2 インスタンスをすばやくセットアップするために使用できる AWS CloudFormation テンプレートを提供しています。また、Amazon Linux、Ubuntu Server、Red Hat Enterprise Linux (RHEL)、または Windows ServerCodeDeploy インスタンスにインストールできるスタンドアロンエージェントも提供しています。詳細については、「を使用してデプロイグループを作成する CodeDeploy」を参照してください。

    また、以下のオプションを指定できます。

    • Amazon SNS の通知 成功イベントや失敗イベントなど、指定されたイベントがデプロイとインスタンスで発生したときに、Amazon SNS トピックの受信者に通知を送信するトリガーを作成します。詳細については、「Monitoring Deployments with Amazon SNS Event Notifications」を参照してください。

    • アラームベースのデプロイ管理。AmazonCloudWatch アラームモニタリングを実装して、メトリックスが設定したしきい値を超えるか下回ったときに、CloudWatchデプロイを停止します。

    • 自動デプロイロールバック。デプロイが失敗するか、アラームのしきい値に一致したときに、以前の既知の正常なリビジョンに自動的にロールバックするようデプロイを設定します。

  3. アプリケーションのリビジョンを同時にデプロイする必要があるインスタンスの数と、デプロイの成功と失敗の条件を示すために、デプロイ構成を指定します。詳細については、「View Deployment Configuration Details」を参照してください。

  4. アプリケーションリビジョンを Amazon S3 にアップロードするかGitHub、デプロイするファイルおよびデプロイ中に実行するスクリプトに加えて、アプリケーション仕様ファイル (AppSpecファイル) を含める必要があります。このファイルには、ファイルを各インスタンスにコピーする場所や、デプロイスクリプトを実行するタイミングなど、デプロイの手順が含まれています。詳細については、「CodeDeploy のアプリケーションリビジョンの操作」を参照してください。

  5. デプロイグループにアプリケーションリビジョンをデプロイします。CodeDeployデプロイグループの各インスタンス上のエージェントは、Amazon S3GitHub またはインスタンスにアプリケーションリビジョンをコピーします。次に、CodeDeployエージェントは、リビジョンをバンドル解除し、AppSpecこのファイルを使用してファイルを指定された場所にコピーして、デプロイスクリプトを実行します。詳細については、「でデプロイを作成 CodeDeploy」を参照してください。

  6. デプロイの結果を確認します。詳細については、「CodeDeploy でのデプロイの」を参照してください。

  7. リビジョンをデプロイします。ソースコンテンツのバグを修正する、別の順序でデプロイスクリプトを実行する、または失敗したデプロイに対応する必要がある場合に、この作業を行います。これを行うには、変更したソースコンテンツ、デプロイスクリプト、AppSpecおよびファイルを新しいリビジョンを再バンドルし、このリビジョンを Amazon S3GitHub バケットまたはリポジトリにアップロードします。次に、新しいリビジョンで同じデプロイグループに新しいデプロイを実行します。詳細については、「でデプロイを作成 CodeDeploy」を参照してください。

インスタンスの設定

アプリケーションリビジョンを初めてデプロイする前に、インスタンスを設定する必要があります。アプリケーションリビジョンで 3 つの本番稼働用サーバーと 2 つのバックアップサーバーが必要な場合、5 つのインスタンスを起動または使用します。

インスタンスを手動でプロビジョニングするには:

  1. インスタンスに CodeDeploy エージェントをインストールします。CodeDeployエージェントは、Amazon Linux、Ubuntu サーバー、RHEL、および Windows Server インスタンスにインストールできます。

  2. タグを使用してデプロイグループのインスタンスを識別する場合は、タグ付けを有効にします。CodeDeployは、タグを使用してインスタンスを識別し、CodeDeployデプロイグループにグループ化するタグを使用します。入門チュートリアルでは両方を使用しましたが、キーまたは値を使用して、デプロイグループのタグを定義できます。

  3. IAM インスタンスプロファイルをアタッチして、Amazon EC2 インスタンスを起動します。CodeDeployエージェントでインスタンスの ID を検証するには、Amazon EC2 インスタンスを起動する際に IAM インスタンスプロファイルをアタッチする必要があります。

  4. サービスロールを作成します。CodeDeploy が AWS アカウントのタグを拡張できるよう、サービスアクセスを提供します。

初回のデプロイでは、AWS CloudFormation テンプレートによってこれらすべてが実行されます。これにより、Amazon Linux または Windows Server をベースに、CodeDeployエージェントがインストール済みの Amazon Linux または Windows Server をベースに、一つの Amazon EC2 インスタンスを作成および設定することができます。詳細については、「のインスタンスの操作 CodeDeploy」を参照してください。

注記

Blue/Green デプロイでは、置き換え先環境用の既存のインスタンスを使用するか、デプロイプロセスの一部として CodeDeploy で新しいインスタンスをプロビジョニングするか選択できます。

アプリケーションリビジョンのアップロード

アプリケーションのソースコンテンツフォルダ構造で、ルートフォルダの下に、AppSpecファイルを配置します。詳細については、「Application Specification Files」を参照してください。

zip、tar、または圧縮された tar などのアーカイブファイル形式にアプリケーションのソースコンテンツフォルダ構造をバンドルします。アーカイブファイル (リビジョン) を Amazon S3GitHub バケットまたはリポジトリにアップロードします。

注記

tar および圧縮 tar アーカイブファイル形式(.tar および .tar.gz)は、Windows Server インスタンスではサポートされていません。

アプリケーションとデプロイグループの作成

CodeDeployデプロイグループは、タグ、Amazon EC2 Auto Scaling グループ名、または両方に基づいてインスタンスのコレクションを識別します。複数のアプリケーションリビジョンを同じインスタンスにデプロイできます。1 つのアプリケーションリビジョンを複数のインスタンスにデプロイできます

たとえば、3 つの本番稼働用サーバーに「Prod」というタグを追加し、2 つのバックアップサーバーに「Backup」というタグを追加できます。これら 2 つのタグを使用して、CodeDeploy アプリケーションで 2 つの異なるデプロイグループを作成し、デプロイにどちらのサーバーのセットを参加させるか (または両方を参加させるか) 選択することができます。

デプロイグループの複数のタググループを使用して、デプロイするインスタンスのセットを減らすことができます。詳細については、「Tagging Instances for Deployments」を参照してください。

アプリケーションリビジョンのデプロイ

これで、Amazon S3 から、GitHubまたはデプロイグループにアプリケーションリビジョンをデプロイする準備ができました。CodeDeployコンソールまたは create-deployment コマンドを使用できます。デプロイを制御するために指定できるパラメータ (リビジョン、デプロイグループ、デプロイ設定など) があります。

アプリケーションの更新

アプリケーションを更新し、CodeDeployコンソールを使用するか、create-deployment コマンドを呼び出してリビジョンをプッシュできます。

停止、失敗したデプロイ

デプロイを停止するには、CodeDeployコンソールまたは stop-deployment コマンドを使用できます。デプロイを停止しようとする場合、次の 3 つのうち 1 つのことが発生します。

  • デプロイは停止し、オペレーションは成功というステータスを返す。この場合、停止したデプロイに対してそれ以上デプロイライフサイクルイベントは実行されません。デプロイグループで一部のファイルは既にコピーされ、一部のスクリプトは実行され、1 つ以上のインスタンスが実行されている可能性があります。

  • デプロイは即時に停止せず、オペレーションは保留中というステータスを返す。この場合、一部のデプロイライフサイクルイベントは、デプロイグループでまだ実行中である可能性があります。デプロイグループで一部のファイルは既にコピーされ、一部のスクリプトは実行され、1 つ以上のインスタンスが実行されている可能性があります。保留中のオペレーションが完了すると、デプロイを停止するためのそれ以降の呼び出しは、成功というステータスを返します。

  • デプロイは停止できず、オペレーションはエラーを返す。詳細については、AWS CodeDeploy API リファレンスの「よくあるエラー」を参照してくださいErrorInformation

失敗したデプロイでは、停止されたデプロイのように、デプロイグループの 1 つ以上のインスタンスで一部のデプロイライフサイクルイベントが実行済みになる場合があります。デプロイが失敗した理由を調べるには、CodeDeploy コンソールを使用するか、get-deployment-instance コマンドを呼び出すか、失敗したデプロイのログファイルデータを分析することができます。詳細については、アプリケーションリビジョンとログファイルのクリーンアップおよびCodeDeployEC2/オンプレミスデプロイのログデータの表示を参照してください。

デプロイと再デプロイのロールバック

CodeDeploy は新しいデプロイとして、以前にデプロイされたリビジョンを再デプロイすることによって、ロールバックを実装します。

デプロイが失敗した、アラームのモニタリングしきい値に一致したなど、特定の条件が満たされた場合に、自動的にデプロイをロールバックするようグループデプロイを設定できます。個別のデプロイで、デプロイグループに指定されたロールバック設定をオーバーライドすることもできます。

以前のデプロイされたバージョンを手動で再デプロイして、失敗したデプロイをロールバックすることもできます。

いずれの場合でも、新しいデプロイまたはロールバックされたデプロイには独自のデプロイ ID が割り当てられます。CodeDeploy で表示できるデプロイの一覧には、どれが自動デプロイの結果であるかが示されます。

詳細については、「CodeDeploy を使用してデプロイを再デプロイしてロールバックする」を参照してください。