Quali sono alcune best practice per implementare risorse personalizzate supportate da Lambda con CloudFormation?
Desidero seguire le best practice nell'implementazione di risorse personalizzate supportate da AWS Lambda con AWS CloudFormation.
Risoluzione
Prendi in considerazione le seguenti best practice per implementare risorse personalizzate supportate da AWS Lambda con AWS CloudFormation.
Crea le tue 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 rollback dello stack. Se l'eccezione si ripresenta durante il rollback, CloudFormation attende nuovamente un timeout prima di terminare con un errore di rollback. Durante questo periodo, lo stack è inutilizzabile.
Per evitare problemi di timeout, includi quanto segue nel codice che crei per la tua funzione Lambda:
- Logica per gestire le eccezioni
- La possibilità di registrare l'errore per gli scenari di risoluzione dei problemi
- La capacità di rispondere a CloudFormation con una risposta HTTPS a conferma del fallimento 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
Imposta periodi di timeout ragionevoli e segnala quando stanno per essere superati
Se un'operazione non viene eseguita entro il periodo di timeout definito, la funzione genera un'eccezione e non viene inviata alcuna risposta a CloudFormation.
Per evitare questo problema, considera quanto segue:
- 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. Con un timer è possibile prevenire ritardi per le risorse personalizzate.
Costruisci intorno agli eventi Crea, Aggiorna ed Elimina
A seconda dell'operazione 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 non intenzionali quando viene ricevuto uno dei tre tipi di evento.
Per ulteriori informazioni, consulta Tipi di richieste di risorse personalizzate.
Scopri come CloudFormation identifica e sostituisce le risorse
Quando un aggiornamento avvia la sostituzione di 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 rollback, la vecchia risorsa non viene rimossa implicitamente. Quando l'aggiornamento dello stack viene completato con successo, viene inviata una richiesta di evento Elimina con il vecchio ID fisico come identificatore. Se l'aggiornamento dello stack fallisce e si verifica un rollback, il nuovo ID fisico viene inviato nell'evento Elimina.
Usa **PhysicalResourceID ** per identificare in modo univoco le risorse così che, quando viene ricevuto un evento Elimina, durante la sostituzione vengano eliminate solo le risorse corrette.
Progetta le tue funzioni con idempotenza
Una funzione idempotente può essere ripetuta più volte con gli stessi input e restituisce lo stesso risultato di una singola esecuzione. L'idempotenza assicura che i nuovi tentativi, gli aggiornamenti e i rollback 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.
Implementa i tuoi gestori per gestire correttamente i rollback
Quando un'operazione dello stack fallisce, CloudFormation tenta di eseguire dei rollback e ripristinare tutte le risorse allo stato precedente. Ciò porta a comportamenti diversi in base alla sostituzione o meno di una risorsa per via dell'aggiornamento.
Per assicurarti che i rollback vengano completati correttamente, considera quanto segue:
- Evita di rimuovere implicitamente le vecchie risorse finché non viene ricevuto un evento Elimina.
- Usa accustom o Custom Resource Helper sul sito Web di GitHub per aiutarti a seguire le best practice quando usi risorse personalizzate in CloudFormation.
Informazioni correlate
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 5 mesi fa