View a markdown version of this page

Richiamo di funzioni Lambda durevoli - 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à.

Richiamo di funzioni Lambda durevoli

Le funzioni Durable Lambda supportano gli stessi metodi di richiamo delle funzioni Lambda standard. È possibile richiamare funzioni durevoli in modo sincrono, asincrono o tramite mappature delle sorgenti degli eventi. Il processo di richiamo è identico alle funzioni standard, ma le funzioni durevoli forniscono funzionalità aggiuntive per esecuzioni di lunga durata e gestione automatica dello stato.

Metodi di richiamo

Invocazione sincrona: richiama una funzione duratura e attendi la risposta. Le chiamate sincrone sono limitate da Lambda a 15 minuti (o meno, a seconda della funzione configurata e del timeout di esecuzione). Usa l'invocazione sincrona quando hai bisogno di risultati immediati o quando ti integri con API e servizi che prevedono una risposta. È possibile utilizzare le operazioni di attesa per un calcolo efficiente senza interrompere il chiamante: l'invocazione attende il completamento dell'intera esecuzione duratura. Per un avvio idempotente dell'esecuzione, utilizzate il parametro Execution Name come descritto in Idempotency. Idempotenza

aws lambda invoke \ --function-name my-durable-function:1 \ --cli-binary-format raw-in-base64-out \ --payload '{"orderId": "12345"}' \ response.json

Invocazione asincrona: mette in coda un evento per l'elaborazione senza attendere una risposta. Lambda mette l'evento in coda e ritorna immediatamente. Le chiamate asincrone supportano durate di esecuzione fino a 1 anno. Usa l'invocazione asincrona per scenari fire-and-forget o quando l'elaborazione può avvenire in background. Per un avvio idempotente dell'esecuzione, utilizzate il parametro Execution Name come descritto in Idempotency. Idempotenza

aws lambda invoke \ --function-name my-durable-function:1 \ --invocation-type Event \ --cli-binary-format raw-in-base64-out \ --payload '{"orderId": "12345"}' \ response.json

Mappature delle sorgenti degli eventi: configura Lambda per richiamare automaticamente la tua funzione durevole quando i record sono disponibili da servizi basati su stream o code come Amazon SQS, Kinesis o DynamoDB. Le mappature delle sorgenti degli eventi eseguono il polling della sorgente dell'evento e richiamano la tua funzione con batch di record. Per informazioni dettagliate sull'utilizzo delle mappature delle sorgenti di eventi con funzioni durevoli, inclusi i limiti di durata dell'esecuzione, vedete Mappature delle sorgenti di eventi con funzioni durevoli.

Per i dettagli completi su ciascun metodo di chiamata, vedere invocazione sincrona e chiamata asincrona. Richiamo di una funzione Lambda in modo sincrono

Nota

Le funzioni Durable supportano le code di lettere morte (DLQ) per la gestione degli errori, ma non supportano le destinazioni Lambda. Configura un DLQ per acquisire i record delle chiamate non riuscite.

Requisito ARN qualificati

Le funzioni durevoli richiedono identificatori qualificati per l'invocazione. È necessario richiamare funzioni durevoli utilizzando un numero di versione, un alias o. $LATEST È possibile utilizzare un ARN completo o un nome di funzione con suffisso. version/alias Non è possibile utilizzare un identificatore non qualificato (senza un suffisso di versione o alias).

Invocazioni valide:

# Using full ARN with version number arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:1 # Using full ARN with alias arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:prod # Using full ARN with $LATEST arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:$LATEST # Using function name with version number my-durable-function:1 # Using function name with alias my-durable-function:prod

Chiamate non valide:

# Unqualified ARN (not allowed) arn:aws:lambda:us-east-1:123456789012:function:my-durable-function # Unqualified function name (not allowed) my-durable-function

Questo requisito garantisce che le esecuzioni durature rimangano coerenti per tutto il loro ciclo di vita. Quando viene avviata un'esecuzione duratura, viene aggiunta alla versione della funzione che l'ha avviata. Se la funzione si interrompe e riprende ore o giorni dopo, Lambda richiama la stessa versione, quindi la pubblicazione di una nuova versione ha effetto solo sulle nuove esecuzioni. Analogamente, quando si aggiorna un alias, le nuove esecuzioni utilizzano la nuova versione e le esecuzioni in corso continuano sulla versione iniziale.

Le esecuzioni di $LATEST possono riprendere con il codice aggiornato

Le esecuzioni avviate con il $LATEST qualificatore non vengono aggiunte a una copia fissa del codice. Se si aggiorna il codice della funzione mentre un'esecuzione è in pausa, l'esecuzione riprende sul nuovo codice anziché sulla versione in cui è stata avviata.

