Amazon ECS でホストされているサービスのブルー/グリーンデプロイはどのように実行できますか?

最終更新日: 2021 年 1 月 22 日

Amazon Elastic Container Service (Amazon ECS) でホストされているサービスのブルー/グリーンデプロイを実行したいと考えています。

簡単な説明

手順に従ってブルー/グリーンデプロイを実行する前に、次のものがあることを確認してください。

解決方法

AWS Identity and Access Management (IAM) サービスロールの作成

Amazon ECS で AWS CodeDeploy にブルー/グリーンデプロイタイプを使用するには、Amazon ECS サービスを更新するアクセス許可を CodeDeploy サービスに付与する必要があります。

1.    IAM コンソールを開きます。

2.    ナビゲーションペインで [Roles] を選択します。

3.    [Create role] を選択します

4.    [Select type of trusted entity] (信頼されたエンティティの種類の選択) セクションで、[AWS service] (AWS のサービス)、[ CodeDeploy] の順に選択します。

5.    [Select your use case] (ユースケースの選択) セクションで、[ CodeDeploy - ECS]、[Next:Permissions] (次へ: アクセス許可) を選択します。

注意: デフォルトの AWSCodeDeployforECS ポリシーは維持します。このポリシーには、CodeDeploy が Amazon ECS やその他のサービスと正しく対話するために必要なアクセス許可が含まれています。

6.    [次のステップ: タグ] を選択します。

7.    (オプション) タグ名を入力し、[Next: Review] (次のステップ: レビュー) を選択します。

8.    [Role name] (ロール名 ) に「ecsCodeDeployRole」と入力します。

9.    [Create role] (ロールの作成) を選択します。

Application Load Balancer の作成

1.    Amazon EC2 コンソールを開きます。

2.    ナビゲーションペインの [Load Balancing] (ロードバランシング) セクションで、[Load Balancers] (ロードバランサー) を選択します。

3.    [Create Load Balancer] (ロードバランサーの作成) をクリックします。

4.    [Select load balancer type] (ロードバランサーの選択) ページで、[Application Load Balancer] から [Create] (作成) をクリックします。

5.    [名前] (Name) にロードバランサーの名前を入力します。

6.    [Availability Zones] (アベイラビリティーゾーン) セクションで、Amazon ECS クラスターを作成した VPC を選択し、インターネットへのアクセスがある任意の 2 つのサブネットを選択します。 

7.    [Next: Configure Security Settings] (次へ: セキュリティ設定の構成) をクリックします。

8.    [Create a new security group] (新しいセキュリティグループを作成) を選択します。

9.    [Security group name] (セキュリティグループ名) に「Sample Security-group」と入力します。

10.   [Add Rule] (ルールを追加) をクリックします。

11.    [Port Range] (ポート範囲) に「8080」と入力します。[Source] (ソース) に「0.0.0.0/0」と入力します。

12.    [Next: Configure Routing] (次へ: ルーティングの設定) をクリックします。

13.    [Target group] (ターゲットグループ) にターゲットグループの名前を入力します。

14.    [Target type] (ターゲットタイプ) で [IP] を選択します。

15.    [Next: Register Targets] (次へ:ターゲットの登録) を選択し、ターゲットグループを登録して IP を設定します。

16.    [Next:Review] (次へ:レビュー) を選択します。

17.    [Create] (作成) をクリックします。

タスク定義の作成

1.    Amazon ECS コンソールを開きます。

2.    ナビゲーションペインで、[Task Definitions] (タスク定義) を選択します。

3.    [新しいタスク定義の作成] を選択します。

4.    [Fargate] を選択してから、[次のステップ] をクリックします。

5.   ニーズに基づいてタスク定義を構成し、[Create] (作成) を選択します。

以下のタスク定義例では、AWS Fargate 起動タイプと Docker ハブからの Nginx イメージを使用しています。

{
  "executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole",
  "containerDefinitions": [{
    "name": "sample-website",
    "image": "nginx:latest",
    "essential": true,
    "portMappings": [{
      "hostPort": 80,
      "protocol": "tcp",
      "containerPort": 80
    }]
  }],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "networkMode": "awsvpc",
  "cpu": "256",
  "memory": "512",
  "family": "sample-website"
}

Amazon ECS サービスの作成

1.    Amazon ECS コンソールを開きます。

2.    ナビゲーションペインの Amazon ECS セクションで、[Clusters] (クラスター) を選択し、目的のクラスターを選択します。

