Amazon ECS Service Connect 設定の概要 - Amazon Elastic Container Service

Amazon ECS Service Connect 設定の概要

Service Connect を使用する場合、リソースで設定する必要があるパラメータがあります。

Service Connect 用に設定する必要がある Amazon ECS リソース
パラメータの場所 アプリケーションタイプ 説明 必須
タスク定義 クライアント クライアントタスク定義には、Service Connect が利用できる変更はありません。 該当なし
タスク定義 クライアント/サーバー サーバーは、コンテナの portMappings のポートに name フィールドを追加する必要があります。詳細については、「portMappings」を参照してください。 はい
タスク定義 クライアント/サーバー サーバーは、オプションでアプリケーションプロトコル (HTTP など) を提供して、サーバーアプリケーションのプロトコル固有のメトリクス (HTTP 5xx など) を受け取ることができます。 いいえ
サービスの定義 クライアント クライアントサービスは、名前空間の結合を設定するには serviceConnectConfiguration を追加する必要があります。この名前空間には、このサービスが検出する必要のあるすべてのサーバーサービスが含まれていなければなりません。詳細については、「serviceConnectConfiguration」を参照してください。 はい
サービスの定義 クライアント/サーバー サーバーサービスは、サービスが利用できる DNS 名、ポート番号、名前空間を設定するために serviceConnectConfiguration を追加する必要があります。詳細については、「serviceConnectConfiguration」を参照してください。 はい
クラスター クライアント クラスターはデフォルトの Service Connect 名前空間を追加できます。クラスター内の新しいサービスは、サービスで Service Connect が設定されている場合は名前空間を継承します。 いいえ
クラスター クライアント/サーバー サーバーサービスに適用されるクラスターには、Service Connect が利用できる変更はありません。サーバーのタスク定義とサービスは、それぞれの設定を行う必要があります。 該当なし
Service Connect の設定手順の概要

次の手順では、Service Connect の設定方法の概要を示します。

重要
  • Service Connect がお客様のアカウントに AWS Cloud Map サービスを作成します。手動でのインスタンスの登録/登録解除、インスタンス属性の変更、サービスの削除を行ってこれらの AWS Cloud Map リソースを変更すると、アプリケーショントラフィックまたは以降のデプロイで予期しない動作が発生することがあります。

  • Service Connect は、タスク定義内のリンクをサポートしていません。

  1. タスク定義のポートマッピングにポート名を追加します。さらに、アプリケーションのレイヤー 7 プロトコルを識別して、追加のメトリクスを取得できます。

  2. AWS Cloud Map 名前空間を使用してクラスターを作成するか、名前空間を個別に作成します。単純に構成できるように、名前空間に必要な名前でクラスターを作成し、名前空間に同名を指定します。この場合、Amazon ECS は必要な設定で新しい HTTP 名前空間を作成します。Service Connect は Amazon Route 53 では DNS ホストゾーンを使用または作成しません。

  3. サービスを設定して、名前空間内に Service Connect エンドポイントを作成します。

  4. サービスをデプロイしてエンドポイントを作成します。Amazon ECS は各タスクに Service Connect プロキシコンテナを追加し、AWS Cloud Map に Service Connect エンドポイントを作成します。このコンテナはタスク定義では設定されていないため、タスク定義を変更せずに再利用して、同じ名前空間または複数の名前空間に複数のサービスを作成できます。

  5. クライアントアプリをサービスとしてデプロイしてエンドポイントに接続します。Amazon ECS は Service Connect エンドポイントへの接続を各タスクの Service Connect プロキシ経由で行います。

    アプリケーションは Service Connect エンドポイントへの接続にのみプロキシを使用します。プロキシを使用するための追加の構成はありません。プロキシは、ラウンドロビン負荷分散、外れ値検出、再試行を実行します。プロキシの詳細については、「Service Connect プロキシ」を参照してください。

  6. Amazon CloudWatch の Service Connect プロキシ経由のトラフィックを監視します。

クラスターの設定

クラスターの作成時または更新時に、Service Connect のデフォルトの名前空間を設定できます。同じアカウントの同じ AWS リージョンには存在しない名前空間名を指定すると、新しい HTTP 名前空間が作成されます。

クラスターを作成してデフォルトの Service Connect 名前空間を指定した場合、Amazon ECS が名前空間を作成する間、そのクラスターは PROVISIONING ステータスで待機します。クラスターのステータスには、名前空間のステータスを示す attachment が表示されます。アタッチメントは、デフォルトでは AWS CLI に表示されません。表示するには、--include ATTACHMENTS を追加する必要があります。

サービス設定

Service Connect は、必要最小限の設定で済むように設計されています。タスク定義で、Service Connect で使用する各ポートマッピングの名前を設定する必要があります。サービスでクライアントサービスを作成するには、Service Connect をオンにして名前空間を選択する必要があります。クライアント/サーバーサービスを作成するには、いずれかのポートマッピングの名前と一致する単一の Service Connect サービス設定を追加する必要があります。Amazon ECS はタスク定義からポート番号とポート名を再利用して、Service Connect サービスとエンドポイントを定義します。これらの値を上書きするには、コンソールで [Discovery] (検出)、[DNS][Port] (ポート) など他のパラメータを使用するか、discoveryNameclientAliases それぞれを Amazon ECS API で使用します。

次の例は、それぞれの種類のService Connect 設定が同じ Amazon ECS サービスで一緒に使用されていることを示しています。シェルコメントが提供されますが、Amazon ECS サービスに使用される JSON 設定はコメントをサポートしていないことに注意してください。

{ ... serviceConnectConfiguration: { enabled: true, namespace: "internal", #config for client services can end here, only these two parameters are required. services: [{ portName: "http" }, #minimal client - server service config can end here.portName must match the "name" parameter of a port mapping in the task definition. { discoveryName: "http-second" #name the discoveryName to avoid a Task def port name collision with the minimal config in the same Cloud Map namespace portName: "http" }, { clientAliases: [{ dnsName: "db", port: 81 }] #use when the port in Task def is not the port that client apps use.Client apps can use http: //db:81 to connect discoveryName: "http-three" portName: "http" }, { clientAliases: [{ dnsName: "db.app", port: 81 }] #use when the port in Task def is not the port that client apps use.duplicates are fine as long as the discoveryName is different. discoveryName: "http-four" portName: "http", ingressPortOverride: 99 #If App should also accept traffic directly on Task def port. } ] } }