Salta al contenuto

Come posso risolvere i problemi relativi alle risorse personalizzate in CloudFormation?

5 minuti di lettura
0

Desidero risolvere gli errori relativi alle risorse personalizzate in AWS CloudFormation.

Breve descrizione

Gli errori delle risorse personalizzate si verificano perché la funzione AWS Lambda associata alla risorsa ha riscontrato un problema durante l'esecuzione. La risorsa personalizzata invia quindi uno stato FAILED a CloudFormation.

Una risorsa personalizzata può generare un errore anche quando CloudFormation non riceve una risposta dalla risorsa personalizzata entro i tempi e i timeout previsti.

Per risolvere i problemi relativi alle risorse personalizzate, esegui il runbook AWSSupport-TroubleshootCFNCustomResource o risolvi manualmente i problemi dello stack CloudFormation.

Per le risorse personalizzate Lambda, il runbook verifica che Lambda raggiunga Amazon Simple Storage Service (Amazon S3) per inviare una risposta a CloudFormation. La risposta a CloudFormation verifica la configurazione di rete e i gruppi di sicurezza di Lambda.

Risoluzione

Esegui il runbook AWSSupport-TroubleshootCFNCustomResource

Prima di iniziare, assicurati che l'utente o il ruolo AWS Identity and Access Management (AWS IAM) disponga delle autorizzazioni IAM richieste.

Per eseguire l'automazione, completa i seguenti passaggi:

  1. Apri la console AWS Systems Manager.
  2. Nel pannello di navigazione, scegli Documenti.
  3. Nella barra di ricerca, inserisci AWSSupport-TroubleshootCfnCustomResource.
  4. Seleziona il documento AWSSupport-TroubleshootCfnCustomResource.
  5. Scegli Esegui automazione.
  6. Per i parametri di input, inserisci i seguenti valori:
    (Facoltativo) AutomationAssumeRole. Inserisci l'ARN del ruolo IAM che consente l’automazione, una funzionalità di AWS Systems Manager di eseguire le azioni per tuo conto. Se non specifichi un ruolo, l’automazione utilizza le autorizzazioni dell'utente che avvia il runbook.
    StackName. Inserisci il nome dello stack CloudFormation in cui la risorsa personalizzata ha generato l'errore.
  7. Scegli Esegui.
  8. Esamina i risultati dettagliati nella sezione Output:
    La fase validateCloudFormationStack verifica che lo stack CloudFormation esista nello stesso account AWS e nella stessa Regione AWS.
    La fase checkCustomResource analizza lo stack CloudFormation, controlla la risorsa personalizzata che ha generato l'errore e fornisce informazioni sulla risoluzione dei problemi della risorsa personalizzata che ha generato l'errore.

Risolvi manualmente i problemi dello stack CloudFormation

Controlla i log di Amazon CloudWatch

Completa i seguenti passaggi:

  1. Apri la console CloudFormation.
  2. Seleziona lo stack che ha generato l’errore, quindi scegli la scheda Risorse per ottenere l'ID fisico della funzione Lambda associata alla risorsa personalizzata.
  3. Seleziona la funzione Lambda.
  4. Scegli la scheda Monitoraggio, quindi scegli Visualizza i log di CloudWatch.

Se la funzione Lambda è stata eliminata durante il rollback di CloudFormation, il gruppo di log potrebbe contenere ancora i log di CloudWatch.

Per accedere ai log, completa i seguenti passaggi:

  1. Apri la console CloudWatch.
  2. Scegli Gruppi di log nel pannello di navigazione.
  3. Nel campo di ricerca, esegui il seguente comando:
    /aws/lambda/LambdaPhysicalName

Nota: sostituisci LambdaPhysicalName con il nome della tua funzione Lambda.

Se non riesci a trovare i log, attiva la funzionalità di rollback e ridistribuisci lo stack per risolvere i problemi relativi al comportamento della funzione Lambda.

Risolvi le potenziali cause di errore

Risolvi lo stato FAILED

Potresti ricevere il seguente messaggio di errore:

"Received response status FAILED from custom resource. Message returned: <reason here>."

Il messaggio di errore precedente viene visualizzato quando la funzione Lambda associata alla risorsa personalizzata ha riscontrato un problema ed è attiva la logica di gestione delle eccezioni.

Per risolvere il problema, esamina il motivo dell'errore contenuto nel messaggio di errore e nei log di CloudWatch per Lambda.

CloudFormation non riceve una risposta

Lo stack genera un errore perché CloudFormation non riceve una risposta dalla risorsa personalizzata.

Per risolvere l’errore, esegui le seguenti azioni:

  • Assicurati di utilizzare correttamente il modulo cfn-response nella funzione Lambda della risorsa personalizzata per inviare una risposta allo stack CloudFormation.

  • Esamina i log di CloudWatch per determinare se si verificano errori durante l'esecuzione del codice.

  • Aumenta l'impostazione del timeout della funzione Lambda in modo che la funzione abbia abbastanza tempo per completare l'attività. Il tempo massimo che puoi impostare è 15 minuti.

  • Se la funzione Lambda si trova all'interno di un cloud privato virtuale (VPC), verifica che sia in una sottorete. La sottorete deve consentire il traffico in uscita tramite un gateway NAT. La sottorete deve inoltre indirizzare all'accesso di un endpoint Amazon S3 in modo che le risorse personalizzate possano accedere all'URL Amazon S3 prefirmato.

  • Se una risposta è stata inviata dopo un timeout, controlla nelle metriche di Lambda se viene riscontrato un numero elevato di esecuzioni simultanee di funzioni nella stessa Regione. Per ridurre i timeout, utilizza per la funzione la simultaneità riservata.

  • Se il tuo stack rimane nello stato IN PROGRESS fino al timeout della risorsa personalizzata, utilizza il comando cURL per effettuare una richiesta HTTP diretta. Quando effettui una richiesta diretta, impedisci potenzialmente il timeout.
    Esempio di comando curl:

    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
      '

    Nota: per effettuare la richiesta, devi includere i dettagli dell'oggetto della richiesta. Puoi trovare il ** RequestID ** e l'URL prefirmato di Amazon S3 nei log di CloudWatch. Per ulteriori informazioni, consulta Come posso eliminare una risorsa personalizzata supportata da Lambda bloccata nello stato DELETE_FAILED o DELETE_IN_PROGRESS in CloudFormation?

Informazioni correlate

Esecuzione di un'automazione semplice (console)

Configurazione del servizio di automazione

Guida di riferimento ai runbook del servizio di automazione di Systems Manager

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