Il codice potrebbe non elaborare più lo stato di esecuzione salvato nello stesso modo, causando errori di non determinismo o errori silenziosi. Per ulteriori informazioni sulla scrittura di funzioni che possono essere riprodotte in modo sicuro, consulta. Versioni e alias delle funzioni

Best practice

Utilizzate versioni numerate o alias per le funzioni durevoli di produzione anziché. $LATEST Le versioni numerate sono immutabili e supportano la riproduzione deterministica. Facoltativamente, gli alias forniscono un riferimento stabile che è possibile aggiornare in modo che punti a nuove versioni senza modificare il codice di richiamo. $LATESTUtilizzateli solo per la prototipazione o per abbreviare i tempi di distribuzione durante lo sviluppo, poiché le esecuzioni potrebbero non riprodursi correttamente se il codice cambia durante l'esecuzione.

Comprendere il ciclo di vita dell'esecuzione

Quando si richiama una funzione durevole, Lambda crea un'esecuzione duratura che può includere più invocazioni di funzioni:

  1. Richiamata iniziale: la richiesta di chiamata crea una nuova esecuzione duratura. Lambda assegna un ID di esecuzione univoco e avvia l'elaborazione.

  2. Esecuzione e checkpoint: man mano che la funzione esegue operazioni durature, l'SDK crea checkpoint che tengono traccia dei progressi.

  3. Sospensione (se necessario): se la funzione utilizza attese durature, ad esempio or, wait o ripetizioni automatichewaitForCallback, Lambda sospende l'esecuzione e interrompe l'addebito del tempo di calcolo.

  4. Ripresa: quando è il momento di riprendere (anche dopo i tentativi), Lambda richiama nuovamente la funzione. L'SDK riproduce il registro dei checkpoint e riprende dal punto in cui l'esecuzione è stata interrotta.

  5. Completamento: quando la funzione restituisce un risultato finale o genera un errore non gestito, l'esecuzione duratura viene completata.

Per le chiamate sincrone, il chiamante attende il completamento dell'intera esecuzione durevole, incluse eventuali operazioni di attesa. Se l'esecuzione supera il timeout di chiamata (15 minuti o meno), l'invocazione scade. Per le chiamate asincrone, Lambda ritorna immediatamente e l'esecuzione continua in modo indipendente. Utilizza le API di esecuzione durevoli per tenere traccia dello stato di esecuzione e recuperare i risultati finali.

Richiamo dal codice dell'applicazione

Usa gli AWS SDK per richiamare funzioni durevoli dal codice dell'applicazione. Il processo di richiamo è identico alle funzioni standard:

TypeScript
import { LambdaClient, InvokeCommand } from '@aws-sdk/client-lambda'; const client = new LambdaClient({}); // Synchronous invocation const response = await client.send(new InvokeCommand({ FunctionName: 'arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:1', Payload: JSON.stringify({ orderId: '12345' }) })); const result = JSON.parse(Buffer.from(response.Payload!).toString()); // Asynchronous invocation await client.send(new InvokeCommand({ FunctionName: 'arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:1', InvocationType: 'Event', Payload: JSON.stringify({ orderId: '12345' }) }));
Python
import boto3 import json client = boto3.client('lambda') # Synchronous invocation response = client.invoke( FunctionName='arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:1', Payload=json.dumps({'orderId': '12345'}) ) result = json.loads(response['Payload'].read()) # Asynchronous invocation client.invoke( FunctionName='arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:1', InvocationType='Event', Payload=json.dumps({'orderId': '12345'}) )

Invocazioni concatenate

Le funzioni durevoli possono richiamare altre funzioni durevoli e non durevoli utilizzando l'operazione da. invoke DurableContext Questo crea un'invocazione concatenata in cui la funzione chiamante attende (sospende) il completamento della funzione richiamata:

TypeScript
export const handler = withDurableExecution( async (event: any, context: DurableContext) => { // Invoke another durable function and wait for result const result = await context.invoke( 'process-order', 'arn:aws:lambda:us-east-1:123456789012:function:order-processor:1', { orderId: event.orderId } ); return { statusCode: 200, body: JSON.stringify(result) }; } );
Python
@durable_execution def handler(event, context: DurableContext): # Invoke another durable function and wait for result result = context.invoke( 'arn:aws:lambda:us-east-1:123456789012:function:order-processor:1', {'orderId': event['orderId']}, name='process-order' ) return {'statusCode': 200, 'body': json.dumps(result)}

Le invocazioni concatenate creano un checkpoint nella funzione chiamante. Se la funzione chiamante viene interrotta, riprende dal checkpoint con il risultato della funzione richiamata, senza richiamare nuovamente la funzione.

Nota

Cross-account le invocazioni concatenate non sono supportate. La funzione richiamata deve trovarsi nello stesso AWS account della funzione chiamante.