2021年5月12日水曜日

ECS x CodeDeploy


ECS(Fargate)でのBlue/Greenデプロイメントについて記載。 


Fragateのクラスタの作成については割愛します。



サービスの作成:

1)サービスタブから作成を押します。









起動タイプ:Fargateを選択。

タスク定義:

①ファミリー:対象のタスク定義を選択する

②リビジョンを選択。

サービス名:把握しやすい名前で

タスク数:必要な数を記載。























デプロイメントタイプ:Blue/Greenデプロイメント(AWS Code DEployを使用)を選択

Deployment configuration*:CodeDeployDeafult.ECSAllAtOnceを選択

CodeDeploy のサービスロール*CodeDeploy用に作成したIAMロールを選択


ネットワーク構成:環境に合わせた設定を選択してください。

①クラスターのVPC(今回は、デフォルトのネットワークを選択)

②サブネット(AZの選択)

③セキュリティグループ:必要に応じたセキュリティグループを選択。






■ロードバランシング

ロードバランサの種類:Application Laod Blancerを選択

ロードバランサー名:作成済みのApplication Load Blancerを選択


■ロードバランス用のコンテナ

プロダクションリスナーポート:80(通常のアクセス用)


テストリスナーポート:新規作成(8080)

  ->テストリリース用に別途ポート番号を指定します。





■ターゲットグループの設定


ターゲットグループ1の名前:作成済みのターゲットグループを指定

ターゲットグループ2の名前:

①新規作成

把握しやすい名前









以下、設定に問題ないようならサービスの作成を押す。





作成後の様子:




以下、タスクが完成されるまで、一旦待つ。










■CodeDeployの画面に移動


1)デプロイ -> アプリケーション -> 上記の設定によって自動生成された

アプリケーション名(AppECS-test-web1)を選択


2)アプリケーションの作成を選択




アプリケーションをデプロイするを選択








①デプロイグループ:表示されたものを選択

②リビジョンタイプ:今回は、直接、定義内容を記載するのでAppSpecエディタの使用


AppSpec言語:YAML

==========サンプル==========

Resources:

  - TargetService:

      Type: AWS::ECS::Service

      Properties:

        TaskDefinition: “タスク定義のarnを記載する”

        LoadBalancerInfo: 

          ContainerName: “コンテナ”名 

          ContainerPort: ポート番号

============================


3)デプロイの作成を押す。




















デプロイを実施するタイミングで、Curlコマンドを0.01間隔で送信してみる。














ECSの画面に戻ると、新旧のタスクのリビジョンが表示されていることが把握できる。







CodeDeployでは、タスクの入れ替えを行っている様子。

(この時点で、新リビジョンのコンテナと入れ替えが完了している)














通常のページ(80ポート):





念の為、テスト用のポート(8080)を確認する




EFS(Dockerfile)の記載について注意

  Dockerfileにefsのマウントパス宛に、ファイルコピーを行うと ECSのサービス作成時に、コンテナのデプロイ失敗に(container run time error)になるので 別経由で、EFSにファイルをコピーした方が良い!! <Dockerfile> ...