Service Connect の概念 - Amazon Elastic Container Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Service Connect の概念

Service Connect 機能は関連サービスの仮想ネットワークを作成します。同じサービス設定を複数の異なる名前空間で使用することで、独立していても同一のアプリケーションセットを実行できます。Service Connect は Amazon ECS サービスのプロキシコンテナを定義します。これにより、同じタスク定義を使用して、Service Connect 設定が異なるさまざまな名前空間で同一のアプリケーションを実行できます。Amazon ECS サービスが作成する各タスクは、タスク内のプロキシコンテナを実行します。

Service Connect は同じ名前空間内の Amazon ECS サービス間の接続に適しています。次のアプリケーションで Service Connect で設定された Amazon ECS サービスに接続するためには、追加の相互接続方法を使用する必要があります。

  • 他の名前空間で設定されている Amazon ECS タスク

  • Service Connect 用に設定されていない Amazon ECS タスク

  • Amazon ECS 外の他のアプリケーション

これらのアプリケーションは Service Connect プロキシ経由で接続できますが、Service Connect エンドポイント名を解決することはできません。

これらのアプリケーションが Amazon ECS タスクの IP アドレスを解決するには、別の相互接続方法を使用する必要があります。相互接続方法のリストについては、「相互接続方法の選択」を参照してください。

Service Connect の用語

Service Connect では次の用語が使用されます。

ポート名

特定のポートマッピングに名前を割り当てる Amazon ECS タスク定義設定です。この設定は Amazon ECS Service Connect でのみ使用されます。

クライアントエイリアス

エンドポイントで使用されるポート番号を割り当てる Amazon ECS サービス設定です。さらに、クライアントエイリアスはエンドポイントの DNS 名を割り当て、検出名を上書きすることができます。Amazon ECS サービスで検出名が提供されていない場合、クライアントエイリアス名がエンドポイント名としてポート名に上書きされます。エンドポイントの例については、エンドポイントの定義を参照してください。1 つの Amazon ECS サービスに複数のクライアントエイリアスを割り当てることができます。この設定は Amazon ECS Service Connect でのみ使用されます。

検出名

タスク定義から指定されたポートにオプションとして作成できる中間名。この名前は AWS Cloud Map サービスの作成に使用されます。この名前が指定されていない場合は、タスク定義からのポート名が使用されます。特定のポートおよび Amazon ECS サービスに複数の検出名を割り当てることができます。この設定は Amazon ECS Service Connect でのみ使用されます。

AWS Cloud Map サービス名は、名前空間内で一意である必要があります。この制限により、各名前空間の特定のタスク定義に対し、検出名のない Service Connect 設定は 1 つしか使用できません。

エンドポイント

API またはウェブサイトに接続するための URL です。URL には、プロトコル、DNS 名、ポートが含まれます。エンドポイント全般の詳細については、「 Amazon Web Services 全般のリファレンス」の「AWS 用語集」の「エンドポイント」を参照してください。

Service Connect は、Amazon ECS サービスに接続するエンドポイントを作成すると共に、Amazon ECS サービスのタスクがエンドポイントに接続するための設定を行います。URL にはプロトコル、DNS 名、ポートが含まれます。ポートはコンテナイメージ内のアプリケーションと一致する必要があるため、プロトコルとポート名はタスク定義で選択します。サービス内では、各ポートを名前で選択し、DNS 名を割り当てることができます。Amazon ECS サービス設定で DNS 名を指定しない場合、デフォルトではタスク定義からのポート名が使用されます。例えば、Service Connect エンドポイントは http://blog:80grpc://checkout:8080http://_db.production.internal:99 のいずれかになります。

Service Connect サービス

Amazon ECS サービス内の 1 つのエンドポイントの設定です。これは Service Connect 設定の一部で、コンソールの [Service Connect and discovery name configuration] (Service Connect および検出名の設定) の中の 1 行、または Amazon ECS サービスにおける JSON 設定の services リストの中の 1 つのオブジェクトで構成されます。この設定は Amazon ECS Service Connect でのみ使用されます。

