New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Quali sono alcune best practice per implementare risorse personalizzate supportate da Lambda con CloudFormation?
Desidero seguire le best practice quando implemento risorse personalizzate supportate da AWS Lambda con AWS CloudFormation.
Risoluzione
Quando implementi risorse personalizzate supportate da Lambda con CloudFormation, utilizza le seguenti best practice.
Creazione di risorse personalizzate per segnalare, registrare e gestire gli errori
Le eccezioni possono causare la chiusura del codice della funzione senza l'invio di una risposta. CloudFormation richiede una risposta HTTPS per confermare se l'operazione è riuscita o meno. Un'eccezione non segnalata fa sì che CloudFormation attenda il timeout dell'operazione prima di avviare un ripristino dello stato precedente dello stack. Se l'eccezione si ripresenta durante il ripristino dello stato precedente, CloudFormation attende nuovamente un timeout prima di terminare con un errore di ripristino dello stato precedente. Durante questo periodo, non puoi usare il tuo stack.
Per evitare problemi di timeout, includi gli elementi seguenti nel codice creato per la funzione Lambda:
- Logica per gestire le eccezioni
- La capacità di registrare gli errori per gli scenari di risoluzione dei problemi
- La capacità di rispondere a CloudFormation con una risposta HTTPS a conferma della mancata riuscita di un'operazione
- Una coda DLQ che consente di registrare e gestire le esecuzioni incomplete
- Un modulo cfn-response per inviare una risposta a CloudFormation
Impostazione di periodi di timeout ragionevoli e invio di segnalazione quando stanno per essere superati
Se un'operazione non viene eseguita entro il periodo di timeout definito, la funzione genera un'eccezione e non invia una risposta a CloudFormation.
Per evitare questo errore, esegui le operazioni seguenti:
- Imposta il valore di timeout per le tue funzioni Lambda in modo che sia abbastanza alto da gestire le variazioni dei tempi di elaborazione e delle condizioni di rete.
- Imposta un timer nella tua funzione per rispondere a CloudFormation con un errore quando una funzione sta per scadere.
Compilazione intorno agli eventi Crea, Aggiorna ed Elimina
A seconda dell'azione dello stack, CloudFormation invia alla funzione un evento Crea, Aggiorna o Elimina. Poiché ogni evento viene gestito in modo diverso, assicurati che non vi siano comportamenti indesiderati quando la funzione riceve uno dei tre tipi di evento.
Per ulteriori informazioni, consulta Custom resource request types (Tipi di richieste di risorse personalizzate).
Comprendere in che modo CloudFormation identifica e sostituisce le risorse
Quando un aggiornamento sostituisce una risorsa fisica, CloudFormation confronta il PhysicalResourceId restituito dalla funzione Lambda con il PhysicalResourceId precedente. Se gli ID sono diversi, CloudFormation presuppone che la risorsa venga sostituita con una nuova risorsa fisica.
Tuttavia, per consentire potenziali ripristini dello stato precedente, CloudFormation non rimuove la vecchia risorsa. Al termine dell'aggiornamento dello stack, CloudFormation invia una richiesta di evento Elimina con il vecchio ID fisico come identificatore. Se l'aggiornamento dello stack non va a buon fine e si verifica un ripristino dello stato precedente, CloudFront invia il nuovo ID fisico nell'evento Elimina.
Utilizza PhysicalResourceId per identificare le risorse in modo univoco in modo che quando la funzione riceve un evento Elimina vengano eliminate solo le risorse corrette durante una sostituzione.
Progettazione delle funzioni con idempotenza
Una funzione idempotente può essere ripetuta più volte con gli stessi input e il risultato è lo stesso di una sola volta. L'idempotenza assicura che i nuovi tentativi, gli aggiornamenti e i ripristini dello stato precedente non creino risorse duplicate o introducano errori.
Ad esempio, CloudFormation richiama la tua funzione per creare una risorsa, ma non riceve una risposta che indichi la corretta creazione della risorsa. CloudFormation potrebbe richiamare nuovamente la funzione e creare una seconda risorsa. La prima risorsa può quindi diventare orfana.
Implementazione dei gestori per gestire correttamente i ripristini dello stato precedente
Quando un'operazione dello stack non va a buon fine, CloudFormation tenta di ripristinare lo stato precedente di tutte le risorse. Questa azione causa comportamenti diversi a seconda che l'aggiornamento abbia causato una sostituzione di risorse.
Per garantire che CloudFront possa completare i ripristini dello stato precedente, esegui le seguenti azioni:
- Evita di rimuovere implicitamente le vecchie risorse finché la funzione non riceve un evento Delete.
- Per seguire le best practice, utilizza cloudformation-accustom o Custom Resource Helper sul sito web di GitHub.
Informazioni correlate

Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa