J'ai l'obligation d'extraire l'IP privé de la tâche Fargate et je dois le transmettre dans le modèle de conteneur en tant que paramètre à la COMMANDE afin que l'application puisse être exécutée sur cette même adresse IP.
J'essaye la commande ci-dessous pour exécuter le consul mais il demande IP.
line 20, in data "template_file" "consul_app": 20: Interface_IP = data.aws_network_interfaces.consul_eni.ids A data resource "aws_network_interfaces" "consul_eni" has not been declared in the root module.
Au lieu de 0.0.0.0, il faut passer l'adresse IP privée et je n'ai pas encore trouvé de solution.
J'ai utilisé le script terraform ci-dessous mais ne fonctionne pas:
vars = { Interface_IP = data.aws_network_interfaces.consul_eni.private_ip }
Ensuite, dans la section variable, je passe la source de données comme:
data "aws_network_interfaces" "consul_eni" { filter{ values = [aws_subnet.private[0].id] } }
Obtention de l'erreur suivante:
"command": [ "consul agent -server -data-dir=/consul/data -bootstrap -ui -client=0.0.0.0 -bind=0.0.0.0" ],
3 Réponses :
Je ne suis pas sûr de bien comprendre votre cas d'utilisation. Je crois comprendre que vous exécutez une tâche dans Fargate et que vous souhaitez connaître l'adresse IPv4 de la tâche elle-même.
Pour ce faire, vous pouvez utiliser le service de métadonnées comme décrit dans AWS Docs .
Vous pouvez utiliser un outil comme curl
pour interroger l'URL qui est stockée dans la variable d'environnement ECS_CONTAINER_METADATA_URI_V4
, puis un autre outil comme jq
pour analyser la réponse JSON qui ressemble à ceci:
{ "DockerId": "cd189a933e5849daa93386466019ab50-2495160603", "Name": "curl", "DockerName": "curl", "Image": "111122223333.dkr.ecr.us-west-2.amazonaws.com/curltest:latest", "ImageID": "sha256:25f3695bedfb454a50f12d127839a68ad3caf91e451c1da073db34c542c4d2cb", "Labels": { "com.amazonaws.ecs.cluster": "arn:aws:ecs:us-west-2:111122223333:cluster/default", "com.amazonaws.ecs.container-name": "curl", "com.amazonaws.ecs.task-arn": "arn:aws:ecs:us-west-2:111122223333:task/default/cd189a933e5849daa93386466019ab50", "com.amazonaws.ecs.task-definition-family": "curltest", "com.amazonaws.ecs.task-definition-version": "2" }, "DesiredStatus": "RUNNING", "KnownStatus": "RUNNING", "Limits": { "CPU": 10, "Memory": 128 }, "CreatedAt": "2020-10-08T20:09:11.44527186Z", "StartedAt": "2020-10-08T20:09:11.44527186Z", "Type": "NORMAL", "Networks": [ { "NetworkMode": "awsvpc", "IPv4Addresses": [ "192.0.2.3" ], "AttachmentIndex": 0, "MACAddress": "0a:de:f6:10:51:e5", "IPv4SubnetCIDRBlock": "192.0.2.0/24", "DomainNameServers": [ "192.0.2.2" ], "DomainNameSearchList": [ "us-west-2.compute.internal" ], "PrivateDNSName": "ip-10-0-0-222.us-west-2.compute.internal", "SubnetGatewayIpv4Address": "192.0.2.0/24" } ], "ContainerARN": "arn:aws:ecs:us-west-2:111122223333:container/05966557-f16c-49cb-9352-24b3a0dcd0e1", "LogOptions": { "awslogs-create-group": "true", "awslogs-group": "/ecs/containerlogs", "awslogs-region": "us-west-2", "awslogs-stream": "ecs/curl/cd189a933e5849daa93386466019ab50" }, "LogDriver": "awslogs" }
Le tableau sous Réseaux contient des informations sur toutes les interfaces réseau associées à votre tâche.
L'ajout de l'option ci-dessous a bien fonctionné: bind = '{{GetInterfaceIP "eth0"}}'
Consul prend en charge l'utilisation des modèles go-sockaddr dans les -bind
et -client
. Vous pouvez spécifier les adresses comme -client="{{ GetPrivateIP }} -bind="{{ GetPrivateIP }}"
qui -client="{{ GetPrivateIP }} -bind="{{ GetPrivateIP }}"
Consul à se lier à la première adresse IP privée sur l'interface par défaut (c'est-à-dire, l'interface avec la route par défaut) .
Voir https://www.consul.io/docs/agent/options.html#_bind pour plus d'exemples go-sockaddr.
L'ajout de l'option ci-dessous a bien fonctionné:
-bind='{{ GetInterfaceIP "eth0" }}'