詳細については、「Amazon Elastic Container Service API リファレンスServiceConnectService」の「」を参照してください。

名前空間

Service Connect で使用する AWS Cloud Map 名前空間の短縮名または完全な Amazon リソースネーム (ARN)。名前空間は、Amazon ECS サービスおよびクラスター AWS リージョン と同じ に存在する必要があります。の名前空間のタイプは Service Connect には影響 AWS Cloud Map しません。

Service Connect は、相互に通信する Amazon ECS タスクの論理グループとして AWS Cloud Map 名前空間を使用します。各 Amazon ECS サービスは 1 つの名前空間のみに属することができます。名前空間内のサービスは、同じ AWS アカウントの同じ AWS リージョン 内の異なる Amazon ECS クラスターに分散できます。各クラスターは、あらゆるオペレーティングシステム、CPU アーキテクチャ、VPC、および EC2、Fargate、外部タイプのタスクを実行できるため、任意の基準でサービスを自由に整理できます。

クライアントサービス

ネットワーククライアントアプリケーションを実行する Amazon ECS サービスです。このサービスには名前空間が設定されている必要があります。サービス内の各タスクは、Service Connect プロキシコンテナを介して、名前空間のすべてのエンドポイントを検出して接続できます。

タスク内のいずれかのコンテナが名前空間内のサービスからエンドポイントに接続する必要がある場合は、クライアントサービスを選択します。フロントエンド、リバースプロキシ、またはロードバランサーアプリケーションが、例えば Elastic Load Balancing からなど、他の方法で外部トラフィックを受信する場合は、このタイプの Service Connect 設定を使用できます。

クライアント/サーバーサービス

ネットワークまたはウェブサービスアプリケーションを実行する Amazon ECS サービスです。このサービスには、名前空間と少なくとも 1 つのエンドポイントが設定されている必要があります。サービス内の各タスクには、エンドポイントを使用してアクセスできます。Service Connect プロキシコンテナは、エンドポイント名とポートをリッスンして、タスク内のアプリケーションコンテナにトラフィックを誘導します。

いずれかのコンテナが公開してポート上でネットワークトラフィックをリッスンする場合は、クライアント/サーバーサービスを選択してください。これらのアプリケーションは、同じ名前空間内の他のクライアント/サーバーサービスに接続する必要はありませんが、クライアント設定は設定されています。バックエンド、ミドルウェア、ビジネス層、またはほとんどのマイクロサービスはこのタイプの Service Connect 設定を使用します。フロントエンド、リバースプロキシ、またはロードバランサーアプリケーションに、同じ名前空間の Service Connect を使用して設定した他のサービスからのトラフィックを受信させる場合、これらのサービスはこのタイプの Service Connect 設定を使用する必要があります。

クラスターの設定

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

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

Service Connect サービス設定

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. } ] } }

デプロイの順序

Amazon ECS Service Connect を使用する場合、各 Amazon ECS サービスを、ネットワークリクエストを受け取るサーバーアプリケーション (クライアント/サーバーサービス) を実行するか、リクエストを行うクライアントアプリケーション (クライアントサービス) を実行するかのいずれかに設定します。

Service Connect の使用を開始する準備が整ったら、クライアント/サーバーサービスから始めます。新しいサービスまたは既存のサービスに Service Connect 設定を追加できます。Amazon ECS サービスを編集および更新して Service Connect 設定を追加した後、Amazon ECS は名前空間に Service Connect エンドポイントを作成します。さらに、Amazon ECS は現在実行中のタスクを置き換える新しいデプロイをサービス内に作成します。

既存のタスクやその他のアプリケーションは、既存のエンドポイントや外部アプリケーションに引き続き接続できます。クライアント/サーバーサービスがスケールアウトによってタスクを追加すると、クライアントからの新しい接続は即座にすべてのタスク間で分散されます。クライアント/サーバーサービスが更新されると、クライアントからの新しい接続は即座に新バージョンのタスク間で分散されます。

