Come faccio a eliminare una risorsa personalizzata supportata da Lambda che è 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. Voglio eliminare la mia risorsa personalizzata.

Breve descrizione

Scegli una delle seguenti soluzioni:

  • **Eliminare una risorsa personalizzata bloccata nello stato DELETE_FAILED **
  • **Eliminare una risorsa personalizzata bloccata nello stato DELETE_IN_PROGRESS **

Risoluzione

Eliminare una risorsa personalizzata bloccata nello stato DELETE_FAILED

Viene visualizzato un messaggio di errore se si tenta di eliminare uno stack quando la risorsa personalizzata supportata da Lambda non dispone della logica per gestire le richieste di eliminazione. Puoi anche ricevere un errore se la tua risorsa personalizzata contiene una logica di eliminazione errata. Il messaggio di errore è: "La risorsa personalizzata non è riuscita a stabilizzarsi nei tempi previsti." Lo stato dello stack cambia in DELETE_FAILED.

Per eliminare lo stack, completa i seguenti passaggi:

  1. Apri la console 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

Se lo stack si blocca nello stato DELETE_IN_PROGRESS durante l'eliminazione di una risorsa personalizzata, è possibile che allo stack manchi 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, entrambi inclusi nell'evento inviato da CloudFormation a Lambda.

  1. Verifica che la tua funzione Lambda registri i dettagli dell'evento.

Se la funzione Lambda non include il log per stampare l'evento nei log, non puoi ottenere i valori **ResponseURL ** e RequestId. Questi valori sono necessari per inviare un segnale manuale. In questo caso, è necessario attendere circa un'ora affinché lo stack CloudFormation scada e passare allo stato DELETE\ _FAILED. Quindi, completa i passaggi nella sezione Elimina una risorsa personalizzata bloccata nello stato DELETE_FAILED per eliminare il tuo stack.

Nota: se hai già la seguente logica nella tua funzione Lambda, vai al passaggio 2.

Log di esempio:

exports.handler = function(event, context) {
    console.log("REQUEST RECEIVED:\n" + JSON.stringify(event));
...
}
  1. Nel tuo modello 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. Ad esempio:
MyCustomResource:
  Type: "Custom::PingTester"
  Properties:
    ServiceToken:
      !Sub |
        arn:aws:lambda:us-east-1:111122223333:function:awsexamplelambdafunction
  1. Apri la console Lambda.

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

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

  4. Nella console 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.

  1. Nel log più recente, identifica l'evento in cui RequestType è impostato su Delete, quindi copia i valori per RequestId, ResponseURL, StackId, LogicalResourceId e PhysicalResourceID. Ad 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"
  1. Per inviare un segnale di risposta SUCCESS nell'oggetto di risposta alla richiesta di eliminazione, esegui il seguente comando nell'interfaccia della riga di comando locale. Assicurati di includere i valori che hai copiato dal passaggio 7.
$ curl -H 'Content-Type: ''' -X PUT -d '{
    "Status": "SUCCESS",
    "PhysicalResourceId": "test-CloudWatchtrigger-1URTEVUHSKSKDFF",
    "StackId": "arn:aws:cloudformation:us-east-1:111122223333:stack/awsexamplecloudformation/33ad60e0-5f25-11e9-a734-0aa6b80efab2
  ",
    "RequestId": "e2fc8f5c-0391-4a65-a645-7c695646739",
    "LogicalResourceId": "CloudWatchtrigger"
  }' '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
  '

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


Informazioni correlate

Risorse personalizzate

ServiceToken

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

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa