Comment puis-je arrêter mon environnement Elastic Beanstalk ou le recréer lorsque la suppression d'AWSEBSecurityGroup échoue ?

Lecture de 6 minute(s)
0

Lorsque j'arrête mon environnement AWS Elastic Beanstalk ou que je le recrée, je reçois le message d'erreur suivant : « La suppression de la pile a échoué : La ou les ressources suivantes n'ont pas pu être supprimées : [AWSEBSecurityGroup]. »

Brève description

AWSEBSecurityGroup est un groupe de sécurité Amazon Elastic Compute Cloud (Amazon EC2) créé par la pile AWS CloudFormation sous-jacente à travers Elastic Beanstalk. Lorsqu'une interface réseau Elastic ou un groupe de sécurité créé en dehors de votre environnement Elastic Beanstalk utilise AWSEBSecurityGroup, l'environnement échoue lorsque vous le fermez ou le recréez.

Remarque : pour gérer les ressources créées par Elastic Beanstalk, il est recommandé d'utiliser la console Elastic Beanstalk, l'interface de la ligne de commande Elastic Beanstalk (EB CLI), ou l'interface de la ligne de commande AWS (AWS CLI).

Résolution

Remarque : si vous recevez des messages d'erreurs lors de l'exécution des commandes AWS CLI, assurez-vous que vous utilisez la version la plus récente de l'AWS CLI.

Pour résoudre ce problème, exécutez l'une des tâches suivantes :

  • Utilisez la console AWS CloudFormation ou l'interface de la ligne de commande AWS pour supprimer la pile CloudFormation créée par l'environnement Elastic Beanstalk. Ensuite, arrêtez ou recréez l'environnement Elastic Beanstalk.
  • Supprimez les objets dépendants de votre groupe de sécurité Elastic Beanstalk. Ensuite, arrêtez ou recréez l'environnement Elastic Beanstalk.

Remarque : dans les commandes de l'AWS CLI suivantes, entrez les valeurs du nom de votre pile, du nom de l'environnement, de la région AWS et d'autres variables spécifiques à l'environnement.

Supprimer la pile de la console CloudFormation

Important : si votre environnement Elastic Beanstalk possède une base de données Amazon Relational Database Service (Amazon RDS) intégrée, découplez d'abord l'instance de base de données Amazon RDS.

Vous pouvez utiliser la console CloudFormation ou l'interface de la ligne de commande AWS pour supprimer la pile.

Console CloudFormation

1.    Ouvrez la console CloudFormation.

2.    Sur la page Piles, sélectionnez la pile qui n'a pas pu être supprimée.
Remarque : la colonne État de votre pile indique DELETE_FAILED.

3.    Sélectionnez Supprimer.

4.    Dans la fenêtre contextuelle Supprimer la pile, cliquez sur AWSEBSecurityGroup, puis sélectionnez Supprimer.
Important : veillez à supprimer le groupe de sécurité. L'AWSEBSecurityGroup n'est pas supprimé automatiquement lorsque vous supprimez la pile. Si la fermeture de l'environnement échoue en raison d'une autre ressource dépendante, choisissez la ressource appropriée dans l'état DELETE_FAILED dans la fenêtre contextuelle Supprimer la pile. Sélectionnez ensuite Supprimer.

5.    Arrêtez ou recréez l'environnement Elastic Beanstalk.

AWS CLI

1.    Vous pouvez supprimer la pile CloudFormation en exécutant la commande describe-network-interface-attribute :

aws cloudformation delete-stack --stack-name awseb-e-ztrauxujck-stack --retain-resources "AWSEBSecurityGroup" --region us-east-1

2.    Pour arrêter l'environnement Elastic Beanstalk, exécutez la commande terminate-environment :

aws elasticbeanstalk terminate-environment --environment-name my-env --region us-east-1

3.    Pour recréer l'environnement Elastic Beanstalk, exécutez la commande rebuild-environment :

aws elasticbeanstalk rebuild-environment --environment-name my-env --region us-east-1

Rechercher et supprimer les objets dépendants du groupe de sécurité Elastic Beanstalk

Pour trouver une interface réseau dépendante ou un groupe de sécurité dépendant qui vous empêche de supprimer l'AWSEBSecurityGroup, suivez les étapes suivantes. Vous pouvez utiliser la console Amazon EC2 ou l'interface de la ligne de commande AWS.

Console Amazon EC2

1.    Obtenez l'identifiant du groupe de sécurité AWSEBSecurityGroup à partir du message d'erreur affiché dans le flux d'événements Elastic Beanstalk.

2.    Ouvrez la console Amazon EC2.

3.    Dans le volet de navigation, sélectionnez Groupes de sécurité. Sélectionnez ensuite l'identifiant AWSEBSecurityGroup.

4.    Sélectionnez Actions, puis cliquez sur Supprimer le groupe de sécurité pour rechercher les dépendances sur AWSEBSecurityGroup.

