

# タスクを置き換えて Amazon ECS サービスをデプロイする
<a name="deployment-type-ecs"></a>

*ローリング更新* (`ECS`) デプロイタイプを使用するサービスを作成すると、Amazon ECS サービススケジューラは現在実行中のタスクを新しいタスクに置き換えます。ローリング更新中にサービスに対して Amazon ECS が追加または削除するタスク数は、サービスデプロイ設定により制御されます。

Amazon ECS は、次のパラメータを使用してタスク数を決定します。
+ `minimumHealthyPercent` は、ローリングデプロイメント中またはコンテナインスタンスがドレインしているときに、サービスに対して実行され正常な状態であることが必要なタスク数の下限を、サービスに必要なタスク数の割合 (%) として表します。この値は切り上げられます。例えば、最小正常率が `50` で、必要なタスク数が 4 の場合、スケジューラは 2 つの新しいタスクを開始する前に既存のタスクを 2 つ停止できます。同様に、最小正常率が 75% で、必要なタスク数が 2 の場合、結果の値も 2 であるため、スケジューラはタスクを停止できません。
+ `maximumPercent` は、ローリングデプロイメント中またはコンテナインスタンスがドレインしているときに、サービスに対して実行する必要があるタスク数の上限を、サービスに必要なタスク数の割合 (%) として表します。この値は切り捨てられます。例えば、最大パーセンテージが `200` で、目的のタスク数が 4 の場合、スケジューラは既存のタスクを 4 つ停止する前に 4 つの新しいタスクを開始できます。同様に、最大比率が `125` で、必要なタスク数が 3 の場合、結果の値も 3 であるため、スケジューラはタスクを開始できません。

ローリングデプロイ中にタスクが異常な状態になると、Amazon ECS はそれらを置き換えてサービスの `minimumHealthyPercent` を維持し、可用性を保護します。異常な状態のタスクは、それらが属するのと同じサービスリビジョンを使用して置き換えられます。これにより、ソースリビジョンの異常な状態のタスクの置換は、ターゲットリビジョンのタスクの失敗とは無関係になります。`maximumPercent` 設定で許可されている場合、スケジューラは異常な状態のタスクを停止する前に代替タスクを起動します。`maximumPercent` パラメータによって、代替タスクを先に開始できないようにスケジューラが制限されている場合、スケジューラは異常なタスクを 1 つずつ停止して容量を解放してから代替タスクを開始します。

