Come posso eliminare una risorsa personalizzata supportata da Lambda bloccata nello stato DELETE_FAILED o DELETE_IN_PROGRESS in CloudFormation?

4 minuti di lettura
0

La mia risorsa personalizzata supportata da AWS Lambda è bloccata nello stato DELETE_FAILED o DELETE_IN_PROGRESS in AWS CloudFormation. Desidero eliminare la mia risorsa personalizzata.

Risoluzione

Scegli una delle seguenti soluzioni in base allo stato della risorsa.

Elimina una risorsa personalizzata bloccata nello stato DELETE_FAILED

Viene visualizzato un messaggio di errore se tenti di eliminare uno stack con una risorsa personalizzata supportata da Lambda che non ha la logica per gestire le richieste di eliminazione. Puoi anche ricevere il seguente messaggio di errore se la tua risorsa personalizzata contiene una logica di eliminazione errata: “CloudFormation did not receive a response from your Custom Resource. Please check your logs for requestId [652961ca-f24e-42e0-8f74-3f4846ba282d]. If you use the Python cfn-response module, you might need to update your Lambda function code so that CloudFormation can attach the updated version.”

Lo stato dello stack cambia in DELETE\ _FAILED, quindi viene visualizzato il seguente messaggio di errore: “Custom Resource failed to stabilize in expected time.”

Per eliminare lo stack, completa i seguenti passaggi:

  1. Apri la console di CloudFormation.
  2. Scegli lo stack che contiene la tua risorsa personalizzata bloccata nello stato DELETE_FAILED.
  3. Scegli Azioni, quindi scegli Elimina stack.
  4. Nella finestra pop-up che fornisce un elenco di risorse da mantenere, scegli la risorsa personalizzata bloccata nello stato DELETE_FAILED. Quindi scegli Elimina.
  5. Scegli Azioni, quindi scegli Elimina stack.

Lo stato dello stack cambia in DELETE_COMPLETE.

Nota: la tua risorsa personalizzata non è una risorsa fisica, quindi non devi ripulirla dopo l'eliminazione dello stack.

Elimina una risorsa personalizzata bloccata nello stato DELETE_IN_PROGRESS

Quando lo stack elimina una risorsa personalizzata e rimane bloccata nello stato DELETE\ _IN\ _PROGRESS, lo stack potrebbe non avere la logica per gestire le richieste di eliminazione. Oppure lo stack potrebbe includere un log di eliminazione errato.

