View a markdown version of this page

Creazione di funzioni durevoli Lambda - AWS Lambda

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à.

Creazione di funzioni durevoli Lambda

Per iniziare a usare le funzioni Lambda durable, usa la console Lambda per creare una funzione durevole. In pochi minuti, puoi creare e implementare una funzione durevole che utilizza passaggi e attese per dimostrare l'esecuzione basata su checkpoint.

Puoi anche creare funzioni durevoli utilizzando AWS CLI or infrastructure as code (IaC).

Man mano che svolgerai il tutorial, imparerai i concetti fondamentali delle funzioni durevoli, come usare l'DurableContextoggetto, creare checkpoint con passaggi e sospendere l'esecuzione con attese. Scoprirai anche come funziona la riproduzione quando la funzione riprende dopo un'attesa.

Per semplificare le cose, questo tutorial ti mostra come creare la tua funzione usando Python o il runtime. Node.js Con questi linguaggi interpretati, puoi modificare il codice della funzione direttamente nell'editor del codice integrato della console.

Nota

Le funzioni Durable attualmente supportano i runtime Python, Node.js (JavaScript/TypeScript) e Java, nonché le immagini dei contenitori (OCI). Per un elenco completo delle versioni di runtime supportate e delle opzioni di immagine del contenitore, vedi Runtime supportati per funzioni durevoli. Per ulteriori informazioni sull'utilizzo delle immagini dei container con Lambda, vedi Creazione di immagini di container Lambda nella Lambda Developer Guide.

Suggerimento

Per scoprire come creare soluzioni serverless, consulta la Guida allo sviluppo serverless.

Crea una funzione durevole Lambda con la console

In questo esempio, la tua funzione durevole elabora un ordine in più passaggi con checkpoint automatico. La funzione accetta un oggetto JSON contenente un ID dell'ordine, convalida l'ordine, elabora il pagamento e conferma l'ordine. Ogni passaggio viene controllato automaticamente, quindi se la funzione viene interrotta, riprende dall'ultimo passaggio completato.

La funzione dimostra anche un'operazione di attesa, sospendendo l'esecuzione per un breve periodo per simulare l'attesa di una conferma esterna.

Per creare una funzione duratura con la console
  1. Aprire la pagina Funzioni della console Lambda.

  2. Scegli Crea funzione.

  3. Scegli Crea da zero.

  4. Nel riquadro Informazioni base, per Nome funzione inserisci myDurableFunction.

  5. Per Runtime, scegli Node.js 24 o Python 3.14.

  6. Seleziona Abilita esecuzione duratura.

Lambda crea la tua funzione durevole con un ruolo di esecuzione che include le autorizzazioni per le operazioni sui checkpoint (lambda:CheckpointDurableExecutione). lambda:GetDurableExecutionState

Nota

I runtime Lambda includono il Durable Execution SDK, in modo da poter testare le funzioni durevoli senza dipendenze tra i pacchetti. Tuttavia, consigliamo di includere l'SDK nel pacchetto di distribuzione per la produzione. Ciò garantisce la coerenza delle versioni ed evita potenziali aggiornamenti di runtime che potrebbero influire sulla tua funzione.

Usa l'editor di codice integrato nella console per aggiungere il tuo codice funzionale durevole.