**重要**  
最小正常率または最大正常率を設定するときは、デプロイが開始されたときにスケジューラが 1 つ以上のタスクを停止または開始できることを確認する必要があります。無効なデプロイメント構成が原因でサービスのデプロイメントが停止している場合、サービスイベントメッセージが送信されます。詳細については、「[サービス (*service-name*) は、サービスデプロイメント構成のため、デプロイメント中にタスクを停止または開始できませんでした。minimumHealthyPercent または maximumPercent の値を更新してから、もう一度試してください。](service-event-messages-list.md#service-event-messages-7)」を参照してください。

ローリングデプロイには 2 つの方法があり、サービスデプロイが失敗したタイミングをすばやく特定できます。
+ [Amazon ECS デプロイサーキットブレーカーが障害を検出する方法](deployment-circuit-breaker.md)
+ [CloudWatch アラームが Amazon ECS のデプロイ障害を検出する方法](deployment-alarm-failure.md)

これらの方法は個別に使用することも、一緒に使用することもできます。両方の方法を使用する場合、失敗に対するいずれかの方法の失敗の基準が満たされ次第、デプロイは失敗に設定されます。

使用するメソッドを決定する際は、以下のガイドラインを参考にします。
+ サーキットブレーカー - タスクが開始できないときにデプロイを停止する場合は、このメソッドを使用します。
+ CloudWatch アラーム - アプリケーションメトリクスに基づきデプロイを停止する場合は、このメソッドを使用します。

どちらの方法も、以前のサービスリビジョンへのロールバックをサポートしています。

## コンテナイメージの解決
<a name="deployment-container-image-stability"></a>

デフォルトでは、Amazon ECS はタスク定義で指定されたコンテナイメージタグをコンテナイメージダイジェストに解決します。単一のタスクを実行および維持するサービスを作成すると、そのタスクはタスク内のコンテナイメージダイジェストを確立するために使用されます。複数のタスクを実行および維持するサービスを作成すると、デプロイ中にサービススケジューラによって開始された最初のタスクを使用して、タスク内のコンテナイメージダイジェストを確立します。

コンテナイメージダイジェストの確立を 3 回以上試行しても失敗した場合、デプロイはイメージダイジェストの解決なしで続行されます。デプロイサーキットブレーカーが有効になっている場合、デプロイも失敗し、ロールバックされます。

コンテナイメージダイジェストが確立されると、Amazon ECS はこのダイジェストを、他の対象タスクの開始や、その後のサービスの更新に使用します。この結果、サービス内のすべてのタスクで常に同じコンテナイメージが実行され、ソフトウェアのバージョン整合性が得られます。

この動作は、コンテナ定義の `versionConsistency` パラメータを使用して、タスク内のコンテナごとに設定できます。詳細については、「[versionConsistency](task_definition_parameters.md#ContainerDefinition-versionconsistency)」を参照してください。

**注記**  
`1.31.0` より前のバージョンの Amazon ECS エージェントは、イメージダイジェストの解決をサポートしていません。エージェントバージョン `1.31.0`～`1.69.0` では、Amazon ECR リポジトリにプッシュされたイメージに対してのみイメージダイジェストの解決がサポートされています。エージェントバージョン `1.70.0` 以降では、すべてのイメージに対してイメージダイジェストの解決がサポートされています。
イメージダイジェスト解決に対応した Fargate Linux プラットフォームの最低バージョンは `1.3.0` です。イメージダイジェスト解決に対応した Fargate Windows プラットフォームの最低バージョンは `1.0.0` です。
Amazon ECS は、Amazon GuardDuty セキュリティエージェントや Service Connect プロキシなど、Amazon ECS によって管理されるサイドカーコンテナのダイジェストをキャプチャしません。
複数のタスクがあるサービスでコンテナイメージの解決に関連する潜在的なレイテンシーを減らすには、EC2 コンテナインスタンスで Amazon ECS エージェントバージョン `1.83.0` 以降を実行してください。潜在的なレイテンシーを回避するには、タスク定義でコンテナイメージダイジェストを指定します。
タスク数が 0 のサービスを作成した場合、タスク数が 0 よりも大きいサービスの別のデプロイをトリガーするまで Amazon ECS はコンテナダイジェストを確立できません。
更新されたイメージダイジェストを確立するために、新しいデプロイを強制できます。更新されたダイジェストは新しいタスクの開始に使用され、既に実行中のタスクには影響しません。新しいデプロイの強制の詳細については、「*Amazon ECS API リファレンス*」の「[forceNewDeployment](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html#ECS-UpdateService-request-forceNewDeployment)」を参照してください。
EC2 キャパシティプロバイダーを使用すると、最初のデプロイ中にタスクを開始するキャパシティーが不十分な場合、ソフトウェアバージョンの整合性が失敗する可能性があります。容量が制限されていてもバージョンの整合性を維持するには、デフォルトの動作に依存するのではなく、タスク定義のコンテナ設定で `versionConsistency: "enabled"` を明示的に設定してください。これは、デプロイに進む前に、キャパシティが利用可能になるまで Amazon ECS が待機する原因になります。

# Amazon ECS サービスパラメータのベストプラクティス
<a name="service-options"></a>

アプリケーションのダウンタイムを発生させないためのデプロイプロセスは次のとおりです。

1. 既存のコンテナを実行したまま、新しいアプリケーションコンテナを起動します。

1. 新しいコンテナが正常であることを確認します。

1. 古いコンテナを停止します。

 デプロイメント構成とクラスター内の予約されていない空きスペースの量によっては、すべての古いタスクを新しいタスクに置き換えるまでに、これを複数回行う必要がある場合があります。

数を変更するのに使用できるサービス設定オプションは 2 つあります。
+ `minimumHealthyPercent`: 100% (デフォルト)

  デプロイ中にサービスが `RUNNING` 状態を維持する必要があるタスクの数の下限を入力します。これは、最も近い整数に切り上げられた `desiredCount` のパーセンテージです。このパラメータにより、追加のクラスターキャパシティーを使用せずにデプロイできます。
+ `maximumPercent`: 200% (デフォルト)

   デプロイ中に `RUNNING` または `PENDING` 状態で許可されるサービスのタスク数の上限。これは、最も近い整数に切り捨てられた `desiredCount` のパーセンテージ (%) です。

**例: デフォルト設定オプション**

タスクが 6 つある次のサービスが、合計 8 つのタスクを処理できるクラスターにデプロイされているとします。デフォルトのサービス設定オプションでは、デプロイは 6 つの対象タスクの 100% を下回ることはありません。

デプロイの手順は次のとおりです。

1. 目標は 6 つのタスクを置き換えることです。

1. デフォルト設定では実行中のタスクが 6 つ必要なため、スケジューラは新しいタスクを 2 つ開始します。

   現在、既存のタスクが 6 つあり、新しいタスクが 2 つあります。

1. スケジューラは既存のタスクのうちの 2 つを停止します。

   現在、既存のタスクが 4 つあり、新しいタスクが 2 つあります。

1. スケジューラはさらに新しいタスクを 2 つ開始します。

   現在、既存のタスクが 4 つあり、新しいタスクが 4 つあります。

1. スケジューラは既存のタスクのうちの 2 つをシャットダウンします。

   現在、既存のタスクが 2 つあり、新しいタスクが 4 つあります。

1. スケジューラはさらに新しいタスクを 2 つ開始します。

   現在、既存のタスクが 2 つあり、新しいタスクが 6 つあります。

1. スケジューラは最後の 2 つの既存のタスクをシャットダウンします。

   現在、新しいタスクが 6 つあります。

上記の例では、オプションにデフォルト値を使用すると、新しいタスクが開始されるたびに 2.5 分待たされます。さらに、ロードバランサーは古いタスクが停止するまで 5 分間待たなければならない場合があります。

**例: `minimumHealthyPercent` の変更**

`minimumHealthyPercent` 値を 50% に設定すると、デプロイをスピードアップできます。

タスクが 6 つある次のサービスが、合計 8 つのタスクを処理できるクラスターにデプロイされているとします。デプロイの手順は次のとおりです。

1. 目標は 6 つのタスクを置き換えることです。

1. スケジューラは既存のタスクのうちの 3 つを停止します。

   `minimumHealthyPercent` 値を満たす既存のタスクがまだ 3 つ実行されています。

1. スケジューラは新しいタスクを 5 つ開始します。

   既存のタスクが 3 つあり、新しいタスクが 5 つあります。

1. スケジューラは残りの 3 つの既存のタスクを停止します。

   新しいタスクが 5 つあります。

1. スケジューラは最後の新しいタスクを開始します。

   新しいタスクが 6 つあります。

**例: クラスターの空き容量を変更する**

追加のタスクを実行できるように、空き容量を増やすこともできます。

タスクが 6 つある次のサービスが、合計 10 個のタスクを処理できるクラスターにデプロイされているとします。デプロイの手順は次のとおりです。

1. 目標は既存のタスクを置き換えることです。

1. スケジューラは既存のタスクのうちの 3 つを停止します。

   既存のタスクが 3 つあります。

1. スケジューラは新しいタスクを 6 つ開始します。

   既存のタスクと 6 つの新しいタスクがあります。

1. スケジューラは既存のタスク 3 つを停止します。

   新しいタスクが 6 つあります。

**推奨事項**

タスクがしばらくアイドル状態で、使用率が高くない場合は、サービス設定オプションで次の値を使用してください。
+ `minimumHealthyPercent`: 50%
+ `maximumPercent`: 200% 

# Amazon ECS のローリング更新デプロイの作成
<a name="create-service-console-v2"></a>

タスク定義の指定された数のインスタンスをクラスター内で同時に実行して維持するサービスを作成します。タスクの 1 つが失敗または停止した場合、Amazon ECS サービススケジューラはタスク定義の別のインスタンスを起動してそれを置き換えます。これは、サービスで必要な数のタスクを維持するのに役立ちます。

サービスを作成する前に、次の設定パラメータを決定します。
+ タスクを分散するコンピューティングオプションが 2 つあります。
  + **[capacity provider strategy]** (キャパシティープロバイダー戦略) により、Amazon ECS がタスクを 1 つまたは複数のキャパシティプロバイダーに分散させます。

    Amazon ECS マネージドインスタンスでワークロードを実行する場合は、キャパシティプロバイダーの戦略オプションを使用する必要があります。
  + **[起動タイプ]** により、Amazon ECS は Fargate またはクラスターに登録された EC2 インスタンスのいずれかでタスクを直接起動します。

    Amazon ECS マネージドインスタンスでワークロードを実行する場合は、キャパシティプロバイダーの戦略オプションを使用する必要があります。
+ `awsvpc` ネットワークモードを使用するタスク定義、またはロードバランサーを使用するように設定されたサービスには、ネットワーク設定が必要です。デフォルトでは、コンソールは、デフォルトAmazon VPC 内のすべてのサブネットおよびデフォルトセキュリティグループとともにデフォルトのAmazon VPC を選択します。
+ 配置戦略、デフォルトのタスク配置戦略は、アベイラビリティーゾーン間でタスクを均等に分散します。

  サービスの高可用性を確保するために、アベイラビリティーゾーンの再調整を使用することをお勧めします。詳細については、「[アベイラビリティーゾーン間での Amazon ECS サービスの調整](service-rebalancing.md)」を参照してください。
+ サービスデプロイに **[Launch Type]** (起動タイプ) を使用するバージョン、デフォルトではクラスター VPC のサブネットでサービスが開始されます。
+ **[capacity provider strategy]** (キャパシティープロバイダー戦略) では、コンソールはデフォルトでコンピューティングオプションを選択します。次に、コンソールがデフォルトを選択するときに使用する順序について説明します。
  + クラスターにデフォルトのキャパシティープロバイダー戦略が定義されている場合は、その戦略が選択されます。
  + クラスターにデフォルトのキャパシティープロバイダー戦略が定義されていないが、Fargate キャパシティープロバイダーをクラスターに追加している場合は、キャパシティープロバイダーを使用するカスタム `FARGATE` キャパシティープロバイダー戦略が選択されます。
  + クラスターにデフォルトのキャパシティープロバイダー戦略が定義されていないが、クラスターに 1 つ以上の Auto Scaling グループキャパシティープロバイダーが追加されている場合は、**[Use custom (アドバンスト)]** オプションが選択され、戦略を手動で定義する必要があります。
  + クラスターにデフォルトのキャパシティープロバイダー戦略が定義されておらず、クラスターにキャパシティープロバイダーが追加されていない場合は、Fargate起動タイプが選択されます。
+ デプロイの失敗が検出された場合のデフォルトのオプションでは、**[Amazon ECS デプロイサーキットブレーカー]** オプションと **[失敗時のロールバック]** オプションを使用します。

  詳細については、「[Amazon ECS デプロイサーキットブレーカーが障害を検出する方法](deployment-circuit-breaker.md)」を参照してください。
+ Amazon ECS でサービス内の必要なタスク数を自動的に増減するかどうかを決定します。詳細については、「[Amazon ECS サービスを自動的にスケールする](service-auto-scaling.md)」を参照してください。
+ Amazon ECS 内で実行される他のアプリケーションにアプリケーションを接続する必要がある場合、アーキテクチャに適したオプションを決定してください。詳細については、「[Amazon ECS サービスを相互接続する](interconnecting-services.md)」を参照してください。
+ Amazon ECS サーキットブレーカーを使用するサービスを作成すると、Amazon ECS はサービスデプロイとサービスリビジョンを作成します。これらのリソースを使用すると、サービス履歴に関する詳細情報を表示できます。詳細については、「[Amazon ECS サービスデプロイを使用してサービス履歴を表示する](service-deployment.md)」を参照してください。

  AWS CLI を使用してサービスを作成する方法については、「*AWS Command Line Interfaceリファレンス*」の「[https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html)」を参照してください。

  AWS CloudFormation を使用してサービスを作成する方法については、「*AWS CloudFormation ユーザーガイド*」の「[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html)」を参照してください。

## デフォルトのオプションを使用してサービスを作成する
<a name="create-default-service"></a>

コンソールを使用すると、サービスをすばやく作成してデプロイできます。サービスには次の設定があります。
+ クラスターに関連する VPC およびサブネットにデプロイします
+ タスクを 1 つ展開します
+ ローリングデプロイを使用します
+ デフォルトのキャパシティプロバイダーでキャパシティプロバイダー戦略を使用します
+ デプロイサーキットブレーカーを使用して障害を検出し、障害時にデプロイを自動的にロールバックするオプションを設定します。

デフォルトパラメータを使用してサービスをデプロイするには、次の手順に従います。

**サービスを作成するには (Amazon ECS コンソール)**

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

1. ナビゲーションページで、**[クラスター]** を選択します。

1. **[クラスター]** ページで、サービスを作成するクラスターを選択します。

1. **[Services]** (サービス) タブから、**[Create]** (作成) を選択します。

   **[サービスの作成]** ページが表示されます。

1. **[サービスの詳細]** で、次の操作を行います。

   1. **[タスク定義]** に、使用するタスク定義ファミリーとリビジョンを入力します。

   1. **[Service name]** (サービス名) でサービスの名前を入力します。

1. ECS Exec を使用してサービスをデバッグするには、**[設定のトラブルシューティング]** で **[ECS Exec をオンにする]** を選択します。

1. **[デプロイメント設定]** で、次の操作を行います。

   1. **[Desired tasks]** (必要なタスク) で、サービス内で起動および維持するタスクの数を入力します。

1. （オプション）サービスとタスクを識別しやすくするには、**[Tags]** (タグ) セクションを展開し、タグを設定します。

   Amazon ECS で、新しく起動されたすべてのタスクに、クラスター名とタスク定義のタグで自動でタグ付けするには、**[Turn on Amazon ECS managed tags]** (Amazon ECS で管理されたタグを有効にする) を選択し、**[Task definition]** (タスク定義) を選択します。

   Amazon ECS で、新しく起動されたすべてのタスクに、クラスター名とサービスタグを自動でタグ付けするには、**[Turn on Amazon ECS managed tags]** (Amazon ECS で管理されたタグを有効にする) を選択し、**[Service]** (サービス) を選択します。

   タグを追加または削除します。
   + [タグを追加] **[Add tag]** (タグを追加) を選択し、以下を実行します。
     + [**キー**] にはキー名を入力します。
     + [**値**] にキー値を入力します。
   + [タグの削除] タグの横にある [**タグの削除**] を選択します。

## 定義済みのパラメータを使用したサービスの作成
<a name="create-custom-service"></a>

定義済みのパラメータを使用してサービスを作成するには、次の手順に従います。

**サービスを作成するには (Amazon ECS コンソール)**

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

1. サービスを起動するリソースを決定します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/create-service-console-v2.html)

   **[サービスの作成]** ページが表示されます。

1. [サービスの詳細] で、次の操作を行います。

   1. **[タスク定義]**に、使用するタスク定義を入力します。次に、**[リビジョン]** で、使用するリビジョンを選択します。

   1. **[Service name]** (サービス名) でサービスの名前を入力します。

1. **[既存のクラスター]** で、クラスターを選択します。

   **[クラスターの作成]** を選択して、新しいクラスターでタスクを実行します。

1. クラスターのインフラストラクチャ全体にタスクを分散する方法を選択します。**[コンピュート設定]** で、オプションを選択します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/create-service-console-v2.html)

1. ECS Exec を使用してサービスをデバッグするには、**[設定のトラブルシューティング]** で **[ECS Exec をオンにする]** を選択します。

1. **[デプロイメント設定]** で、次の操作を行います。

   1. **[Service type]** (サービスタイプ) で、サービススケジューリング戦略を選択します。
      + タスク配置の制約をすべて満たすアクティブなコンテナインスタンスに、スケジューラが正確に 1 つのタスクをデプロイするには、**[Daemon]** (デーモン) を選択します。
      + スケジューラがクラスターに必要数のタスクを配置して維持するためには、**[Replica]** (レプリカ) を選択します。

   1. **[Replica]** (レプリカ) を使用した場合、**[Desired tasks]** (必要なタスク) に、サービス内で起動および維持するタスクの数を入力します。

   1. **[レプリカ]** を選択した場合、Amazon ECS がアベイラビリティーゾーン間のタスクの分散をモニタリングし、不均衡が発生したときにタスクを再分散させるには、**[アベイラビリティーゾーンのサービス再調整] **で、**[アベイラビリティーゾーンのサービス再調整]** を選択します。

   1. **[ヘルスチェックの猶予期間]**に、サービススケジューラがタスクの初回起動後に異常な Elastic Load Balancing、VPC Lattice、およびコンテナヘルスチェックを無視する時間 (秒単位) を入力します。ヘルスチェックの猶予期間値を指定しない場合、デフォルト値 0 が使用されます。

   1. サービスのデプロイタイプを決定してください。**[デプロイオプション]** を展開し、次のパラメータを指定します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/create-service-console-v2.html)

   1. Amazon ECS がデプロイの障害を検出して処理する方法を設定するには、**[Deployment failure detection]** (デプロイ障害検出) を展開し、オプションを選択します。

      1. タスクを開始できない場合にデプロイを停止するには、**[Use the Amazon ECS deployment circuit breaker]** (Amazon ECS デプロイサーキットブレーカーを使用する) を選択します。

         デプロイサーキットブレーカーによってデプロイが失敗状態に設定されたときに、ソフトウェアがデプロイを最後に完了したデプロイ状態に自動的にロールバックするようにするには、**[失敗時のロールバック]** を選択します。

      1. アプリケーションメトリクスに基づいてデプロイを停止するには、**[CloudWatch アラームを使用する]** を選択します。次に、**[CloudWatch アラーム名]** からアラームを選択します。新しいアラームを作成するには、CloudWatch コンソールに移動します。

         CloudWatch アラームによってデプロイが失敗状態に設定されたときに、ソフトウェアがデプロイを最後に完了したデプロイ状態に自動的にロールバックするようにするには、**[失敗時のロールバック]** を選択します。