3.    [Services] (サービス) タブで、[Create] (作成) を選択してサービスを作成します。

4.    [Configure service] (サービスの構成) セクションの [Launch type] (起動タイプ) で [FARGATE] を選択します。

5.    [Task Definition] (タスクの定義) で、前のセクションで作成したタスク定義を選択します。

6.    [Service name] (サービス名) にサービスの名前を入力します。例えば、「Sample-Website」と入力します。

7.    [Number of tasks] (タスクの数) にサービスを実行するタスクの数を入力します。

8.    [Deployments] (デプロイ) セクションで、[Blue/green deployment (powered by AWS CodeDeploy)] (ブルー/グリーンデプロイ (AWS CodeDeploy による)) を選択します。

9.    [Service role for CodeDeploy] (CodeDeploy のサービスロール) で [ecsCodeDeployRole] を選択します。

注意: ecsCodeDeployRole サービスロールは以前の手順で作成しています。

10.    [Next step] (次のステップ) をクリックします。

11.    [VPC and security groups] (VPC とセキュリティグループ) セクションでクラスター VPC とサブネットを選択します。

12.    [Load balancing] (ロードバランシング) セクションの [Load balancer] (ロードバランサー) タイプで [Application Load Balancer] を選択します。

13.    [Load balancer name] (ロードバランサー名) で、前に作成したロードバランサーを選択します。

14.    [Container to load balancer] (ロードバランサーのコンテナ) セクションで、[Add to load balancer] (ロードバランサーに追加) を選択します。

15.    [Container to load balance] (負荷分散するコンテナ ) セクションの [Production listener port] (本番リスナーポート) で [80: HTTP] を選択します。

16.    [Test listener] (テストリスナー) チェックボックスをオンにします。

17.    [Test listener port] (リスナーポートのテスト ) で、[create new] (新規作成) を選択し、リスナーポートとして「8080」を入力します。

18.    [Additional configuration] (追加の構成) セクションの [Target group 1 name] (ターゲットグループ 1 の名前) で、ロードバランサーの作成時に作成したターゲットグループを選択します。

19.    [Target group 2 name] (ターゲットグループ 2 の名前) に対して、Amazon ECS コンソールで「sample-website-tg-2」という名前の新しいターゲットグループを作成します。

20.    [Set Auto Scaling (optional)] (Auto Scaling の設定 (オプション)) ページをスキップし、[Next step] (次のステップ) を選択します。

21.    [Create Service] を選択します。

これで、1 つのタスクを実行した状態で、作成した新しいサービスを表示できます。

Amazon ECS ブルー/グリーンデプロイが機能していることの確認

ブルー/グリーンの Amazon ECS サービスを作成したら、変更を含む新しいタスク定義を作成し、Amazon ECS サービスを更新できます。これで CodeDeploy コンソールにデプロイが作成されます。

1.    Amazon ECS コンソールを開きます。

2.    ナビゲーションペインから [Task Definitions] (タスク定義) を選択します。

3.    目的のタスク定義を選択し、[Create new revision] (新しいリビジョンの作成) を選択し、[Create] (作成) を選択します。

注意: 次の例では、httpd: 2.4 を使用するように image プロパティが更新されます。

{
  "executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole",
  "containerDefinitions": [{
    "name": "sample-website",
    "image": "httpd:2.4",
    "essential": true,
    "portMappings": [{
      "hostPort": 80,
      "protocol": "tcp",
      "containerPort": 80
    }]
  }],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "networkMode": "awsvpc",
  "cpu": "256",
  "memory": "512",
  "family": "sample-website"
}

4.    ナビゲーションペインから [Clusters] (クラスター) を選択し、Amazon ECS サービスをデプロイしたクラスターを選択します。

5.    [Services] (サービス) タブで Amazon ECS サービスを選択し、[Update] (更新) を選択します。

6.    [Configure service] (サービスの構成) セクションの [Task Definition] (タスク定義) で、手順 3 で作成した最新のリビジョンを選択します。

7.    [Next step] (次のステップ) を選択して、ウィザードの残りのページをすべてスキップし、[Update Service] (サービスをアップデート) を選択します。

8.    [View Service] (サービスを表示) を選択します。

9.    [Deploy] (デプロイ) タブの [Deployment Id] (デプロイ ID) 列でデプロイ ID を選択し、CodeDeploy デプロイメントを表示します。


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?