AWS Fargate 上で 2 つのサービスが相互に通信するにはどうすればよいでしょうか?

AWS Fargate 上で 2 つのサービスが相互に通信するにはどうすればよいでしょうか?

AWSにFargateクラスターをセットアップしました。私のクラスターには次のものがありますサービス:

  • サーバーA (ポート3000)
  • サーバーB (ポート 4000)

各サービスは同じ VPC 内にあり、同じセキュリティ グループ (任意のポート、任意のソース、任意の宛先) を持ちます。VPC はインターネットから分離されています。

ここで、server-A が server-B に http クエリを送信するようにします。Docker swarm と同様に、サービス名をプライベート IP にマッピングするプライベート DNS があり、クエリを次の宛先に送信するだけで済むと想定します。http://サーバーB:4000ただし、サーバー A はタイムアウトになり、サーバー B に到達できなくなります。

ドキュメントには、2つのコンテナを同じサービスに配置し、各コンテナが異なるポートでリッスンするようにすると、ループバックインターフェースのおかげで、サーバーAからクエリを実行できると書いてありました。http://127.0.0.1:4000サーバー B が応答し、その逆も同様です。

しかし、サーバーAとサーバーBをスケールできるようにしたい独立してしたがって、2 つのサービスを用意して各サーバーを互いに独立させておくのが合理的だと思います。

2 つのタスクが相互に通信するには、ロードバランサーを設定する必要があると読みました。Docker Swarm の世界では、サービス名でサービスをクエリするのは非常に簡単で、バックグラウンドで、リクエストはそのサービス内のコンテナーの 1 つに転送されていました。しかし、AWS Fargate ではそのようには機能しないようです。

質問:

  • サーバー A はどのようにしてサーバー B と通信できるのでしょうか?
  • サービスは時々再デプロイされ、プライベートIPが変更されるため、IPでクエリするのは意味がなく、ホスト名でクエリするのが最も自然な方法のようです。
  • 何らかの内部 DNS を設定する必要がありますか?

ご協力ありがとうございます。この簡単な設定を行うのに本当に困っています。

答え1

調べたところ、サービス作成時に「サービス検出」を有効にしていなかったため、プライベート DNS が作成されなかったことが原因であることがわかりました。手順を正確に説明した追加のドキュメントを以下に示します。

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-discovery.html

関連情報