1. タスク定義で `awsvpc` ネットワークモードを使用している場合は、カスタムネットワーク設定を指定できます。これを行うには、**[ネットワーキング]** を展開して次の操作を実行します。

   1. **VPC** の場合、使用する VPC を選択します。

   1. **[Subnets]** (サブネット) で、タスクスケジューラがタスクを配置するときに考慮する VPC 内のサブネットを 1 つ以上選択します。

   1. **[Security groups]** (セキュリティグループ) で、既存のセキュリティグループを選択することも、新しいセキュリティグループを作成することもできます。既存のセキュリティグループを使用するには、セキュリティグループを選択し、次のステップに進みます。新しいセキュリティグループを作成するには、[**Create a new security group (新しいセキュリティグループの作成)**] を選択します。セキュリティグループの名前、説明を指定してから、セキュリティグループのインバウンドルールを 1 つ以上追加する必要があります。

   1. **[Public IP]** (パブリック IP) では、タスクの Elastic Network Interface (ENI) にパブリック IP アドレスを自動的に割り当てるかどうかを選択します。

      AWS Fargate タスクをパブリックサブネットで実行するときに、そのタスクにパブリック IP アドレスを割り当てて、インターネットへのルートを持つようにすることができます。このフィールドを使用して EC2 タスクにパブリック IP を割り当てることはできません。詳細については、「[Fargate の Amazon ECS タスクのネットワーキングオプション](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-task-networking.html)」および「[Amazon ECS タスクにネットワークインターフェイスを割り当てる](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking-awsvpc.html)」を参照してください。