Node.js
Per modificare il codice nella console
  1. Scegli la scheda Codice.

    Nell'editor di codice integrato della console, dovresti vedere il codice della funzione creato da Lambda. Se non vedi la scheda index.js nell'editor di codice, seleziona index.js in Esplora file, come illustrato nel diagramma seguente.

    Diagramma che mostra l'editor di codice della console e il file index.mjs nel file explorer.
  2. Incolla il codice seguente nella scheda index.js, sostituendo il codice creato da Lambda.

    import { withDurableExecution, } from "@aws/durable-execution-sdk-js"; export const handler = withDurableExecution( async (event, context) => { const orderId = event.orderId; // Step 1: Validate order const validationResult = await context.step(async (stepContext) => { stepContext.logger.info(`Validating order ${orderId}`); return { orderId, status: "validated" }; }); // Step 2: Process payment const paymentResult = await context.step(async (stepContext) => { stepContext.logger.info(`Processing payment for order ${orderId}`); return { orderId, status: "paid", amount: 99.99 }; }); // Wait for 10 seconds to simulate external confirmation await context.wait({ seconds: 10 }); // Step 3: Confirm order const confirmationResult = await context.step(async (stepContext) => { stepContext.logger.info(`Confirming order ${orderId}`); return { orderId, status: "confirmed" }; }); return { orderId: orderId, status: "completed", steps: [validationResult, paymentResult, confirmationResult] }; } );
  3. Nella sezione DEPLOY, scegli Implementa per aggiornare il codice della tua funzione:

    Pulsante Implementa nell'editor di codice della console Lambda
Comprendere il codice della funzione durevole

Prima di passare alla fase successiva, esaminiamo il codice funzione e comprendiamo i concetti chiave delle funzioni durevoli.

  • L'withDurableExecutioninvolucro:

    La tua funzione duratura è confezionata con. withDurableExecution Questo wrapper consente un'esecuzione duratura fornendo l'DurableContextoggetto e gestendo le operazioni sui checkpoint.

  • L'oggetto: DurableContext

    Invece del contesto Lambda standard, la tua funzione riceve unDurableContext. Questo oggetto fornisce metodi per operazioni durature come step() e wait() che creano checkpoint.

  • Passaggi e punti di controllo:

    Ogni context.step() chiamata crea un checkpoint prima e dopo l'esecuzione. Se la funzione viene interrotta, riprende dall'ultimo checkpoint completato. La funzione non riesegue i passaggi completati. Utilizza invece i risultati memorizzati.

  • Operazioni di attesa:

    La context.wait() chiamata sospende l'esecuzione senza consumare risorse di calcolo. Al termine dell'attesa, Lambda richiama nuovamente la funzione e riproduce il registro del checkpoint, sostituendo i valori memorizzati con i passaggi completati.

  • Meccanismo di replay:

    Quando la funzione riprende dopo un'attesa o un'interruzione, Lambda esegue il codice dall'inizio. Tuttavia, i passaggi completati non vengono rieseguiti. Lambda riproduce i risultati dal registro dei checkpoint. Ecco perché il codice deve essere deterministico.

Python
Per modificare il codice nella console
  1. Scegli la scheda Codice.

    Nell'editor di codice integrato della console, dovresti vedere il codice della funzione creato da Lambda. Se non vedi la scheda lambda_function.py nell'editor di codice, seleziona lambda_function.py in Esplora file, come illustrato nel diagramma seguente.

    Diagramma che mostra l'editor di codice della console e il file lambda_function.py nel file explorer.
  2. Incolla il codice seguente nella scheda lambda_function.py, sostituendo il codice creato da Lambda.

    from aws_durable_execution_sdk_python import ( DurableContext, durable_execution, durable_step, ) from aws_durable_execution_sdk_python.config import Duration @durable_step def validate_order(step_context, order_id): step_context.logger.info(f"Validating order {order_id}") return {"orderId": order_id, "status": "validated"} @durable_step def process_payment(step_context, order_id): step_context.logger.info(f"Processing payment for order {order_id}") return {"orderId": order_id, "status": "paid", "amount": 99.99} @durable_step def confirm_order(step_context, order_id): step_context.logger.info(f"Confirming order {order_id}") return {"orderId": order_id, "status": "confirmed"} @durable_execution def lambda_handler(event, context: DurableContext): order_id = event['orderId'] # Step 1: Validate order validation_result = context.step(validate_order(order_id)) # Step 2: Process payment payment_result = context.step(process_payment(order_id)) # Wait for 10 seconds to simulate external confirmation context.wait(Duration.from_seconds(10)) # Step 3: Confirm order confirmation_result = context.step(confirm_order(order_id)) return { "orderId": order_id, "status": "completed", "steps": [validation_result, payment_result, confirmation_result] }
  3. Nella sezione DEPLOY, scegli Implementa per aggiornare il codice della tua funzione:

    Pulsante Implementa nell'editor di codice della console Lambda
Comprendere il codice della funzione durevole

Prima di passare alla fase successiva, esaminiamo il codice funzione e comprendiamo i concetti chiave delle funzioni durevoli.

  • Il @durable_execution decoratore:

    La tua funzione di gestione è decorata con. @durable_execution Questo decoratore consente un'esecuzione duratura fornendo l'DurableContextoggetto e gestendo le operazioni sui checkpoint.

  • Il @durable_step decoratore:

    Ogni funzione a gradino è decorata con @durable_step Questo decoratore contrassegna la funzione come un passaggio duraturo che crea punti di controllo.

  • L'DurableContextoggetto:

    Invece del contesto Lambda standard, la tua funzione riceve unDurableContext. Questo oggetto fornisce metodi per operazioni durature come step() e wait() che creano checkpoint.

  • Passaggi e punti di controllo:

    Ogni context.step() chiamata crea un checkpoint prima e dopo l'esecuzione. Se la funzione viene interrotta, riprende dall'ultimo checkpoint completato. La funzione non riesegue i passaggi completati. Utilizza invece i risultati memorizzati.

  • Operazioni di attesa:

    La context.wait() chiamata sospende l'esecuzione senza consumare risorse di calcolo. Al termine dell'attesa, Lambda richiama nuovamente la funzione e riproduce il registro del checkpoint, sostituendo i valori memorizzati con i passaggi completati.

  • Python SDK è sincrono:

    Nota che Python SDK non utilizza. await Tutte le operazioni durevoli sono chiamate di metodo sincrone.

Richiama la funzione durable utilizzando l'editor di codice della console

Quando non viene specificata (o pubblicata) alcuna versione esplicita, la console richiama la funzione durable utilizzando il $LATEST qualificatore di versione. Tuttavia, per l'esecuzione deterministica del codice, è necessario utilizzare sempre un ARN qualificato che punti a una versione stabile.

Per pubblicare una versione della tua funzione
  1. Scegli la scheda Versioni.

  2. Selezionare Publish new version (Pubblica nuova versione).

  3. Per la descrizione della versione, inserisci Initial version (opzionale).

  4. Seleziona Pubblica.

  5. Lambda crea la versione 1 della funzione. Nota che la funzione ARN ora include alla fine, :1 a indicare che si tratta della versione 1.

Ora create un evento di test da inviare alla vostra funzione. L'evento è un documento in formato JSON contenente un ID dell'ordine.

Per creare un evento di test
  1. Nella sezione TEST EVENTS dell'editor di codice della console, scegli Crea evento di test.

    Pulsante Crea evento di test nell'editor di codice della console Lambda
  2. Per Event name (Nome evento), immettere myTestEvent.

  3. Nella sezione JSON dell'evento, sostituisci il codice JSON predefinito con il seguente:

    { "orderId": "order-12345" }
  4. Scegli Save (Salva).

Per testare la tua funzione durevole e visualizzarne l'esecuzione

Nella sezione TEST EVENTS dell'editor di codice della console, scegli l'icona di esecuzione accanto all'evento di test:

Esegui il pulsante dell'evento di test nell'editor di codice della console Lambda.

La tua funzione durevole inizia l'esecuzione. Poiché include un'attesa di 10 secondi, la chiamata iniziale viene completata rapidamente e la funzione riprende dopo il periodo di attesa. È possibile visualizzare l'avanzamento dell'esecuzione nella scheda Esecuzioni durature.

Per visualizzare l'esecuzione della funzione durevole
  1. Scegli la scheda Esecuzioni durevoli.

  2. Trova la tua esecuzione nell'elenco. L'esecuzione mostra lo stato corrente (In esecuzione, Riuscito o Non riuscito).

  3. Scegli l'ID di esecuzione per visualizzare i dettagli, tra cui:

    • Cronologia di esecuzione che mostra quando ogni passaggio è stato completato

    • Cronologia dei checkpoint

    • Periodi di attesa

    • Risultati delle fasi

Puoi anche visualizzare i log della tua funzione in CloudWatch Logs per vedere l'output della console di ogni passaggio.

Per visualizzare i record di chiamata della funzione in Logs CloudWatch
  1. Apri la pagina dei gruppi di log della CloudWatch console.

  2. Scegli il nome del gruppo di log per la funzione (/aws/lambda/myDurableFunction).

  3. Scorri verso il basso e scegli il flusso di log per le invocazioni delle funzioni che desideri esaminare.

    Elencare i flussi di log per una funzione Lambda.

    Dovresti visualizzare le voci di registro per ogni chiamata della tua funzione, inclusa l'esecuzione iniziale e il replay dopo l'attesa.

Nota

Quando si utilizza il logger da DurableContext (ad esempio context.logger orstepContext.logger), i log vengono visualizzati anche nelle visualizzazioni Durable Execution e Step della console Lambda. Il caricamento di questi log può richiedere alcuni istanti.

Eliminazione

Quando hai finito di usare la funzione durable di esempio, cancellala. Puoi anche eliminare il gruppo di log che memorizza i log della funzione e il ruolo di esecuzione creato dalla console.

Per eliminare la funzione Lambda
  1. Aprire la pagina Functions (Funzioni) della console Lambda.

  2. Selezionare la funzione creata.

  3. Scegliere Operazioni, Elimina.

  4. Inserisci confirm nel campo di immissione del testo, quindi scegli Elimina.

Come eliminare il gruppo di log
  1. Apri la pagina Log groups page (Pagina dei gruppi di log) della console CloudWatch.

  2. Scegli il gruppo di log della funzione (/aws/lambda/myDurableFunction).

  3. Scegli Actions (Azioni), Delete log group(s) (Elimina gruppo/i di log).

  4. Nella finestra di dialogo Delete log group(s) (Elimina gruppo/i di log) scegli Delete (Elimina).

Come eliminare il ruolo di esecuzione
  1. Apri la pagina Ruoli della console AWS Identity and Access Management (IAM).

  2. Seleziona il ruolo di esecuzione della funzione (ad esempio, myDurableFunction-role-31exxmpl).

  3. Scegli Elimina.

  4. Nella finestra di dialogo Elimina ruolo, immetti il nome del ruolo, quindi scegli Elimina.

Risorse aggiuntive e fasi successive

Ora che hai creato e testato una funzione semplice e duratura utilizzando la console, procedi nel seguente modo:

  • Scopri i casi d'uso più comuni delle funzioni durevoli, tra cui transazioni distribuite, elaborazione degli ordini e flussi di lavoro di revisione umana. Vedi esempi.

  • Scopri come monitorare le esecuzioni durature delle funzioni con CloudWatch metriche e cronologia delle esecuzioni. Vedi Monitoraggio e debug.

  • Scopri come richiamare funzioni durevoli in modo sincrono e asincrono e come gestire le esecuzioni di lunga durata. Vedi Richiamo di funzioni durevoli.

  • Segui le best practice per scrivere codice deterministico, gestire le dimensioni dei checkpoint e ottimizzare i costi. Consulta le best practice.

  • Scopri come testare funzioni durevoli localmente e nel cloud. Vedi Test delle funzioni durevoli.

  • Confronta le funzioni durevoli con Step Functions per capire quando ogni approccio è più efficace. Vedi Funzioni durevoli o Funzioni Step.