IAMロールの設定とパイプライン設定の編集

今回定義したビルド定義(buildspec.yml)では、ビルド内でECRに対してDockerイメージをPushしているため、CodeBuildに割り当てたIAMロールに対してECRの操作権限を付与する必要があります。

作業手順

IAMロールへのポリシーのアタッチ

  1. 「サービス」から「IAM」を選択し、「ロール」画面の検索バーでCodeBuildと検索し、先ほど自動作成されたロール codebuild-{ユーザ名}-frontend-build-service-roleを選択します。

  2. 「ポリシーをアタッチします」を選択します。

    1

  3. 「アクセス権限をアタッチする」画面でAmazonEC2ContainerRegistryPowerUserポリシーをアタッチします。

    • 画面上の検索バーで「container」と検索すると、上位に表示されます。

    2

CodePipelineの設定編集

  1. 「CodePipeline」、「パイプライン」、「先ほど作成した{ユーザ名}-ecsdemo-pipeline」と順に選択し「編集する」と選択します。

    1. このパイプラインのビルドが失敗しているのは、ポリシーをアタッチまでIAMロールに必要な権限がなかったためです。

    3

  2. Deployステージの「ステージを編集する」を選択し、Deployの項目の×アイコンの隣にあるアイコンを選択します。

    4

  3. 入力アーティファクトで「追加」を選択し、「SourceArtifact」を追加します。

    5

  4. 続けて以下のように設定し、「完了」、「保存」と選択します。

    • Amazon ECS タスク定義:SourceArtifact

    • AWS CodeDeploy AppSpec ファイル:SourceArtifact

    • 入力アーティファクトを持つイメージの詳細:BuildArtifact

      • これは、タスク定義のimageを動的に変更するための情報が記載された入力アーティファクトを指します。
    • タスク定義のプレースホルダー文字:IMAGE1_NAME

    6

CodeDeployの設定編集

  1. 「CodeDeploy」、「アプリケーション」、「AppECS-{ユーザ名}-fargate-cluster-{ユーザ名}-ecsdemo-frontend」、「DgpECS-user1-fargate-cluster-user1-ecsdemo-frontend」と順に選択し、「編集」を選択します。

  2. ここで、以下のように設定します。

    • Blue/Greenの検証期間を設けるため「トラフィックを再ルーティングするタイミングを指定します」を選択します。

    • 再ルーティングされるまでの期間と「元のリビジョンの終了」をそれぞれ0 Days, 0 Hours, 10 Minutesに変更します。

    8

実装の確認

パイプラインの実行

  1. CodePipelineから「{ユーザー名}-ecsdemo-frontend」を選択し、「変更をリリースする」を選択します。

  2. パイプラインのリリースが始まります。

デプロイ状況の確認

  1. 以下の方法で、デプロイメントの進行状況をCodeDeployコンソールから確認します。

    1. 「デプロイメント」から、最新の「デプロイID」を選択します。

    2. ステップ3に入ると、右上に「トラフィックの再ルーティング」が表示されます。

    3. ブラウザで、作成したALBの「URL:9000」にアクセスし、置換タスク(新しいバージョン)での表示を確認します。

    4. 問題があれば「デプロイを停止してロールバック」、なければ「トラフィックの再ルーティング」を選択して、処理を進めます。

    10

デプロイ時の挙動の確認

  • オリジナルタスクは設定した10分を経過すると削除されます。

  • 置換タスク(新しいバージョン)に何か問題があればロールバックしましょう。

  • 指定した時間分の待機が不要であれば、画面右上の「元のタスクセットの終了」から削除もできます。

    11

  • ECSコンソール「クラスター」の「サービス」タブからサービス名を選択して「デプロイメント」を表示すると、Blue/Greenデプロイメントの状況を確認することもできます。

  • 「イベント」タブでは、タスクの起動や、Drainingの履歴を確認することができます