1. (オプション) Service Connect を使用してサービスを相互接続するには、**[Service Connect]** を展開して以下を指定します。

   1.  **[Service Connect をオンにする]** を選択します。

   1. **[Service Connect configuration]** (Service Connect 設定) で、クライアントモードを指定します。
      + サービスが名前空間内の他のサービスへの接続のみを必要とするネットワーククライアントアプリケーションを実行している場合は、**[クライアント側のみ]** を選択します。
      + サービスがネットワークまたは Web サービスアプリケーションを実行していて、このサービスにエンドポイントを提供し、名前空間内の他のサービスに接続する必要がある場合は、**[Client and server]** (クライアントとサーバー) を選択します。

   1. デフォルトのクラスター名前空間ではない名前空間を使用するには、**[Namespace]** (名前空間) でサービス名前空間を選択します。この場合、AWS アカウントの同じ AWS リージョンで個別に作成された名前空間、またはAWS Resource Access Manager (AWS RAM) を使用してアカウントと共有されている同じリージョンの名前空間のいずれかを選択できます。共有 AWS Cloud Map 名前空間の詳細については、「*AWS Cloud Map デベロッパーガイド*」の「[クロスアカウント AWS Cloud Map 名前空間の共有](https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html)」を参照してください。

   1. （オプション) ログ設定を指定します。**[ログコレクションを使用]** を選択します。デフォルトのオプションでは、コンテナログを CloudWatch Logs に送信します。その他のログドライバオプションは、AWS FireLens を使用して構成されます。詳細については、「[Amazon ECS ログを AWS サービスまたは AWS Partner に送信する](using_firelens.md)」を参照してください。

      以下では、各コンテナログの送信先について詳しく説明します。
      + **Amazon CloudWatch** — コンテナログを CloudWatch Logs に送信するようにタスクを設定します。デフォルトのログドライバーオプションが提供され、ユーザーに代わり CloudWatch ロググループを作成します。別のロググループ名を指定するには、ドライバーオプションの値を変更します。
      + **[Amazon Data Firehose]** — Firehose にコンテナログを送信するようタスクを設定します。Firehose 配信ストリームにログを送信するデフォルトのログドライバーオプションが提供されています。別の配信ストリーム名を指定するには、ドライバーオプションの値を変更します。
      + **Amazon Kinesis Data Streams** — Kinesis Data Streams にコンテナログを送信するようタスクを設定します。Kinesis Data Streams のストリームにログを送信するデフォルトのログドライバーオプションが提供されています。別のストリーム名を指定するには、ドライバーオプションの値を変更します。
      + **Amazon OpenSearch Service** — コンテナログを OpenSearch Service ドメインに送信するようタスクを設定します。ログドライバーオプションを提供する必要があります。
      + **Amazon S3** — Amazon S3 バケットにコンテナログを送信するようタスクを設定します。デフォルトのログドライバーオプションが提供されていますが、有効な Amazon S3 バケット名を指定する必要があります。

   1. (オプション) アクセスログを有効にするには、次の手順に従います。

      1. **[アクセスログ設定]** を展開します。**[形式]** で、**[JSON]** または [`TEXT`] を選択します。

      1. アクセスログにクエリパラメータが含まれるようにするには、**[クエリパラメータを含める]** を選択します。

