

# Amazon ECS Express Mode サービスの更新
<a name="express-service-update-full"></a>

Express Mode サービスは、ネットワーク、ロードバランシング、Application Auto Scaling の設定可能なオプションを提供し、これらのサービス全体の変更をオーケストレーションすることで、サービスの更新プロセスを簡素化します。

Express Mode サービスを更新して、コンテナイメージの変更、リソース割り当ての調整、または設定の変更を行うことができます。更新はカナリアデプロイを使用してデプロイされ、可用性を維持するためにアラームベースのロールバックアラームが使用されます。

## デプロイの動作
<a name="express-service-update-full-behavior"></a>

Express Mode サービスは、デフォルトでカナリアデプロイを使用して、安全な更新と迅速なロールバックを実現します。
+ 新しい環境が作成され、変更とともにタスクがデプロイされます
+ トラフィックの 5% が新しい環境に移行します
+ 4xx と 5xx エラーの割合の合計が 3 分以内に 2 つのデータポイントで 1 より大きい場合、アラームベースのロールバックがトリガーされます
+ ヘルスチェックは新しいタスクが正常であることを確認します
+ ベイク時間が 3 分経過すると、トラフィックの 100% が新しい環境に移行されます
+ モニタリング用のベイク時間が 3 分経過すると、古いタスクは徐々に停止して置き換えられます

詳細については、「[Amazon ECS カナリアデプロイ](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/canary-deployment.html)」を参照してください。

## 手順
<a name="express-service-update-full-procedure"></a>

1. コンソール ([https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)) を開きます。

1. ナビゲーションペインで **[Clusters]** (クラスター) を選択してください。

1. **[クラスター]** ページで、Express Mode サービスを含むクラスターの名前を選択します。

1. [クラスターの詳細] ページで、**[サービス]** タブを選択します。

1. Express Mode サービスを表示するようにフィルターを設定します。**[リソース管理タイプを絞り込む]** で、**ECS** を選択します。

   Express Mode サービスには、名前の横に **Express** バッジがあります。

1. **[構成]** の下:

   1. アプリケーションに使用するイメージを指定します。**[イメージ URI]** でイメージの URI を入力します。Amazon ECR イメージを参照するには、**[ECR イメージを参照]** を選択し、次の操作を行います。

      1. **[プライベートリポジトリ]** で、Amazon ECR プライベートリポジトリを選択します。

      1. **[イメージ]** で、イメージを選択します。

      1. イメージを識別する方法を選択します。**[イメージの選択方法]** で、以下のオプションのいずれかを選択します。
         + AWS は **[イメージダイジェスト]** を選択することをお勧めしています。
         + タグを使用するには、**[イメージタグ]** を選択してからタグを選択します。

   1. プライベートレジストリを使用するには、**[プライベートレジストリ]** を選択します。次に、**[Secrets Manager ARN または名前]** に前提条件で作成した Secrets Manager ARN を入力します。

   1. **[タスク実行ロール]** で、ロールを選択するか、新しいロールを作成して更新します。アクセス許可を追加する必要がある場合は、タスク実行ロールを更新できます。

1. **[追加設定]** で、サービスをカスタマイズします。

   1. **[コンテナ]** で以下を実行します。

      1. **[コンテナポート]** で、アプリケーションがリッスンするポートを更新します (デフォルトは 80)。

      1. **[ヘルスチェックパス]** で、ヘルスチェックのパス (`/health` など) を更新します。

   1. **[環境変数]** で、アプリケーションに必要な環境変数のキーと値のペアを追加します。

      1. **[キー]** に、環境変数の名前を入力します。

      1. **[値タイプ]** で、**[環境変数]** または **[シークレット]** を選択します。

      1. **[値または値の取得]** には、値またはリファレンスを入力します。

      1. **[環境変数の追加]** を選択して、必要に応じて変数を追加します。

   1. **[コマンド]** に、オプションでカスタムコマンドを入力して Docker CMD 命令を上書きします。

   1. **[タスクロール]** で、コンテナで実行されているアプリケーションにアクセス許可を付与する IAM ロールを追加します。これにより、アプリケーションは AWS サービスに対して API コールを実行できます。

   1. **[コンピューティング]** で以下を実行します。

      1. **[CPU]** で、タスクの vCPU 割り当てを更新します (1 vCPU など)。

      1. **[メモリ]** で、タスクのメモリ割り当てを更新します (2 GB など)。

   1. **[自動スケーリング]** で以下を実行します。

      1. **[ECS サービスメトリクス]** で、スケールするためのメトリクス (**ECS サービスの平均メモリ使用率**や**ターゲットあたりのリクエスト数**など) を選択します。

      1. **[ターゲット値]** で、スケーリングのターゲット (**60** や **1000** など) を入力します。

      1. **[最小タスク数]** と **[最大タスク数]** で、スケーリング制限を更新します。

   1. **[ログ]** で以下を実行します。

      1. **[Amazon CloudWatch ロググループ]** で、アプリケーションログのロググループ名を更新します。これにより、既存のログは移動されませんが、新しいサービスリビジョンからのログの書き込みが開始されます。

      1. **[Amazon CloudWatch ログストリームプレフィックス]** に、ログストリームの新しいプレフィックスを入力します。

1. **[更新]** を選択して、Express Mode サービスを更新します。

### カスタムタスク定義による更新
<a name="express-service-update-custom-td"></a>

`taskDefinitionArn` パラメータを指定することで、カスタムタスク定義で Express Mode サービスを更新できます。Express Mode はタスク定義をそのまま使用し、残りのインフラストラクチャの管理を継続します。

以降の更新では、以下のいずれかを選択できます。
+ タスク定義の新しいリビジョンを作成し、`taskDefinitionArn` を更新します。Express Mode は、次のサービスデプロイに新しいリビジョンを使用します。
+ Express Mode パラメータを直接更新します。
  + タスク定義に関連しないパラメータ (`healthCheckPath`、`networkConfiguration`、`scalingTarget` など) の場合、Express Mode はタスク定義を変更せずに変更を適用します。
  + タスク定義関連のパラメータ (`primaryContainer` または `cpu`/`memory` を使用したイメージ、CPU、メモリなど) の場合、Express Mode は、他のタスクレベルの設定を維持しながら、変更を加えた新しいマネージドタスク定義を作成します。

**カスタムタスク定義で更新するには (Amazon ECS コンソール)**

1. Amazon ECS コンソールを開き、Express Mode サービスに移動します。

1. **サービスの更新** の横にあるドロップダウン矢印を選択し、**カスタムタスク定義で更新** を選択します。

1. **Task definition family**(タスク定義ファミリ) については、既存のタスク定義ファミリを選択してください。新しいタスク定義を作成するには、**タスク定義** リンクを選択してください。

1. **タスク定義リビジョン** では、使用するリビジョンを選択するか、空白のままにして最新のリビジョンを使用します。

1. (オプション) **追加設定** を展開して、ヘルスチェックパス、ネットワーク、または自動スケーリングの設定を更新します。

1. **[更新]** を選択します。

次の AWS AWS CLI コマンドは、カスタムタスク定義で Express Mode サービスを更新します。

```
aws ecs update-express-gateway-service \
    --service-arn arn:aws:ecs:us-west-2:123456789012:service/default/my-service \
    --task-definition-arn arn:aws:ecs:us-west-2:123456789012:task-definition/my-td:4
```

**注記**  
CloudFormation を使用し、`taskDefinitionArn` を初めて Express Mode サービスに追加する場合は、最初にスタックを再デプロイします。これにより、ロールバックの互換性が確保されます。