Direkt zum Inhalt

Wie beende oder erstelle ich meine Elastic Beanstalk-Umgebung neu, wenn die AWSEBSecurityGroup nicht gelöscht werden kann?

Lesedauer: 5 Minute
0

Wenn ich meine AWS Elastic Beanstalk-Umgebung beende oder neu erstelle, erhalte ich die folgende Fehlermeldung: „Stack deletion failed: he following resource(s) failed to delete: [AWSEBSecurityGroup].“

Kurzbeschreibung

AWSEBSecurityGroup ist eine Amazon Elastic Compute Cloud (Amazon EC2)-Sicherheitsgruppe, die der zugrunde liegende AWS CloudFormation-Stack über Elastic Beanstalk erstellt. Wenn eine Elastic Network-Schnittstelle oder Sicherheitsgruppe, die außerhalb der Elastic Beanstalk-Umgebung erstellt wurde, AWSEbSecurityGroup verwendet, schlägt die Umgebung fehl, wenn du sie beendest oder neu erstellst.

Hinweis: Um die von Elastic Beanstalk erstellten Ressourcen zu verwalten, empfiehlt es sich, eine der folgenden Methoden zu verwenden: die Elastic Beanstalk-Konsole, die Elastic Beanstalk Command Line Interface (EB CLI) oder die AWS Command Line Interface (AWS CLI). Wenn du beim Ausführen von Befehlen in AWS CLI Fehlermeldungen erhältst, findest du weitere Informationen unter Beheben von AWS CLI-Fehlern. Stelle außerdem sicher, dass du die neueste Version von AWS CLI verwendest.

Lösung

Führe eine der folgenden Aufgaben aus, um dieses Problem zu beheben:

  • Verwende entweder die AWS CloudFormation-Konsole oder die AWS-CLI, um den CloudFormation-Stack zu löschen, den die Elastic Beanstalk-Umgebung erstellt hat. Beende dann die Elastic Beanstalk-Umgebung oder erstelle sie neu.
  • Entferne die abhängigen Objekte aus der Elastic Beanstalk-Sicherheitsgruppe. Beende dann die Elastic Beanstalk-Umgebung oder erstelle sie neu.

Hinweis: Gib in den folgenden AWS-CLI-Befehlen die Werte für den Stack-Namen, den Umgebungsnamen, die AWS-Region und andere umgebungsspezifische Variablen ein.

Den Stack über die CloudFormation-Konsole löschen

Wichtig: Wenn die Elastic Beanstalk-Umgebung über eine integrierte Amazon Relational Database Service (Amazon RDS)-Datenbank verfügt, entkoppele zunächst die Amazon RDS-DB-Instance.

Du kannst entweder die CloudFormation-Konsole oder die AWS-CLI verwenden, um den Stack zu löschen.

CloudFormation-Konsole

  1. Öffne die CloudFormation-Konsole.
  2. Wähle auf der Seite Stack den Stack aus, der nicht gelöscht werden konnte.
    Hinweis: In der Spalte Status des Stacks wird DELETE_FAILED angezeigt.
  3. Wähle Löschen.
  4. Wähle im Popupfenster Stack löschen die Option AWSEBSecurityGroup und dann Löschen.
    Wichtig: Stelle sicher, dass du die Sicherheitsgruppe löschst. Die AWSEBSecurityGroup wird nicht automatisch gelöscht, wenn du den Stack löschst. Wenn die Beendigung der Umgebung aufgrund einer anderen abhängigen Ressource fehlschlägt, wähle zunächst die entsprechende Ressource im Status DELETE_FAILED aus dem Pop-up-Fenster Stapel löschen. Wähle dann Löschen.
  5. Beende die Elastic Beanstalk-Umgebung oder erstelle sie neu.

AWS CLI

  1. Um den CloudFormation-Stack zu löschen, führe den Befehl describe-network-interface-attribute aus:

    aws cloudformation delete-stack --stack-name awseb-e-ztrauxujck-stack --retain-resources "AWSEBSecurityGroup" --region us-east-1
  2. Um die Elastic Beanstalk-Umgebung zu beenden, führe den Befehl terminate-environment aus:

    aws elasticbeanstalk terminate-environment --environment-name my-env --region us-east-1
  3. Um die Elastic Beanstalk-Umgebung neu zu erstellen, führe den Befehl rebuild-environment aus:

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

Abhängige Objekte für die Elastic Beanstalk-Sicherheitsgruppe suchen und entfernen

Gehe wie folgt vor, um die abhängige Netzwerkschnittstelle oder eine abhängige Sicherheitsgruppe zu finden, die das Löschen der AWSEBSecurityGroup nicht zulässt. Du kannst entweder die Amazon EC2-Konsole oder die AWS-CLI verwenden.