1. (オプション) サービス検出を使用してサービスを相互接続するには、**[サービス検出]** を展開して次の操作を行います。

   1. **[サービス検出を使用]** を選択します。

   1. 新しい名前空間を使用するには、**[名前空間の設定]** で **[新しい名前空間の作成]** を選択し、名前空間の名前と説明を入力します。既存の名前空間を使用するには、**[既存の名前空間を選択]** を選択し、使用する名前空間を選択します。

   1. サービスの名前や説明などのサービス検出サービス情報を入力します。

   1. Amazon ECS にコンテナレベルのヘルスチェックを定期的に実行させるには、**[Amazon ECS タスク状態の伝達の有効化]** を選択します。

   1. [**DNS record type (DNS レコード型)**] で、サービスに作成する DNS レコード型を選択します。Amazon ECS サービス検出は、タスク定義で指定されたネットワークモードに応じて、**[A]** レコードおよび **[SRV]** レコードのみをサポートします。これらのレコードタイプの詳細については、*Amazon Route 53 デベロッパーガイド*の[サポートされているDNSレコードタイプ](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html)を参照してください。
      + サービスタスクで指定されたタスク定義が `bridge` または `host` ネットワークモードを使用する場合、**SRV** タイプのレコードのみがサポートされます。レコードに関連付けるコンテナ名とポートの組み合わせを選択します。
      + サービスタスクで指定されたタスク定義が `awsvpc` ネットワークモードを使用する場合、**A** または **SRV** レコードタイプのいずれかを選択します。**[A]** を選択した場合は、次の手順をスキップします。[**SRV**] を選択する場合は、サービスを検出できるポートまたはレコードに関連付けるコンテナ名とポートの組み合わせを指定します。

      **TTL** には、レコードセットが DNS リゾルバーおよびウェブブラウザによってキャッシュされる時間を秒単位で入力します。