既存のタスクを解決して新しいエンドポイントに接続することはできません。このエンドポイントを解決して接続できるのは、同じ名前空間に Service Connect 設定があり、このデプロイ後に実行を開始した新しい Amazon ECS タスクだけです。例えば、クライアントアプリケーションを実行する Amazon ECS サービスは、新しいデータベースサーバーエンドポイントに接続するために再デプロイする必要があります。サーバーのデプロイが完了したら、クライアントのデプロイを開始します。

つまり、クライアントアプリケーションのオペレーターがアプリの設定が変更されるタイミングを決定しますが、サーバーアプリケーションのオペレーターはいつでも設定を変更できます。名前空間のエンドポイントのリストは、名前空間内の Amazon ECS サービスがデプロイされるたびに変更される可能性がありますが、既存のタスクと置換タスクは、最新のデプロイ後と同じように動作します。

次に挙げるサンプルを参考にしてください。

まず、1 つの AWS CloudFormation テンプレートと 1 つの AWS CloudFormation スタックでパブリックインターネットで使用できるアプリケーションを作成するとします。パブリック検出と到達可能性は、フロントエンドクライアントサービスを含め AWS CloudFormation、 が最後に作成する必要があります。フロントエンドクライアントサービスが実行されていて一般に公開されているのに、バックエンドは公開されていないという期間の発生を避けるために、サービスの作成はこの順序で行う必要があります。これにより、その期間中にエラーメッセージが一般に送信されるのを防ぐことができます。では AWS CloudFormation、 を使用してdependsOn、複数の Amazon ECS サービスを並列または同時に作成できない AWS CloudFormation ことを に示す必要があります。クライアントタスクが接続するバックエンドクライアント/サーバーサービスごとに、フロントエンドクライアントサービスに dependsOn を追加する必要があります。

次に、フロントエンドサービスが Service Connect 設定なしで存在すると仮定します。タスクは既存のバックエンドサービスに接続しています。まず、フロントエンドが使用する DNS または clientAlias と同じ名前を使用して、バックエンドサービスにクライアント/サーバー Service Connect 設定を追加します。これにより、新しいデプロイが作成されるため、すべてのデプロイロールバック検出または AWS Management Console AWS CLI、、 AWS SDKs、およびバックエンドサービスをロールバックして以前のデプロイと設定に戻すその他のメソッドが作成されます。バックエンドサービスのパフォーマンスと動作に問題がなければ、クライアントまたはクライアント/サーバー Service Connect 設定をフロントエンドサービスに追加します。それらの新しいタスクに追加された Service Connect プロキシを使用するのは、新しいデプロイのタスクのみです。この設定に問題がある場合は、デプロイのロールバック検出または AWS Management Console、、 AWS SDKs、およびバックエンドサービスをロールバックして以前のデプロイと設定に戻すその他の方法を使用して AWS CLI、ロールバックして以前の設定に戻すことができます。Service Connect ではなく DNS に基づく別のサービス検出システムを使用する場合、フロントエンドまたはクライアントアプリケーションは、ローカル DNS キャッシュの有効期限が切れてから新しいエンドポイントと変更されたエンドポイント設定の使用を開始しますが、これには通常数時間かかります。

ネットワーク

デフォルトの設定では、Service Connect プロキシは、タスク定義のポートマッピングから containerPort をリッスンします。VPC CIDRs、特にクライアントが実行されるサブネットからこのポートへの受信 (進入) トラフィックを許可するには、セキュリティグループのルールが必要です。

Service Connect サービス設定でポート番号を設定した場合であっても、Service Connect プロキシがリッスンするクライアント/サーバーサービスのポートは変更されません。このポート番号を設定すると、Amazon ECS はそれらのタスク内の Service Connect プロキシ上で、クライアントサービスが接続するエンドポイントのポートを変更します。クライアントサービスのプロキシは、containerPort を使用してクライアント/サーバーサービスのプロキシに接続します。

