Salta al contenuto

Come posso terminare o ricostruire il mio ambiente Elastic Beanstalk quando AwSebSecurityGroup non riesce a eliminare?

6 minuti di lettura
0

Quando interrompo o ricostruisco il mio ambiente AWS Elastic Beanstalk, ricevo il seguente errore: "Stack deletion failed: The following resource(s) failed to delete: [AWSEBSecurityGroup]."

Breve descrizione

AWSEBSecurityGroup è un gruppo di sicurezza di Amazon Elastic Compute Cloud (Amazon EC2) creato dallo stack di AWS CloudFormation sottostante tramite Elastic Beanstalk. Se un'interfaccia di rete elastica o un gruppo di sicurezza creato all'esterno dell'ambiente Elastic Beanstalk utilizza AwSebSecurityGroup, l'ambiente genera un errore quando lo termini o lo ricostruisci.

Nota: per gestire le risorse create da Elastic Beanstalk, è consigliabile utilizzare una delle seguenti opzioni: la console Elastic Beanstalk, l'interfaccia a riga di comando Elastic Beanstalk (EB CLI) o l'interfaccia della linea di comando AWS (AWS CLI). Se visualizzi messaggi di errore quando esegui comandi AWS CLI, consulta la sezione Risoluzione degli errori relativi a AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Risoluzione

Per risolvere il problema, completa una delle seguenti operazioni:

  • Utilizza la console AWS CloudFormation o AWS CLI per eliminare lo stack di CloudFormation creato dall'ambiente Elastic Beanstalk. Quindi termini o ricostruisci l'ambiente Elastic Beanstalk.
  • Rimuovi gli oggetti dipendenti dal gruppo di sicurezza di Elastic Beanstalk. Quindi termini o ricostruisci l'ambiente Elastic Beanstalk.

Nota: nei seguenti comandi AWS CLI, inserisci i valori per il nome dello stack, il nome dell'ambiente, la Regione AWS e altre variabili specifiche dell'ambiente.

Elimina lo stack dalla console CloudFormation

Importante: se l'ambiente Elastic Beanstalk ha un database Amazon Relational Database Service (Amazon RDS) integrato, prima disaccoppia l'istanza database Amazon RDS.

Puoi utilizzare la console CloudFormation o AWS CLI per eliminare lo stack.

Console CloudFormation

  1. Apri la console CloudFormation.
  2. Nella pagina Stack, scegli lo stack che non è stato eliminato.
    Nota: la colonna Stato dello stack mostra DELETE_FAILED.
  3. Scegli Elimina.
  4. Nella finestra a comparsa Elimina stack, scegli AWSEBSecurityGroup, quindi scegli Elimina.
    Importante: assicurati di eliminare il gruppo di sicurezza. AWSEBSecurityGroup non viene eliminato automaticamente quando elimini lo stack. Se la terminazione dell'ambiente non riesce a causa di un'altra risorsa dipendente, scegli prima la risorsa corrispondente nello stato DELETE_FAILED nella finestra a comparsa Elimina stack. Quindi scegli Elimina.
  5. Termina o ricostruisci l'ambiente Elastic Beanstalk.

AWS CLI

  1. Per eliminare lo stack di CloudFormation, esegui il comando describe-network-interface-attribute:

    aws cloudformation delete-stack --stack-name awseb-e-ztrauxujck-stack --retain-resources "AWSEBSecurityGroup" --region us-east-1
  2. Per terminare l'ambiente Elastic Beanstalk, esegui il comando terminate-environment:

    aws elasticbeanstalk terminate-environment --environment-name my-env --region us-east-1
  3. Per ricostruire l'ambiente Elastic Beanstalk, esegui il comando rebuild-environment:

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

Individua e rimuovi gli oggetti dipendenti per il gruppo di sicurezza di Elastic Beanstalk

Per individuare l'interfaccia di rete dipendente o un gruppo di sicurezza dipendente che non consente di eliminare AWSEBSecurityGroup, completa i seguenti passaggi. Puoi utilizzare la console Amazon EC2 o AWS CLI.