1. (オプション) VPC Lattice を使用してサービスを相互接続するには、**[VPC Lattice]** を展開して次の操作を行います。

   1. **[VPC Lattice をオンにする]** を選択します。

   1. **インフラストラクチャロール** については、インフラストラクチャロールを選択します。

      ロールを作成していない場合は、**[インフラストラクチャロールの作成]** を選択します。

   1. **[ターゲットグループ]** で、1 つまたは複数のターゲットグループを選択します。少なくとも 1 つのターゲットグループを選択する必要があります。最大 5 つのターゲットグループを選択できます。追加のターゲットグループを追加するには、**[ターゲットグループの追加]** を選択します。選択した各ターゲットグループの **[ポート名]**、**[プロトコル]**、および **[ポート]** を選択します。

      ターゲットグループを削除するには、**[削除]** を選択します。
**注記**  
既存のターゲットグループを追加する場合は、AWS CLI を使用する必要があります。AWS CLI を使用してターゲットグループを追加する方法については、「*AWS Command Line Interface リファレンス*」の「[register-targets](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/register-targets.html)」を参照してください。
VPC Lattice サービスは複数のターゲットグループを持つことができますが、各ターゲットグループは 1 つのサービスにのみ追加できます。

   1. VPC Lattice 設定を完了するには、リスナーのデフォルトアクションに新しいターゲットグループを含めるか、VPC Lattice コンソール内の既存の VPC Lattice サービスのルールに新しいターゲットグループを含めます。詳細については、「[Listener rules for your VPC Lattice service](https://docs.aws.amazon.com/vpc-lattice/latest/ug/listener-rules.html)」を参照してください。

1. (オプション) サービスのロードバランサーを設定するには、**[Load Balancing]** (負荷分散) セクションを展開します。

   ロードバランサーを選択します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/create-service-console-v2.html)