Service Connect プロキシがリッスンするポートを変更する場合は、クライアント/サーバーサービスの Service Connect 設定で ingressPortOverride を変更してください。このポート番号を変更する場合は、このサービスへのトラフィックが使用する Amazon VPC セキュリティグループで、このポートのインバウンドトラフィックを許可する必要があります。

Service Connect 用に設定された Amazon ECS サービスにアプリケーションが送信するトラフィックは、Amazon VPC およびサブネットにおいて、ルートテーブルルールおよびネットワーク ACL ルールにより、使用している containerPortingressPortOverride のポート番号が許可されている必要があります。

Service Connect を使用して VPC 間でトラフィックを送信できます。ルートテーブルルール、ネットワーク ACL、およびセキュリティグループについては、両方の VPC に適用されるため、同じ要件を考慮する必要があります。

例えば、2 つのクラスターは異なる VPC でタスクを作成します。各クラスターのサービスは、同じ名前空間を使用するように設定されています。これら 2 つのサービスのアプリケーションは、VPC DNS 設定なしで名前空間のすべてのエンドポイントを解決できます。ただし、VPC ピアリング、VPC またはサブネットのルートテーブル、VPC ネットワーク ACLs が使用している containerPortおよび ingressPortOverride ポート番号のトラフィックを許可しない限り、プロキシは接続できません。

bridge ネットワークモードを使用するタスクの場合、上位の動的ポート範囲のトラフィックを許可するインバウンドルールを使用してセキュリティグループを作成する必要があります。次に、Service Connect クラスター内のすべての EC2 インスタンスにセキュリティグループを割り当てます。

Service Connect プロキシ

Amazon ECS サービスが Service Connect 設定を使用して作成または更新された場合、新しいタスクが開始されるたびに、Amazon ECS はタスクに新しいコンテナを追加します。別のコンテナを使用するこのパターンは、sidecar と呼ばれます。このコンテナはタスク定義には存在せず、設定できません。Amazon ECS はこのコンテナの設定を Amazon ECS サービス内で管理します。そのため、同じタスク定義を複数の Amazon ECS サービスや名前空間で再利用でき、また Service Connect なしでタスクを実行できます。

プロキシリソース
  • タスク CPU とメモリの制限は、タスク定義でこのコンテナに設定する必要のある唯一のパラメータです。Amazon ECS サービスでこのコンテナに設定する必要があるパラメータは、Service Connect 設定にあるログ設定だけです。Service Connect の設定の詳細については、「Service Connect サービス設定」を参照してください。

  • Service Connect を使用するには、タスク定義でタスクのメモリ制限を設定する必要があります。他のコンテナのコンテナ制限に割り当てないタスク制限内の追加の CPU とメモリは、Service Connect プロキシコンテナや、コンテナ制限を設定していない他のコンテナによって使用されます。

  • Service Connect プロキシコンテナのタスクに対する CPU とメモリとして、256 CPU ユニットと少なくとも 64 MiB のメモリを追加することをお勧めします。 AWS Fargate では、設定できるメモリの最小容量は 512 MiB です。Amazon EC2 ではタスクメモリはオプションですが、Service Connect では必須です。

  • このサービスのタスクがピーク負荷時に 1 秒あたり 500 を超えるリクエストを受信すると予想される場合は、Service Connect プロキシコンテナのこのタスク定義で、タスク CPU に 512 CPU ユニットを追加することをお勧めします。

  • 名前空間内に 100 個以上の Service Connect サービス、または名前空間内のすべての Amazon ECS サービスに合計で 2000 個以上のタスクを作成する場合、Service Connect プロキシコンテナのタスクに対して 128 MiB のメモリを追加することをお勧めします。これは、名前空間内のすべての Amazon ECS サービスで使用されるすべてのタスク定義で行う必要があります。