5.    Dans la fenêtre contextuelle Supprimer les groupes de sécurité, sélectionnez Afficher votre instance associée.
Sélectionnez Actions, puis Mise en réseau.
Sélectionnez Modifier le groupe de sécurité.
Désactivez les cases à cocher AWSEBSecurityGroup ID et Attribuer des groupes de sécurité.

6.    Dans la fenêtre contextuelle Supprimer les groupes de sécurité, sélectionnez Afficher vos groupes de sécurité de référence.
Pour supprimer l'association de l'identifiant AWSEBSecurityGroup, sélectionnez Actions, puis cliquez sur Modifier les règles entrantes ou Modifier les règles sortantes.

7.    Arrêtez ou recréez l'environnement Elastic Beanstalk.

AWS CLI

1.    Obtenez l'identifiant du groupe de sécurité AWSEBSecurityGroup à partir du message d'erreur affiché dans le flux d'événements Elastic Beanstalk.

2.    Enregistrez le script bash suivant sous le nom sg_dependency.sh :

#!/bin/bashSecurityGroupID=$1
Region=$2
DependentENI=$(aws ec2 describe-network-interfaces --filters Name=group-id,Values=[$SecurityGroupID] --region $Region | jq '.NetworkInterfaces[].NetworkInterfaceId')
DependentSGingress=$(aws ec2 describe-security-groups --filters Name=ip-permission.group-id,Values=[$SecurityGroupID] --region $Region | jq '.SecurityGroups[] .GroupId')
DependentSGegress=$(aws ec2 describe-security-groups --filters Name=egress.ip-permission.group-id,Values=[$SecurityGroupID] --region $Region | jq '.SecurityGroups[] .GroupId')
echo "The dependent ENI is $DependentENI"
echo "The security group id with a dependency in ingress rule : $DependentSGingress"
echo "The security group id with a dependency in egress rule :  $DependentSGegress"

3.    Installez l'utilitaire jq depuis le site Web de jq.

4.    Pour obtenir votre identifiant d'interface réseau, votre identifiant de groupe de sécurité, ou les deux, exécutez la commande suivante :

./sg\_dependency.sh sg-111aaa22 us-east-1

Remarque : remplacez sg-111aaa22 par votre identifiant AWSEBSecurityGroup. Remplacez us-east-1 par votre région AWS.

5.    Pour rechercher les groupes de sécurité attachés à l'ID d'interface réseau, exécutez la commande describe-network-interface-attribute :

aws ec2 describe-network-interface-attribute --network-interface-id eni-1099d901 --attribute groupSet

6.    Pour détacher l'identifiant AWSEBSecurityGroup, exécutez la commande modify-network-interface-attribute :

aws ec2 modify-network-interface-attribute --network-interface-id eni-1099d901 --groups sg-030644d6c95b6470a sg-d34a33a8 sg-059c081ab30c3e38e sg-0e4eabc747368e6c9

Important : dans la commande précédente, excluez l'ID AWSEBSecurityGroup. Ajoutez d'autres identifiants de groupes de sécurité pour rester connectés à l'interface réseau. Si le résultat de la commande renvoie le message « Une erreur s'est produite (AuthFailure) lors de l'appel de l'opération ModifyNetworkInterfaceAttribute : Vous n'êtes pas autorisé à accéder à l'erreur « ressource spécifiée », ensuite supprimez AWSEBSecurityGroup du service AWS qui a créé cette interface réseau.

7.    Exécutez la commande describe-security-groups pour répertorier toutes les règles d'entrée et de sortie du groupe de sécurité dépendant.

8.    Exécutez la commande revoke-security-group-ingress ou revoke-security-group-egress en fonction du résultat de l'étape 7.
Si l'identifiant AWSEBSecurityGroup est par exemple sg-111aaa22 et que le résultat de l'étape 8 contient cet identifiant de groupe de sécurité dans les règles d'entrée, exécutez la commande suivante :

aws ec2 revoke-security-group-ingress --group-id sg-0018a2fbdcd5797ea --ip-permissions '\[{"PrefixListIds":\[\],"FromPort":0,"IpRanges":\[\],"ToPort":65535,"IpProtocol":"tcp","UserIdGroupPairs":\[{"UserId":"123456789102","GroupId":"sg-111aaa22"}\],"Ipv6Ranges":\[\]}\]'

Remarque : le UserId est l'identifiant du compte AWS.

9.    Pour arrêter l'environnement Elastic Beanstalk, exécutez la commande terminate-environment :

aws elasticbeanstalk terminate-environment --environment-name my-env --region us-east-1

10.    Pour recréer l'environnement Elastic Beanstalk, exécutez la commande rebuild-environment :

aws elasticbeanstalk rebuild-environment --environment-name my-env --region us-east-1

Informations connexes

Dépannage

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 8 mois