Comment résoudre les problèmes de connexion entre ma tâche Fargate et d'autres services AWS ?

Lecture de 8 minute(s)
0

Je souhaite résoudre les problèmes de connectivité que je rencontre entre ma tâche AWS Fargate et un service AWS.

Brève description

Les applications qui s'exécutent dans le cadre d'une tâche Fargate avec Amazon Elastic Container Service (Amazon ECS) peuvent ne pas accéder aux autres services AWS pour les raisons suivantes :

  • Autorisations AWS Identity and Access Management (IAM) insuffisantes
  • Routes de sous-réseau incorrectes
  • Restrictions relatives à la liste de contrôle d'accès au réseau (ACL réseau)
  • Groupes de sécurité
  • Points de terminaison Amazon Virtual Private Cloud (Amazon VPC)

Pour résoudre ces problèmes, utilisez Amazon ECS Exec pour interagir avec le conteneur d'applications de la tâche Fargate. Si vous constatez des erreurs de délai de connexion dans les journaux des conteneurs d'applications, testez la connectivité entre la tâche Fargate et le service AWS correspondant.

Résolution

Utilisez ECS Exec pour interagir avec le conteneur d'applications de la tâche Fargate

1.    Avant d'utiliser Amazon ECS Exec, remplissez les conditions préalables à l'utilisation d'Amazon ECS Exec.

2.    Suivez les instructions de la rubrique Utilisation d'Amazon ECS Exec pour activer cette fonctionnalité.

3.    Exécutez Amazon ECS Exec pour accéder à votre conteneur d'applications et vérifier le réseau et la connectivité IAM entre le conteneur et le service AWS.

**Remarque :avant d'exécuter Exec, il est recommandé de définir le paramètre ** initProcessEnabled sur true. Cela permet d'éviter que les processus enfants de l'agent AWS Systems Manager (agent SSM) ne deviennent orphelins. (Facultatif) Ajoutez une commande de mise en veille pour le conteneur d'applications afin de maintenir le conteneur en cours d'exécution pendant une période spécifiée.

Exemple :

{
    "taskRoleArn": "ecsTaskRole",
    "networkMode": "awsvpc",
    "requiresCompatibilities": [
        "EC2",
        "FARGATE"
        ],
        "executionRoleArn": "ecsTaskExecutionRole",
        "memory": ".5 gb",
        "cpu": ".25 vcpu",
        "containerDefinitions": [
            {
                "name": "application",
                "image": "application:latest",
                "essential": true,
                "command": ["sleep","7200"],
                "linuxParameters": {
                    "initProcessEnabled": true
                }
            }
        ],
        "family": "ecs-exec-task"
}

si vous ne pouvez pas utiliser Exec pour accéder au conteneur de votre application, exécutez Exec pour une nouvelle tâche Fargate qui s'exécute sur l'image Docker amazon/aws-cli. Cela vous permet de tester la communication entre la tâche Fargate et le service AWS.

Remarque : la nouvelle tâche Fargate doit avoir la même configuration réseau (sous-réseaux, groupes de sécurité, etc.) que votre conteneur d'applications.

Pour exécuter une nouvelle tâche Fargate avec l'image Docker amazon/aws-cli, procédez comme suit :

Remarque : l'interface de ligne de commande AWS (AWS CLI) est préinstallée sur l'image amazon/aws-cli de votre conteneur. Si l'AWS CLI n'est pas installée sur votre conteneur d'applications, exécutez la commande suivante :

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86\_64.zip" -o "awscliv2.zip"

unzip awscliv2.zip

sudo ./aws/install

1.    Créez une définition de tâche avec amazon/aws-cli comme image pour le conteneur. Ajoutez ensuite les points d'entrée tail,-f et /dev/null pour placer le conteneur dans un état d’exécution continu.

Exemple de définition de tâche :

{  
    "requiresCompatibilities": \[  
        "FARGATE"  
    \],  
    "family": "aws-cli",  
    "containerDefinitions": \[  
        {  
        "entryPoint": \[  
        "tail",  
        "-f",  
        "/dev/null"  
        \],  
        "name": "cli",  
        "image": "amazon/aws-cli",  
        "essential": true  
        }  
    \],  
    "networkMode": "awsvpc",  
    "memory": "512",  
    "cpu": "256",  
    "executionRoleArn": "arn:aws:iam::123456789012:role/EcsTaskExecutionRole",  
    "taskRoleArn": "arn:aws:iam::123456789012:role/TaskRole"  
}

2.    Créez un service Amazon ECS avec la définition de tâche nouvellement créée et avec la même configuration réseau que le conteneur d'applications :

$ aws ecs create-service --cluster <example-cluster-name> --task-definition <example-task-definition-name> --network-configuration awsvpcConfiguration="{subnets=[example-subnet-XXXXXXX, example-subnet-XXXXXXX],securityGroups=[example-sg-XXXXXXXXXXXX],assignPublicIp=ENABLED}" --enable-execute-command --service-name <example-service-name> --desired-count 1 --launch-type FARGATE --region <example-region>

**Remarque :**remplacez example-cluster-name par le nom de votre cluster, example-task-definition-name par le nom de votre définition de tâche, example-service-name par le nom de votre service et example-region par votre région AWS.

3.    Exécutez Exec pour accéder au conteneur de tâches Amazon ECS Fargate, puis exécutez la commande /bin/sh en fonction du nom de conteneur et de l'identifiant de tâche que vous avez spécifiés :

$ aws ecs execute-command --cluster <example-cluster-name> --task <example-task-id> --container <example-container-name> --interactive --command "/bin/sh" --region <example-region>

