📝

ECS のブルー/グリーンデプロイに関するチュートリアルをコンソールからやってみた

に公開

ブルー/グリーンデプロイを使用した Amazon ECS サービスのデプロイ - Amazon Elastic Container Service
上記チュートリアルは AWS CLI で実施する内容ですが、今回はコンソールからやってみました。

前提条件

  • コンソールを操作する IAM プリンシパルには AdministratorAccess 権限を付与
  • ECS CodeDeploy IAM ロールは作成済み
  • 東京リージョンを使用

ステップ 1: Application Load Balancer の作成

ALB とターゲットグループを作成します。

ロードバランサー名に「bluegreen-alb」と入力します。

パブリックサブネットを 2 つ選択します。

「ターゲットグループの作成」をクリックします。

IP アドレスをターゲットとして選択します。

ターゲットグループ名に「bluegreentarget1」と入力します。

その他の設定はデフォルトのままターゲットグループを作成します。

ALB の作成画面に戻り、作成したターゲットグループを選択します。

その他の設定はデフォルトのまま ALB を作成します。

ステップ 2: Amazon ECS クラスターを作成する

ECS コンソールからクラスターを作成します。

クラスター名に「tutorial-bluegreen-cluster」と入力します。
その他の設定はデフォルトのままクラスターを作成します。

ステップ 3: タスク定義を登録する

タスク定義ファミリーに「sample-fargate」と入力します。

タスクサイズの CPU は .25 vCPU、メモリは .5 GB に設定します。

コンテナ名に「sample-app」、イメージ URI に「public.ecr.aws/docker/library/httpd:latest」を入力します。

Docker 設定のセクションをひらき、エントリポイントに「sh,-c」と入力します。

コマンドに以下の内容を入力します。

"/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' >  /usr/local/apache2/htdocs/index.html && httpd-foreground\""

その他の設定はデフォルトのままタスク定義を作成します。

ステップ 4: Amazon ECS サービスを作成する

サービスの作成画面で既存のクラスター「tutorial-bluegreen-cluster」を選択します。

コンピューティングオプションで「起動タイプ」を選択します。

タスク定義には作成した sample-fargate を指定します。
タスク定義のリビジョンには sample-fargate の最新リビジョンを指定します。
サービス名に「service-bluegreen」と入力します。

デプロイオプションのセクションをひらき、デプロイタイプで「ブルー/グリーンデプロイ (AWS CodeDeploy を使用)」を選択します。
CodeDeploy のサービスロールには前提条件で作成済みの ECS CodeDeploy IAM ロールを指定します。

ネットワーキングのサブネットでは ALB 作成時に指定したサブネットと同じサブネットを 2 つ選択します。

ロードバランシングのセクションをひらき、「ロードバランシングを使用」にチェックを入れます。

「既存のロードバランサーを使用」を選択します。
プロダクションリスナーで「既存のリスナーを使用」を選択します。

ターゲットグループ 1 では「既存のターゲットグループを使用」を選択します。
ターゲットグループ 2 では「新しいターゲットグループの作成」を選択します。

その他の設定はデフォルトのままサービスを作成します。
ALB の DNS 名にアクセスして以下の画面が表示されればデプロイ成功です。

ステップ 5: AWS CodeDeploy リソースを作成する

ここまでの手順をコンソールから実施した場合、CodeDeploy リソースの作成は不要です。
CodeDeploy アプリケーションやデプロイグループは ECS サービス作成と同時に CloudFormation によって作成されているからです。

ただし、1 点だけコンソール上で修正します。
デプロイグループの元のリビジョンの終了時間が 1 時間に設定されているため、5 分に変更します。

ステップ 6: CodeDeploy デプロイを作成およびモニタリングする

ECS のタスク定義 sample-fargate で新しいリビジョンを作成し、コマンドを以下の内容に更新します。

"/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #097969;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' >  /usr/local/apache2/htdocs/index.html && httpd-foreground\""

コードエディタなどで appspec.yaml というファイルを作成し、以下の内容を記載します。

appspec.yaml
version: 0.0
Resources:
  - TargetService:
      Type: AWS::ECS::Service
      Properties:
        TaskDefinition: "<タスク定義 sample-fargate の最新リビジョンの ARN>"
        LoadBalancerInfo:
          ContainerName: "sample-app"
          ContainerPort: 80
        PlatformVersion: "LATEST"

任意の名称の S3 バケットを作成し、上記 appspec.yaml をアップロードします。

CodeDeploy のデプロイグループからデプロイを作成します。
リビジョンの場所は S3 バケットにアップロードした appspec.yaml のパスです。

その他の設定はデフォルトのままデプロイを作成します。
デプロイ完了後に ALB の DNS 名にアクセスして以下の画面が表示されればデプロイ成功です。

ステップ 7: クリーンアップする

削除前に、ステップ 5 で設定変更したデプロイグループの設定を元に戻します。
元に戻すことで CloudFormation スタックとの差分がなくなり、スタック削除時のエラーを防げます。

ECS サービスを削除します。
CodeDeploy 関連のリソースもサービスの削除で一緒に削除されます。

その他、以下のリソースも不要であれば削除してください。

  • ECS クラスター
  • タスク定義
  • ALB
  • ターゲットグループ
  • S3 バケット

まとめ

今回は ECS のブルー/グリーンデプロイに関するチュートリアルをコンソールからやってみました。
どなたかの参考になれば幸いです。

参考資料

Discussion