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 というファイルを作成し、以下の内容を記載します。
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