Previously I’ve explained How to SSH into an AWS ECS Fargate-managed container. In this tutorial, I will cover some steps on how can you get the private IP address of a Fargate ECS container, so that way you can check your service availability, access it through the private network directly, and see if the service operates as expected.
Prerequisites
- AWS account
- ECS cluster
- Fargate containers
Solution
Step 1. To get the private IP address of your Fargate container, firstly you will have to connect to the fargate container.
aws ecs execute-command --region {name-of-the-region} --cluster {name-of-the-cluster} --task {task number} --container {container-name} --command "/bin/bash" --interactive
Step 2. Once you are connected, get the private IP address of your Fargate contaner.
wget -qO- http://169.254.170.2/v2/metadata | jq -r .Containers[0].Networks[0].IPv4Addresses[0]
It will retrieve only the private IP address that you are looking for.
Output:
10.0.203.295
- Maybe you will wonder how come on earth to appear the above
169.254.170.2
IP address? - The first part from the command
http://169.254.170.2/v2/metadata
is an AWS API endpoint and returns metadata in JSON for the task that you are going to specify.
Step 2. If you want to get all the information about the Fargate task, run:
wget -qO- http://169.254.170.2/v2/metadata
Output:
{"Cluster":"arn:aws:ecs:eu-east-1:865649038563:cluster/ecs-dev-eu-east-1","TaskARN":"arn:aws:ecs:eu-east-1:885849018523:task/ecs-dev-eu-east-1/7016278a8d3813eb3185651","Family":"devcoops-dev-task-fargate","Revision":"5","DesiredStatus":"RUNNING","KnownStatus":"RUNNING","Containers":[
{"DockerId":"7016d3813eb3185651-10273856","Name":"devcoops-dev-task-fargate-route53-update","DockerName":"devcoops-dev-task-fargate-route53-update","Image":"devcoops/node:latest","ImageID":"sha256:a00c58b46d0bbe2cc7b437ebcbeac3451c668aa929d8b","Labels":{"com.amazonaws.ecs.cluster":"arn:aws:ecs:eu-east-1:8858490:cluster/ecs-dev-eu-east-1","com.amazonaws.ecs.container-name":"devcoops-dev-task-fargate-route53-update","com.amazonaws.ecs.task-arn":"arn:aws:ecs:eu-east-1:885849018523:task/ecs-dev-eu-east-1/7016278766c94340a8d3813eb3185651","com.amazonaws.ecs.task-definition-family":"devcoops-dev-task-fargate","com.amazonaws.ecs.task-definition-version":"5"},"DesiredStatus":"RUNNING","KnownStatus":"STOPPED","ExitCode":0,"Limits":
{"CPU":2},"CreatedAt":"2021-09-10T15:17:50.837396367Z","StartedAt":"2021-09-10T15:17:50.837396367Z","FinishedAt":"2021-09-10T15:17:52.260548713Z","Type":"NORMAL","Networks":[{"NetworkMode":"awsvpc","IPv4Addresses":["10.0.203.295"]}]},
{"DockerId":"7016278766c94340a8d3813eb3185651-877586198","Name":"devcoops-dev-task-fargate-cont","DockerName":"devcoops-dev-task-fargate-cont","Image":"node-alpine","ImageID":"sha256:5cd381c85eb0b7e13ec3df62b46a5ee442f0b66c8c0910e3","Labels":{"com.amazonaws.ecs.cluster":"arn:aws:ecs:eu-east-1:885849018:cluster/ecs-dev-eu-east-1","com.amazonaws.ecs.container-name":"devcoops-dev-task-fargate-cont","com.amazonaws.ecs.task-arn":"arn:aws:ecs:eu-east-1:88518523:task/ecs-dev-eu-east-1/7016278766c94340a8d3813eb3185651","com.amazonaws.ecs.task-definition-family":"devcoops-dev-task-fargate","com.amazonaws.ecs.task-definition-version":"5"},"DesiredStatus":"RUNNING","KnownStatus":"RUNNING","Limits":{"CPU":2},"CreatedAt":"2021-09-10T15:17:53.519853278Z","StartedAt":"2021-09-10T15:17:53.519853278Z","Type":"NORMAL","Networks":[
{"NetworkMode":"awsvpc","IPv4Addresses":["10.0.203.295"]}],"Volumes":[{"DockerName":"devcoops-dev-task-fargate-5-efs","Destination":"/usr/bin/console"}]}],"Limits":{"CPU":4,"Memory":8192},"PullStartedAt":"2021-09-10T15:17:39.706061369Z","PullStoppedAt":"2021-09-10T15:17:46.654785077Z","AvailabilityZone":"eu-east-1c"}
You should get output similar to the above one.
Conclusion
To wrap up the things, getting the private IP address of a Fargate container has a lot of advantages. As I mentioned previously checking the service state can be done directly, implementing some kind of healthchecks and many others things.
Feel free to leave a comment below and if you find this tutorial useful, follow our official channel on Telegram.