プロキシ設定

アプリケーションは、アプリケーションと同じタスクでサイドカーコンテナ内のプロキシに接続します。Amazon ECS は、アプリケーションが同じ名前空間のエンドポイント名に接続する場合にのみアプリケーションがプロキシに接続するように、タスクとコンテナを設定します。その他のすべてのトラフィックはプロキシを使用しません。他のトラフィックには、同じ VPC 内の IP アドレス、 AWS  サービス エンドポイント、外部トラフィックが含まれます。

負荷分散

Service Connect は、Service Connect エンドポイントのタスク間の負荷分散にラウンドロビン方式を使用するようにプロキシを設定します。接続元のタスクにあるローカルプロキシは、エンドポイントを提供するクライアントサーバーサービス内のタスクの 1 つを選択します。

例えば、ローカル という名前空間 WordPress のクライアントサービスとして設定されている Amazon ECS サービスで実行されるタスクを考えてみます。MySQL データベースを実行する 2 つのタスクを持つ、他のサービスがあります。このサービスは、同じ名前空間内の Service Connect を通じて mysql と呼ばれるエンドポイントを提供するように構成されています。タスクでは WordPress、 WordPress アプリケーションはエンドポイント名を使用してデータベースに接続します。Service Connect の設定により、この名前への接続は、同じタスクのサイドカーコンテナで実行されるプロキシに送られます。その後、プロキシはラウンドロビン方式を使用してどちらの MySQL タスクにも接続できます。

負荷分散戦略: ラウンドロビン

外れ値の検知

この機能では、以前に失敗した接続についてプロキシが保持しているデータを使用して、失敗した接続があったホストに新しい接続を送信しないようにします。Service Connect は、プロキシの外れ値検出機能を設定して、パッシブなヘルスチェックを提供します。

例えば、 という名前空間 WordPress のクライアントサービスとして設定されている Amazon ECS サービスで実行されるタスクを考えてみますlocal。MySQL データベースを実行する 2 つのタスクを持つ、他のサービスがあります。このサービスは、同じ名前空間内の Service Connect を通じて mysql と呼ばれるエンドポイントを提供するように構成されています。 WordPress タスクでは、 WordPress アプリケーションは同じタスクのサイドカーコンテナで実行されるプロキシに接続します。プロキシはどちらの MySQL タスクにも接続できます。プロキシが特定の MySQL タスクに複数の接続を行い、直近 30 秒間以内に 5 つ以上の接続が失敗した場合、プロキシはその MySQL タスクを 30 ~ 300 秒間回避します。

再試行

Service Connect は、プロキシを通過して失敗した接続を再試行するようにプロキシを設定し、2 回目の試行では、前の接続のホストを使用しません。これにより、Service Connect を介した各接続が 1 回限りの理由で失敗することがなくなります。

再試行回数: 2

タイムアウト

Service Connect は、クライアント/サーバーアプリケーションが応答するまで最大時間待機するようにプロキシを構成します。デフォルトのタイムアウト値は 15 秒ですが、更新できます。

オプションパラメータ:

idleTimeout - アイドル中に接続がアクティブのままになる秒単位の時間。値が の場合、 は0無効になりますidleTimeout

HTTP/HTTP2/GRPCidleTimeoutデフォルトは 5 分です。

idleTimeoutデフォルトは 1 時間TCPです。

perRequestTimeout - アップストリームがリクエストごとに完全なレスポンスで応答するのを待機する時間。値が の場合、 は0無効になりますperRequestTimeout。アプリケーションコンテナappProtocolの が HTTP/HTTP2/ の場合にのみ設定できますGRPC。デフォルト値は 15 秒です。

注記

idleTimeout が より小さい時間に設定されている場合perRequestTimeout、 ではなく に達すると接続idleTimeoutは閉じますperRequestTimeout