web-dev-qa-db-ja.com

AWS ECSのタスク定義間でコンテナーをリンクしますか?

AWS ECSで、データベースが関連付けられている基本的なウェブアプリケーションをセットアップしようとしています。ローカルでは、これらのセットアップを異なるコンテナーに入れており、ECSでは、2つを別々にスケーリングできるように、別々のタスク定義が必要です。

  1. ECSでdavid_mongodbとして最初のタスク定義を正常に登録しました。 david_mongodbという名前のコンテナが含まれています。
  2. 次に、2番目のタスク定義をdavid_webとして登録しようとしました。david_webという名前のコンテナーは、david_mongodb:dbを介してデータベースにリンクします。
  3. [作成]をクリックすると、エラーが返されます。

    Unable to create Task Definition
    Linked container 'david_mongodb:db' doesn't exist.
    

タスク定義は他のタスク定義のコンテナ名を見ることができないようです? david_webコンテナとdavid_mongodbコンテナの両方を同じタスク定義に入れることは考えていますが、それはしたくありません。Webアプリまたはデータベースのいずれかを個別にスケーリングできなくなります。 この概要 は、私のアーキテクチャが推奨されることを確認しているようです...

では、異なるタスク定義に存在するコンテナをリンクするにはどうすればよいですか?または、これを処理する別の賢明な方法がありますか?

48
David Elner

ECSタスク定義のリンクは Dockerリンク に類似しており、コンテナーが同じタスク定義の一部である場合にのみ機能します(単一のタスク定義の一部であるコンテナーは同じホストに一緒に配置されます)。異なるタスク定義のコンテナ間で通信するには、コンテナの場所(ホスト)と通信用のポートを検出するメカニズムが必要です。

ECSは、 service 機能を介してElastic Load Balancing(Application Load Balancer、Network Load Balancer、およびClassic Load Balancer)と統合されており、タスクはELBに自動的に登録され、ELBで適切に登録解除されます。

ECSは、AおよびSRVレコードを使用したDNSベースのサービス検出用に Route 53 Auto Naming と統合されています。サービスのタスクは、DNSレコードに自動的に入力および削除できます。

DNSを使用したAmazon ECSのサービス検出 は、Lambda関数がCloudWatchイベントを介してECSイベントストリームをリッスンし、Route 53 DNSレコードを更新する異なるアプローチを説明しています。 この方法は、上記のRoute 53の自動名前付け機能によって置き換えられました。

ロードバランサーとDNSを避けたい場合は、別のパターンとして ambassador container (ECS APIを使用する ecs-task-kite というサンプルがあります)またはオーバーレイネットワークに興味があるかもしれません(Weaveには、かなり詳細な 入門ガイド ソリューションがあります)。

Nathan Peck は、サービスの発見など、ECSに関連するさまざまなテーマを追跡しています here

68
Samuel Karp