1. (オプション) サービスの自動スケーリングを設定するには、**[サービスの自動スケーリング]** を展開し、次のパラメータを指定します。トラフィックフローからの過去のロードデータを調べる予測自動スケーリングを使用するには、サービスを作成した後にそれを設定します。詳細については、「[履歴パターンを使用して予測スケーリングで Amazon ECS サービスをスケールする](predictive-auto-scaling.md)」を参照してください。

   1. サービスの自動スケーリングを使用するには、**[Service auto scaling]** (サービスの自動スケーリング) を選択します。

   1. **[タスクの最小数]** に、サービスの自動スケーリングで使用するタスクの下限数を入力します。必要な数がこの数を下回ることはありません。

   1. **[タスクの最大数]** に、サービスの自動スケーリングで使用するタスクの上限数を入力します。必要な数がこの数を超えることはありません。

   1. ポリシータイプを選択します。**[スケーリングポリシータイプ]** で、次のいずれかのオプションを選択します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/create-service-console-v2.html)

1. (オプション) デフォルト以外のタスク配置戦略を使用するには、**[Task Placement]** (タスクの配置) を展開し、以下のオプションから選択します。

    詳細については、「[Amazon ECS がタスクをコンテナインスタンスに配置する方法](task-placement.md)」を参照してください。
   + **[AZ バランススプレッド]** - アベイラビリティーゾーン間およびアベイラビリティーゾーン内のコンテナインスタンス間でタスクを分散します。
   + **[AZ Balanced BinPack]** - 利用可能な最小メモリでアベイラビリティーゾーン間およびコンテナインスタンス間でタスクを分散します。
   + **[ビンパック]** - CPU またはメモリの最小利用可能量に基づいてタスクを配置します。
   + **[ホストごとに 1 つのタスク]** - 各コンテナインスタンスのサービスから最大 1 タスクを配置します。
   + **[カスタム]** - 独自のタスク配置戦略を定義します。

   **[Custom]** (カスタム) を選択した場合、タスクを配置するアルゴリズムと、タスク配置時に考慮されるルールを定義します。
   + **[Strategy]** (方針) にとって **[Type]** (タイプ) そして **[Field]** (フィールド) で、アルゴリズムとアルゴリズムに使用するエンティティを選択します。

     最大 5 個の戦略を入力できます。
   + **[制約]** の **[タイプ]** および **[式]** で、制約のルールと属性を選択します。

     例えば、T2 インスタンスにタスクを配置する制約を設定するには、**[Expression]** (表現) で、**[attribute:ecs.instance-type =\$1 t2.\$1]** と入力します。

     最大 10 個の制約を入力できます。

