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 Lambda durevoli supportano gli stessi metodi di invocazione delle funzioni Lambda standard. È possibile richiamare funzioni durevoli in modo sincrono, asincrono o tramite mappature delle sorgenti degli eventi. Il processo di invocazione è identico alle funzioni standard, ma le funzioni durevoli forniscono funzionalità aggiuntive per le esecuzioni di lunga durata e la gestione automatica dello stato.

Metodi di invocazione

Invocazione sincrona: richiama una funzione durevole e attendi la risposta. Le chiamate sincrone sono limitate dalla Lambda a 15 minuti (o meno, a seconda della funzione configurata e del timeout di esecuzione). Utilizza la chiamata sincrona quando hai bisogno di risultati immediati o quando esegui l'integrazione con servizi che prevedono una risposta. APIs È possibile utilizzare le operazioni di attesa per un calcolo efficiente senza interrompere il chiamante: la chiamata attende il completamento dell'intera esecuzione durevole. Per gli avvii di esecuzione idempotenti, utilizzate il parametro del nome dell'esecuzione come descritto in Idempotency.

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

Richiamata 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. Utilizza la chiamata asincrona per scenari o quando l'elaborazione può avvenire in background. fire-and-forget Per avvii di esecuzione idempotenti, utilizzate il parametro del nome dell'esecuzione come descritto in 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 duratura quando i record sono disponibili da servizi basati su stream o code come Amazon SQS, Kinesis o DynamoDB. Le mappature delle sorgenti degli eventi analizzano l'origine dell'evento e richiamano la funzione con batch di record. Per i dettagli sull'utilizzo delle mappature delle sorgenti degli eventi con funzioni durevoli, inclusi i limiti di durata dell'esecuzione, consulta Mappature delle sorgenti degli eventi con funzioni durevoli.

Per dettagli completi su ciascun metodo di invocazione, vedere invocazione sincrona e chiamata asincrona.

Nota

Le funzioni durevoli supportano dead-letter queues (DLQs) per la gestione degli errori, ma non supportano le destinazioni Lambda. Configura un DLQ per acquisire i record delle chiamate non riuscite.

ARNs Requisito qualificato

Le funzioni durevoli richiedono identificatori qualificati per la chiamata. È necessario richiamare funzioni durevoli utilizzando un numero di versione, un alias o. $LATEST È possibile utilizzare un ARN completo o un nome di funzione con version/alias suffisso. Non è possibile utilizzare un identificatore non qualificato (senza una versione o un suffisso di 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

Invocazioni 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 durevoli rimangano coerenti per tutto il loro ciclo di vita. Quando inizia un'esecuzione durevole, viene associata alla versione della funzione specifica. Se la funzione viene messa in pausa e riprende ore o giorni dopo, Lambda richiama la stessa versione che ha avviato l'esecuzione, garantendo la coerenza del codice nell'intero flusso di lavoro.

Best practice

Utilizza versioni numerate o alias per funzioni durevoli di produzione anziché. $LATEST Le versioni numerate sono immutabili e garantiscono una riproduzione deterministica. Facoltativamente, gli alias forniscono un riferimento stabile che è possibile aggiornare in modo da puntare a nuove versioni senza modificare il codice di invocazione. Quando si aggiorna un alias, le nuove esecuzioni utilizzano la nuova versione, mentre le esecuzioni in corso continuano con la versione originale. È possibile utilizzarla $LATEST per la prototipazione o per abbreviare i tempi di implementazione durante lo sviluppo, tenendo presente che le esecuzioni potrebbero non essere riprodotte correttamente (o addirittura fallire) se il codice sottostante cambia durante l'esecuzione.

Comprendere il ciclo di vita dell'esecuzione

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

  1. Richiamata iniziale: la richiesta di invocazione crea una nuova esecuzione durevole. 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 necessaria): se la funzione utilizza attese durature, ad esempio or, wait o ripetizioni automatiche dei passaggiwaitForCallback, Lambda sospende l'esecuzione e interrompe l'addebito del tempo di elaborazione.

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

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

Per le chiamate sincrone, il chiamante attende il completamento dell'intera esecuzione durevole, comprese le eventuali operazioni di attesa. Se l'esecuzione supera il timeout di chiamata (15 minuti o meno), la chiamata scade. Per le chiamate asincrone, Lambda ritorna immediatamente e l'esecuzione continua indipendentemente. Usa l'esecuzione durevole APIs per tenere traccia dello stato di esecuzione e recuperare i risultati finali.

Richiamo dal codice dell'applicazione

Utilizzate il AWS SDKs per richiamare funzioni durevoli dal codice dell'applicazione. Il processo di invocazione è 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 una chiamata concatenata in cui la funzione chiamante attende (sospende) il completamento della funzione invocata:

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 invocata, senza richiamare nuovamente la funzione.

Nota

Le chiamate concatenate tra più account non sono supportate. La funzione richiamata deve trovarsi nello stesso AWS account della funzione chiamante.