**Remarque :**remplacez example-cluster-name par le nom de votre cluster, example-task-id par votre identifiant de tâche, example-container-name par le nom de votre conteneur et example-region par votre région.

Si vous rencontrez toujours des problèmes lors de l'utilisation d'ECS Exec sur votre tâche Fargate, consultez L'ARTICLE D'ISHAN ICI (URL en attente pour l'article_33538).

Tester la connectivité entre une tâche Fargate et le service AWS correspondant

Résoudre les problèmes liés à l'insuffisance des autorisations IAM

Vérifiez si la tâche Fargate dispose d'autorisations IAM suffisantes pour se connecter au service AWS correspondant. Pour exécuter les commandes de l'interface de ligne de commande AWS pour le service AWS requis, consultez le guide de ](https://awscli.amazonaws.com/v2/documentation/api/latest/index.html)référence des commandes de l'interface de ligne de commande[ AWS.

Exemple de test de connectivité entre la tâche Fargate et Amazon Simple Notification Service (Amazon SNS) :

# aws sns list-topics --region <example-region-name>

Si vous recevez l'erreur suivante, consultez la politique d'Amazon VPC en matière de points de terminaison. Assurez-vous que la politique autorise l'accès pour effectuer les actions nécessaires contre le service AWS.

An error occurred (AuthorizationError) when calling the ListTopics operation: User: arn:aws:sts::123456789012:assumed-role/TaskRole/123456789012 is not authorized to perform: SNS:ListTopics on resource: arn:aws:sns:<region-name>:123456789012:* with an explicit deny in a VPC endpoint policy

Si vous recevez l'erreur suivante, vérifiez les autorisations du rôle IAM des tâches Amazon ECS. Assurez-vous que le rôle IAM dispose des autorisations requises pour effectuer les actions requises sur le service AWS.

An error occurred (AuthorizationError) when calling the ListTopics operation: User: arn:aws:sts::123456789012:assumed-role/TaskRole/123456789012 is not authorized to perform: SNS:ListTopics on resource: arn:aws:sns:<region-name>:123456789012:* because no identity-based policy allows the SNS:ListTopics action

**Remarque :**si aucune erreur ne s'affiche lors de l'exécution des commandes de l'interface de ligne de commande AWS sur la tâche Fargate, les autorisations IAM requises sont présentes pour ce service AWS.

Résoudre les erreurs de délai de connexion

1.    Utilisez**# telnet** pour tester la connectivité réseau à vos points de terminaison de service AWS à partir de la tâche Fargate :

# telnet <EXAMPLE-ENDPOINT> <EXAMPLE-PORT>

**Remarque :**remplacez EXAMPLE-ENDPOINT par le nom et l'URL de votre point de terminaison de service AWS et EXAMPLE-PORT par votre port de service AWS.

L'exemple de sortie suivant montre que le point de terminaison est accessible depuis le conteneur :

Trying 10.0.1.169...
Connected to sns.us-east-1.amazonaws.com.
Escape character is '^]'.

# dig <EXAMPLE-ENDPOINT>

# nslookup <EXAMPLE-ENDPOINT>

Pour obtenir la liste des points de terminaison des services AWS régionaux, consultez Points de terminaison de service et quotas pour les services AWS.

**Remarque :si vous n'avez pas installé Telnet et que vous n'avez pas fouillé le conteneur de l'application, exécutez les commandes apt-get update, apt install dnsutils et apt install telnet pour les installer. Pour les conteneurs basés sur amazon/aws-cli, utilisez les comamndes yum update, yum install telnet et ** yum install bind-utils pour installer telnet et d'autres outils.

2.    Si vous recevez des messages d’erreur de dépassement du délai de connexion après avoir testé la connectivité réseau à vos points de terminaison de service AWS, inspectez la configuration du réseau :

Exécutez la commande nslookup. Si vous voyez des plages d’adresse VPC CIDR IP, le trafic est acheminé via des points de terminaison VPC :

# nslookup sns.us-east-1.amazonaws.com

Non-authoritative answer:
Name:    sns.us-east-1.amazonaws.com
Address: 10.0.1.169
Name:    sns.us-east-1.amazonaws.com
Address: 10.0.2.248

Pour les erreurs liées à l’expiration du délai de connexion, vérifiez les règles entrantes du groupe de sécurité des points de terminaison VPC. Assurez-vous que le trafic TCP via le port 443 est autorisé dans les règles entrantes provenant du groupe de sécurité ECS ou de l'adresse VPC CIDR. Pour en savoir plus, consultez l'article Comment résoudre les problèmes de connectivité sur les points de terminaison VPC de ma passerelle et de mon interface ?

  • Si aucun point de terminaison Amazon VPC n'est configuré dans la région, vérifiez les itinéraires entre vos sous-réseaux et Internet. Pour une tâche Fargate dans un sous-réseau public, assurez-vous que votre tâche possède une route par défaut vers la passerelle Internet. Pour une tâche Fargate dans un sous-réseau privé, assurez-vous que votre tâche possède un itinéraire par défaut. Votre tâche nécessite une route par défaut vers la passerelle NAT, AWS PrivateLink, une autre source de connectivité Internet ou vers l'adresse CIDR locale et VPC.
  • Assurez-vous que l'ACL réseau autorise l'accès au service AWS.
  • Vérifiez que les règles entrantes du groupe de sécurité sont associées au service AWS auquel vous essayez d'accéder avec votre tâche Fargate. Autorisez le trafic entrant via les ports requis.
  • Vérifiez que les règles sortantes du groupe de sécurité des tâches Fargate autorisent le trafic sortant via les ports requis pour se connecter au service AWS.
AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an