Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Idempotenza
Le funzioni durevoli forniscono un'idempotenza incorporata per l'avvio dell'esecuzione tramite i nomi delle esecuzioni. Quando si fornisce un nome di esecuzione, Lambda lo utilizza per evitare esecuzioni duplicate e consentire tentativi sicuri delle richieste di invocazione. Per impostazione predefinita, i passaggi hanno una semantica di esecuzione almeno una volta. Durante la riproduzione, l'SDK restituisce risultati controllati senza rieseguire i passaggi completati, ma la logica aziendale deve essere idempotente per gestire potenziali tentativi prima del completamento.
Nota
Le mappature delle sorgenti degli eventi Lambda (ESM) non supportano l'idempotenza al momento del lancio. Pertanto, ogni invocazione (inclusi i tentativi) avvia una nuova esecuzione duratura. Per garantire un'esecuzione idempotente con le mappature delle sorgenti degli eventi, implementate la logica di idempotenza nel codice della funzione, ad esempio con Powertools for, AWS Lambda oppure utilizzate una normale funzione Lambda come proxy (dispatcher) per richiamare una funzione durevole con una chiave di idempotenza (parametro del nome dell'esecuzione).
Nomi di esecuzione
È possibile fornire un nome di esecuzione quando si richiama una funzione durevole. Il nome di esecuzione funge da chiave di idempotenza, consentendo di riprovare in sicurezza le richieste di richiamo senza creare esecuzioni duplicate. Se non fornisci un nome, Lambda genera automaticamente un ID di esecuzione univoco.
I nomi di esecuzione devono essere univoci all'interno dell'account e della regione. Quando richiami una funzione con un nome di esecuzione già esistente, il comportamento di Lambda dipende dallo stato dell'esecuzione esistente e dalla corrispondenza del payload.
Comportamento idempotente
La tabella seguente descrive come Lambda gestisce le richieste di invocazione in base al fatto che tu fornisca un nome di esecuzione, lo stato di esecuzione esistente e se il payload corrisponde:
| Scenario | Nome fornito? | Stato di esecuzione esistente | Payload identico? | Comportamento |
|---|---|---|---|---|
| 1 | No | N/A | N/A | Nuova esecuzione iniziata: Lambda genera un ID di esecuzione univoco e avvia una nuova esecuzione |
| 2 | Sì | Non è mai esistito o la conservazione è scaduta | N/A | Nuova esecuzione iniziata: Lambda avvia una nuova esecuzione con il nome fornito |
| 3 | Sì | In esecuzione | Sì | Avvio idempotente: Lambda restituisce le informazioni di esecuzione esistenti senza avviarne un duplicato. Per le chiamate sincrone, funge da ricollegamento all'esecuzione in esecuzione |
| 4 | Sì | In esecuzione | No | Errore: Lambda restituisce un DurableExecutionAlreadyStartedException errore perché un'esecuzione con questo nome è già in esecuzione con un payload diverso |
| 5 | Sì | Chiuso (riuscito, non riuscito, interrotto o scaduto) | Sì | Avvio idempotente: Lambda restituisce le informazioni di esecuzione esistenti senza avviare una nuova esecuzione. Viene restituito il risultato dell'esecuzione chiusa |
| 6 | Sì | Chiuso (riuscito, non riuscito, interrotto o scaduto) | No | Errore: Lambda restituisce un DurableExecutionAlreadyStartedException errore perché un'esecuzione con questo nome è già stata completata con un payload diverso |
Nota
Gli scenari 3 e 5 dimostrano un comportamento idempotente in cui Lambda gestisce in modo sicuro le richieste di invocazione duplicate restituendo le informazioni di esecuzione esistenti invece di creare duplicati.
Idempotenza graduale
Per impostazione predefinita, i passaggi hanno una semantica di esecuzione almeno una volta. Quando la funzione viene riprodotta dopo un'attesa, un callback o un errore, l'SDK confronta ogni passaggio con il registro dei checkpoint. Per i passaggi già completati, l'SDK restituisce il risultato del checkpoint senza rieseguire la logica dei passaggi. Tuttavia, se un passaggio fallisce o la funzione viene interrotta prima del completamento del passaggio, il passaggio potrebbe essere eseguito più volte.
La logica aziendale all'interno delle fasi deve essere idempotente per gestire potenziali tentativi. Usa le chiavi di idempotenza per garantire che operazioni come i pagamenti o le scritture sul database vengano eseguite una sola volta, anche se il passaggio viene ripetuto. Consulta Idempotency and Retries nella AWS Durable Execution SDK Developer Guide per dettagli su come codificare l'idempotenza.