Amazon ECS サービスを相互接続する
Amazon ECS タスク内で実行されるアプリケーションは、多くの場合はインターネットからの接続を受信するか、Amazon ECS サービス内で実行される他のアプリケーションに接続する必要があります。インターネットからの外部接続が必要な場合は、Elastic Load Balancing の使用をお勧めします。統合負荷分散の詳細については、「ロードバランサーを使用して Amazon ECS サービストラフィックを分散する」を参照してください。
Amazon ECS サービス内で実行される他のアプリケーションにアプリケーションを接続する必要がある場合、Amazon ECS にはロードバランサーを使用せずに、次の方法で行うことができます。
-
Amazon ECS Service Connect
サービス検出、接続、トラフィックモニタリング用の Amazon ECS 設定を提供する Service Connect をお勧めします。Service Connect を使用すると、アプリケーションは短縮名と標準ポートを使用して、同じクラスターや他のクラスター (同じ AWS リージョン の VPC を含む) 内の Amazon ECS サービスに接続できます。
Service Connect を使用すると、Amazon ECS がサービス検出のすべての部分を管理します。つまり、検出可能な名前の作成、タスクの開始と終了時に各タスクのエントリを動的に管理すること、名前を検出するように設定された各タスクでのエージェントの実行などです。アプリケーションは DNS 名の標準機能を使用して接続することで名前を検索できます。アプリケーションがすでにこれを実行している場合、Service Connect を使用する際に、アプリケーションを変更する必要はありません。
各サービスとタスク定義内で完全な設定を行います。Amazon ECS は、デプロイ内のすべてのタスクが同じように動作するように、サービスデプロイごとにこの設定の変更を管理します。たとえば、サービス検出の DNS でよくある問題は、移行の制御です。新しい IP アドレスを指すように DNS 名を変更すると、すべてのクライアントが新しいサービスの使用を開始するまでに最大 TTL 時間がかかることがあります。Service Connect では、クライアントデプロイメントがクライアントタスクを置き換えて設定を更新します。他のデプロイと同様に、Service Connect の変更に影響するように、デプロイサーキットブレーカーやその他のデプロイ設定を設定できます。
詳細については、「Service Connect を使用して Amazon ECS サービスを短縮名で接続する」を参照してください。
-
Amazon ECS サービス検出
サービス間の通信のもう 1 つのアプローチは、サービス検出を使用する直接的な通信です。このアプローチでは、Amazon ECS との AWS Cloud Map サービス検出の統合を使用できます。Amazon ECS はサービス検出を使用して、起動されたタスクのリストを AWS Cloud Map に同期します。このホスト名は特定のサービスの 1 つ以上のタスクの内部 IP アドレスに解決される DNS ホスト名を保持します。Amazon VPC の他のサービスは、この DNS ホスト名を使用して、内部 IP アドレスを使用してトラフィックを別のコンテナに直接送信できます。
このサービス間通信のアプローチでは、レイテンシが低くなります。コンテナ間には余分なコンポーネントはありません。トラフィックは 1 つのコンテナから別のコンテナに直接移動します。
この方法は、各タスクに固有の IP アドレスが割り当てられる
awsvpc
ネットワークモードを使用する場合に適しています。ほとんどのソフトウェアは、IP アドレスに直接変換される DNSA
レコードの使用のみをサポートしています。awsvpc
ネットワークモードを使用する場合、各タスクの IP アドレスはA
レコードになります。ただし、bridge
ネットワークモードを使用している場合は、複数のコンテナが同じ IP アドレスを共有している可能性があります。さらに、動的ポートマッピングでは、その 1 つの IP アドレスのポート番号がコンテナにランダムに割り当てられます。この時点では、A
レコードだけではサービス検出には不十分です。SRV
レコードも使用する必要があります。このタイプのレコードは IP アドレスとポート番号の両方を記録できますが、アプリケーションを適切に設定する必要があります。使用するビルド済みアプリケーションの中には、SRV
レコードをサポートしていないものもあります。awsvpc
ネットワークモードのもう 1 つの利点は、サービスごとに固有のセキュリティグループがあることです。このセキュリティ グループを設定して、そのサービスと通信する必要がある特定のアップストリームサービスからの受信接続のみを許可することができます。サービス検出を使用するサービス間直接的な通信の主な欠点は、再試行や接続障害に対処するためのロジックを追加する必要があることです。DNS レコードには、キャッシュされる時間を制御する有効期限 (TTL) があります。DNS レコードが更新されてキャッシュが期限切れになり、アプリケーションが最新バージョンの DNS レコードを取得できるようになるまでには、ある程度の時間がかかります。そのため、アプリケーションが DNS レコードを解決して、もう存在しない別のコンテナを指すようになってしまう可能性があります。アプリケーションには再試行を処理し、不正なバックエンドを無視するロジックが必要です。
詳細については、「サービス検出を使用して Amazon ECS サービスを DNS 名で接続する」を参照してください。
ネットワークモード互換表
次の表は、これらのオプションとタスクネットワークモードの互換性を示すものです。この表の「クライアント」とは、Amazon ECS タスク内から接続を行うアプリケーションを指します。
相互接続オプション | ブリッジ | awsvpc |
ホスト |
---|---|---|---|
サービス検出 | はい。ただし、クライアントは hostPort を使用せず DNS の SRV レコードを認識する必要があります。 |
はい | はい。ただし、クライアントは hostPort を使用せず DNS の SRV レコードを認識する必要があります。 |
Service Connect | はい | はい | なし |