Per forzare l'eliminazione dello stack, è necessario inviare manualmente un segnale SUCCESS. Il segnale richiede i valori ResponseURL e RequestId inclusi nell'evento inviato da CloudFormation a Lambda.

  1. Nel tuo modello di CloudFormation, identifica il nome della funzione Lambda a cui la tua risorsa personalizzata invia le richieste. Puoi trovare il nome della funzione nella proprietà ServiceToken della risorsa AWS::CloudFormation::CustomResource o Custom::String.

    Per esempio:

    MyCustomResource:
      Type: "Custom::PingTester"
      Properties:
        ServiceToken:
          !Sub |
            arn:aws:lambda:us-east-1:111122223333:function:awsexamplelambdafunction
  2. Apri la console di Lambda.

  3. Nel pannello di navigazione, scegli Funzioni, quindi scegli la funzione che hai identificato nel passaggio 1. Per esempio, awsexamplelambdafunction è il nome della funzione nell'esempio di codice precedente.

  4. Verifica che la tua funzione Lambda registri i dettagli dell'evento nel gruppo di log di Amazon CloudWatch chiamato /aws/lambda/function_name.
    Esempio di log:

    exports.handler = function(event, context) {    console.log("REQUEST RECEIVED:\n" + JSON.stringify(event));
    ...
    }

    Nota: se la funzione Lambda non include la logica per stampare l'evento nei log di CloudWatch, non puoi ottenere i valori ResponseURL e RequestId. È necessario disporre di questi valori per inviare un segnale manuale. Attendi circa un'ora che lo stack di CloudFormation scada e passi allo stato DELETE\ _FAILED. Quindi completa i passaggi indicati nella sezione Elimina una risorsa personalizzata bloccata nello stato DELETE\ _FAILED per eliminare lo stack.

  5. Scegli la scheda Monitoraggio, quindi scegli Visualizza i log in CloudWatch.

  6. Nella console di Amazon CloudWatch, scegli il log più recente.

    Nota: puoi visualizzare i log di CloudWatch solo se la tua funzione ha accesso ad Amazon CloudWatch Logs per lo streaming dei log.

  7. Nel log più recente, identifica l'evento in cui RequestType è impostato su Delete, quindi copia i valori per RequestId, ResponseURL, StackId, LogicalResourceId e PhysicalResourceID. Per esempio:

    Received event: {
      "RequestType": "Delete",
      "ServiceToken": "arn:aws:lambda:us-east-1:111122223333:function:awsexamplelambdafunction",
      "ResponseURL": "https://cloudformation-custom-resource-response-useast1.s3.us-east-1.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-1%3A111122223333%3Astack/awsexamplecloudformation/33ad60e0-5f25-11e9-a734-0aa6b80efab2%7CMyCustomResource%7Ce2fc8f5c-0391-4a65-a645-7c695646739?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20170313T0212304Z&X-Amz-SignedHeaders=host&X-Amz-Expires=7200&X-Amz-Credential=QWERTYUIOLASDFGBHNZCV%2F20190415%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=dgvg36bh23mk44nj454bjb54689bg43r8v011uerehiubrjrug5689ghg94hb",
      "StackId": "arn:aws:cloudformation:us-east-1:111122223333:stack/awsexamplecloudformation/33ad60e0-5f25-11e9-a734-0aa6b80efab2",
      "RequestId": "e2fc8f5c-0391-4a65-a645-7c695646739",
      "LogicalResourceId": "MyCustomResource",
      "PhysicalResourceId": "test-MyCustomResource-1URTEVUHSKSKDFF",
      "ResourceType": "Custom::PingTester"
  8. Per inviare un segnale di risposta SUCCESS nell'oggetto di risposta alla richiesta di eliminazione, esegui il seguente comando nell'interfaccia a riga di comando locale. Assicurati di includere i valori che hai copiato nel passaggio 7.

    curl -H "Content-Type: ''" -X PUT -d "{\"Status\": \"SUCCESS\",\"PhysicalResourceId\": \"test-CloudWatchtrigger-1URTEVUHSKSKDFF\",\"StackId\": \"arn:aws:cloudformation:us-west-2:111122223333:stack/CRStack/5105e4b0-4a29-11ef-8c42-067744df1edb\",\"RequestId\": \"dca731ad-18ad-496c-8c77-459d904fd36b\",\"LogicalResourceId\": \"MyCustomResource\"}" "https://cloudformation-custom-resource-response-uswest2.s3-us-west-2.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-west-2%3A111122223333%3Astack/CRStack/5105e4b0-4a29-11ef-8c42-067744df1edb%7CCustomResource%7Cdca731ad-18ad-496c-8c77-459d904fd36b?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240725T020141Z&X-Amz-SignedHeaders=host&X-Amz-Expires=7200&X-Amz-Credential=AKIA54RCMT6SJPHCTM4H%2F20240725%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Signature=3b1567adb5ec9415526251a26bac3a6c861ac77aa090a3ada0a4a4d109a7273d"

Lo stato delle tue risorse personalizzate cambia in DELETE_COMPLETE negli eventi dello stack di CloudFormation.

Informazioni correlate

Crea una logica di provisioning personalizzata con risorse personalizzate

AWS::CloudFormation::CustomResource

Quali sono alcune best practice per implementare risorse personalizzate supportate da AWS Lambda con AWS CloudFormation?

AWS UFFICIALE
AWS UFFICIALEAggiornata 5 mesi fa