Console Amazon EC2

  1. Ottieni l'ID del gruppo di sicurezza AWSEBSecurityGroup dal messaggio di errore nel flusso di eventi di Elastic Beanstalk.
  2. Apri la console Amazon EC2.
  3. Nel pannello di navigazione, scegli Gruppi di sicurezza. Quindi scegli l'ID di AWSEBSecurityGroup.
  4. Scegli Operazioni, quindi ** Elimina gruppo di sicurezza ** per individuare le dipendenze da AWSEBSecurityGroup.
  5. Nella finestra a comparsa Elimina gruppi di sicurezza, completa i seguenti passaggi:
    Scegli View your associated instance (Visualizza istanza associata).
    Scegli Operazioni, quindi Reti.
    Scegli Cambia gruppo di sicurezza.
    Deseleziona le caselle di controllo AWSEBSecurityGroup ID e Assign Security Groups.
  6. Nella finestra a comparsa pop-up Elimina gruppi di sicurezza, scegli View your referencing security groups (Visualizza gruppi di sicurezza di riferimento).
  7. Per rimuovere l'associazione dell'ID di AWSEBSecurityGroup, scegli Operazioni, quindi Modifica le regole in entrata o Modifica le regole in uscita.
  8. Termina o ricostruisci l'ambiente Elastic Beanstalk.

AWS CLI

  1. Ottieni l'ID del gruppo di sicurezza AWSEBSecurityGroup dal messaggio di errore nel flusso di eventi di Elastic Beanstalk.

  2. Nella cartella .ebextensions, crea un file di configurazione basato sul seguente esempio:

    #!/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. Salva lo script bash come sg_dependency.sh.

  4. Installa l'utilità jq dal sito web jq.

  5. Per ottenere l'ID dell'interfaccia di rete e l'ID del gruppo di sicurezza, esegui questo comando:

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

    Nota: sostituisci sg-111aaa22 con l'ID del tuo AWSEBSecurityGroup. Sostituisci us-east-1 con la tua Regione AWS.

  6. Per individuare i gruppi di sicurezza collegati all'ID dell'interfaccia di rete, esegui il comando describe-network-interface-attribute:

    aws ec2 describe-network-interface-attribute --network-interface-id eni-1099d901 --attribute groupSet
  7. Per scollegare l'ID di AWSEBSecurityGroup, esegui il comando modify-network-interface-attribute:

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

    Importante: nel comando precedente, non includere l'ID AWSEBSecurityGroup. Includi gli ID di altri gruppi di sicurezza per rimanere collegato all'interfaccia di rete. Se includi l'ID di AWSEBSecurityGroup nel servizio AWS che ha creato l'interfaccia di rete, l'output del comando restituisce il seguente errore: "An error occurred (AuthFailure) when calling the ModifyNetworkInterfaceAttribute operation: You don't have permission to access the specified resource".

  8. Esegui il comando describe-security-groups per elencare tutte le regole in entrata e in uscita del gruppo di sicurezza dipendente.

  9. Esegui il comando revoke-security-group-ingress o revoke-security-group-egress in base all'output del passaggio 7.
    Esempio: se l'ID di AWSEBSecurityGroup è sg-111aaa22 e l'output del passaggio 8 ha l'ID del gruppo di sicurezza nelle regole in entrata, esegui questo comando:

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

    Nota: UserId è l'ID dell'account AWS.

  10. Per terminare l'ambiente Elastic Beanstalk, esegui il comando terminate-environment:

aws elasticbeanstalk terminate-environment --environment-name my-env --region us-east-1
  1. Per ricostruire l'ambiente Elastic Beanstalk, esegui il comando rebuild-environment:
aws elasticbeanstalk rebuild-environment --environment-name my-env --region us-east-1

Informazioni correlate

Risoluzione dei problemi dell'ambiente Elastic Beanstalk

AWS UFFICIALEAggiornata 2 anni fa