Amazon-EC2-Konsole

  1. Ruft die Sicherheitsgruppen-ID von AWSEBSecurityGroup aus der Fehlermeldung im Elastic Beanstalk-Ereignis-Stream ab.
  2. Öffne die Amazon-EC2-Konsole.
  3. Wähle im Navigationsbereich Sicherheitsgruppen. Wähle dann die AWSEBSecurityGroup-ID.
  4. Wähle Aktionen und dann Sicherheitsgruppe löschen, um die Abhängigkeiten von AWSEBSecurityGroup zu ermitteln.
  5. Gehe im Pop-up-Fenster Sicherheitsgruppen löschen wie folgt vor:
    Wähle Zugehörige Instance anzeigen.
    Wähle Aktionen und dann Netzwerk.
    Wähle Sicherheitsgruppe ändern.
    Deaktiviere die Kontrollkästchen ** AWSEBSecurityGroup-ID** und Sicherheitsgruppen zuweisen.
  6. Wähle im Pop-up-Fenster Sicherheitsgruppen löschen die Option Referenzierende Sicherheitsgruppen anzeigen.
  7. Um die Zuordnung der AWSEBSecurityGroup-ID zu entfernen, wähleAktionen und dann Regeln für eingehenden Datenverkehr bearbeiten oder Regeln für ausgehenden Datenverkehr bearbeiten aus.
  8. Beende die Elastic Beanstalk-Umgebung oder erstelle sie neu.

AWS CLI

  1. Ruft die Sicherheitsgruppen-ID von AWSEBSecurityGroup aus der Fehlermeldung im Elastic Beanstalk-Ereignis-Stream ab.

  2. Erstelle im Ordner „.ebextensions“ eine Konfigurationsdatei, die auf dem folgenden Beispiel basiert:

    #!/bin/bash
    SecurityGroupID=$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. Speichere das Bash-Skript als sg_dependency.sh.

  4. Installiere das jq utility von der jq-Website.

  5. Führe den folgenden Befehl aus, um die Netzwerkschnittstellen-ID und Sicherheitsgruppen-ID abzurufen:

    ./sg_dependency.sh sg-111aaa22 us-east-1

    Hinweis: Ersetze sg-111aaa22 durch die AWSEBSecurityGroup-ID. Ersetze us-east-1 durch die AWS-Region.

  6. Führe den Befehl describe-network-interface-attribute aus, um die Sicherheitsgruppen zu finden, die mit der Netzwerkschnittstellen-ID verknüpft sind:

    aws ec2 describe-network-interface-attribute --network-interface-id eni-1099d901 --attribute groupSet
  7. Um die AWWebSecurityGroup-ID zu trennen, führe den Befehl modify-network-interface-attribute aus:

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

    Wichtig: Gib im vorherigen Befehl nicht die AWSEBSecurityGroup-ID an. Füge andere Sicherheitsgruppen-IDs hinzu, um mit der Netzwerkschnittstelle verbunden zu bleiben. Wenn du die AWSEBSecurityGroup-ID in den AWS-Service aufnimmst, der die Netzwerkschnittstelle erstellt hat, gibt die Befehlsausgabe den folgenden Fehler zurück: „An error occurred (AuthFailure) when calling the ModifyNetworkInterfaceAttribute operation: You don't have permission to access the specified resource“.

  8. Führe den Befehl describe-security-groups aus, um alle Eingangs- und Ausgangsregeln der abhängigen Sicherheitsgruppe aufzulisten.

  9. Führe den Befehl revoke-security-group-ingress oder revoke-security-group-egress auf der Grundlage der Ausgabe von Schritt 7 aus.
    Beispiel: Wenn die AWSEBSecurityGroup-ID sg-111aaa22 lautet und die Ausgabe aus Schritt 8 diese Sicherheitsgruppen-ID in den Eingangsregeln enthält, führe den folgenden Befehl aus:

    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":\[\]}\]'

    Hinweis: Die UserId ist die AWS-Konto-ID.

  10. Um die Elastic Beanstalk-Umgebung zu beenden, führe den Befehl terminate-environment aus:

aws elasticbeanstalk terminate-environment --environment-name my-env --region us-east-1
  1. Um die Elastic Beanstalk-Umgebung neu zu erstellen, führe den Befehl rebuild-environment aus:
aws elasticbeanstalk rebuild-environment --environment-name my-env --region us-east-1

Ähnliche Informationen

Problembehandlung

AWS OFFICIALAktualisiert vor 2 Jahren