4

I setup a Fargate cluster on AWS. My cluster has the following services:

  • server-A (port 3000)
  • server-B (port 4000)

Each service is in the same VPC and have the same security group (any ports, any source, any destination). The VPC is isolated from internet.

Now, I want server-A to send a http query to server-B. I would assume that, as in Docker swarm, there is a private DNS that maps the service name to its private IP, and it would be as simple as sending the query to: http://server-B:4000. However, server-A gets a timeout, which means it can't reach server-B.

I've read in the documentation that I can put the 2 containers in the same service, each container listening on a different port, so that, thanks to the loopback interface, from server-A, I could query http://127.0.0.1:4000 and server-B will respond, and vice-versa.

However, I want to be able to scale server-A and server-B independently, so I think it makes sense to keep each server independant from each other by having 2 services.

I've read that, for 2 tasks to talk to each other, I need to setup a load balancer. Coming from the world of Docker Swarm, it was so easy to query the services by their service name, and behind the scene, the request was forwarded to one of the containers in that service. But it doesn't seem to work like that on AWS Fargate.

Questions:

  • how can server-A talk to server-B?
  • As service sometimes redeploy, their private IP changes, so it makes no sense to query by IP, querying by hostname seems the most natural way
  • Do I need to setup any kind of internal DNS?

Thanks for your help, I am really lost on doing this simple setup.

JLavoie
  • 189
  • 6

1 Answers1

5

After searching, I found out it was due to the fact that I was not enabling "Service Discovery" during the service creation, so no private DNS was created. Here is some additional documentation which explains exactly the steps:

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

JLavoie
  • 189
  • 6