0
votes

Récupérer l'IP privé de la tâche AWS FARGATE à l'aide de Terraform

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"
],


0 commentaires

3 Réponses :


0
votes

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.


1 commentaires

L'ajout de l'option ci-dessous a bien fonctionné: bind = '{{GetInterfaceIP "eth0"}}'



0
votes

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.


0 commentaires

0
votes

L'ajout de l'option ci-dessous a bien fonctionné:

 -bind='{{ GetInterfaceIP "eth0" }}'


0 commentaires