1. デプロイ時の設定と互換性のあるデータボリュームをタスクで使用する場合は、**[ボリューム]** を拡張してボリュームを設定できます。

   ボリューム名とボリュームタイプはタスク定義リビジョンを作成するときに設定され、サービスの作成時には変更できません。ボリューム名とタイプを更新するには、新しいタスク定義リビジョンを作成し、その新しいリビジョンを使用してサービスを作成する必要があります。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/create-service-console-v2.html)

1. ECS Exec を使用してサービスをデバッグするには、**[設定のトラブルシューティング]** で **[ECS Exec をオンにする]** を選択します。

1. （オプション）サービスとタスクを識別しやすくするには、**[Tags]** (タグ) セクションを展開し、タグを設定します。

   新しく起動したすべてのタスクに対して、Amazon ECS がクラスター名とタスク定義タグで自動的にタグ付けするようにするには、**[Amazon ECS マネージドタグを有効にする]** を選択し、**[タグの伝播元]** で **[タスク定義]** を選択します。

   新しく起動したすべてのタスクに対して、Amazon ECS がクラスター名とサービスタグで自動的にタグ付けするようにするには、**[Amazon ECS マネージドタグを有効にする]** を選択し、**[タグの伝播元]** で **[サービス]** を選択します。

   タグを追加または削除します。
   + [タグを追加] **[Add tag]** (タグを追加) を選択し、以下を実行します。
     + [**キー**] にはキー名を入力します。
     + [**値**] にキー値を入力します。
   + [タグの削除] タグの横にある [**タグの削除**] を選択します。

1. **[作成]** を選択します。

## 次のステップ
<a name="create-service-next-steps"></a>

以下は、サービスを作成した後の追加アクションです。
+ トラフィックフローからの過去のロードデータを調べる予測自動スケーリングを設定します。詳細については、「[履歴パターンを使用して予測スケーリングで Amazon ECS サービスをスケールする](predictive-auto-scaling.md)」を参照してください。
+ Amazon ECS サーキットブレーカーのサービスのデプロイを追跡し、サービス履歴を表示します。詳細については、「[Amazon ECS サービスデプロイを使用してサービス履歴を表示する](service-deployment.md)」を参照してください。