View a markdown version of this page

Memanggil fungsi Lambda yang tahan lama - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memanggil fungsi Lambda yang tahan lama

Fungsi Lambda yang tahan lama mendukung metode pemanggilan yang sama dengan fungsi Lambda standar. Anda dapat memanggil fungsi tahan lama secara sinkron, asinkron, atau melalui pemetaan sumber peristiwa. Proses pemanggilan identik dengan fungsi standar, tetapi fungsi tahan lama memberikan kemampuan tambahan untuk eksekusi yang berjalan lama dan manajemen status otomatis.

Metode pemanggilan

Panggilan sinkron: Memanggil fungsi tahan lama dan tunggu respons. Pemanggilan sinkron dibatasi oleh Lambda hingga 15 menit (atau kurang, tergantung pada fungsi yang dikonfigurasi dan batas waktu eksekusi). Gunakan pemanggilan sinkron saat Anda membutuhkan hasil segera atau saat mengintegrasikan dengan API dan layanan yang mengharapkan respons. Anda dapat menggunakan operasi tunggu untuk perhitungan yang efisien tanpa mengganggu penelepon—pemanggilan menunggu seluruh eksekusi tahan lama selesai. Untuk eksekusi idempotent dimulai, gunakan parameter nama eksekusi seperti yang dijelaskan dalam Idempotensi.

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

Panggilan asinkron: An trekan acara untuk diproses tanpa menunggu respons. Lambda menempatkan acara dalam antrian dan segera kembali. Pemanggilan asinkron mendukung durasi eksekusi hingga 1 tahun. Gunakan pemanggilan asinkron untuk skenario api dan lupakan atau saat pemrosesan dapat terjadi di latar belakang. Untuk eksekusi idempotent dimulai, gunakan parameter nama eksekusi seperti yang dijelaskan dalam Idempotensi.

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

Pemetaan sumber peristiwa: Konfigurasikan Lambda untuk secara otomatis memanggil fungsi tahan lama Anda saat rekaman tersedia dari streaming atau layanan berbasis antrian seperti Amazon SQS, Kinesis, atau DynamoDB. Pemetaan sumber peristiwa melakukan polling terhadap sumber peristiwa dan memanggil fungsi Anda dengan kumpulan catatan. Untuk detail tentang menggunakan pemetaan sumber peristiwa dengan fungsi tahan lama, termasuk batas durasi eksekusi, lihat Pemetaan sumber peristiwa dengan fungsi tahan lama.

Untuk detail lengkap tentang setiap metode pemanggilan, lihat pemanggilan sinkron dan pemanggilan asinkron.

catatan

Fungsi tahan lama mendukung antrean huruf mati (DLQ) untuk penanganan kesalahan, tetapi tidak mendukung tujuan Lambda. Konfigurasikan DLQ untuk menangkap catatan dari pemanggilan yang gagal.

Persyaratan ARN yang memenuhi syarat

Fungsi tahan lama memerlukan pengenal yang memenuhi syarat untuk pemanggilan. Anda harus memanggil fungsi tahan lama menggunakan nomor versi, alias, atau$LATEST. Anda dapat menggunakan ARN yang memenuhi syarat penuh atau nama fungsi dengan akh version/alias iran. Anda tidak dapat menggunakan pengenal yang tidak memenuhi syarat (tanpa versi atau akhiran alias).

Pemanggilan yang valid:

# 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

Pemanggilan tidak valid:

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

Persyaratan ini memastikan bahwa eksekusi yang tahan lama tetap konsisten sepanjang siklus hidupnya. Ketika eksekusi tahan lama dimulai, itu disematkan ke versi fungsi yang memulainya. Jika fungsi Anda berhenti dan dilanjutkan beberapa jam atau hari kemudian, Lambda akan memanggil versi yang sama, sehingga menerbitkan versi baru hanya memengaruhi eksekusi baru. Demikian pula, saat Anda memperbarui alias, eksekusi baru menggunakan versi baru, dan eksekusi dalam proses berlanjut pada versi yang dimulai.

Eksek usi $LATEST dapat dilanjutkan pada kode yang diperbarui

Eksekusi yang dimulai dengan ku $LATEST alifikasi tidak disematkan ke salinan tetap kode Anda. Jika Anda memperbarui kode fungsi Anda saat eksekusi dijeda, eksekusi dilanjutkan pada kode baru daripada versi yang dimulai.

Kode Anda mungkin tidak lagi memproses status eksekusi yang disimpan dengan cara yang sama, yang menyebabkan kesalahan non-determinisme atau kegagalan diam. Untuk informasi selengkapnya tentang fungsi penulisan yang diputar ulang dengan aman, lihatVersi fungsi dan alias.

Praktik terbaik

Gunakan versi bernomor atau alias untuk fungsi tahan lama produksi daripada$LATEST. Versi bernomor tidak dapat diubah dan mendukung pemutaran ulang deterministik. Secara opsional, alias menyediakan referensi stabil yang dapat Anda perbarui untuk menunjuk ke versi baru tanpa mengubah kode pemanggilan. Gunakan $LATEST hanya untuk pembuatan prototipe atau untuk mempersingkat waktu penerapan selama pengembangan, karena eksekusi mungkin tidak diputar ulang dengan benar jika kode berubah saat dijalankan.

Memahami siklus hidup eksekusi

Saat Anda memanggil fungsi tahan lama, Lambda menciptakan eksekusi tahan lama yang dapat menjangkau beberapa pemanggilan fungsi:

  1. Pemanggilan awal: Permintaan pemanggilan Anda menciptakan eksekusi baru yang tahan lama. Lambda menetapkan ID eksekusi unik dan mulai memproses.

  2. Eksekusi dan checkpointing: Saat fungsi Anda menjalankan operasi yang tahan lama, SDK membuat pos pemeriksaan yang melacak kemajuan.

  3. Penangguhan (jika diperlukan): Jika fungsi Anda menggunakan penantian tahan lama, seperti wait atau, atau percobaan ulang langkah otomatiswaitForCallback, Lambda menangguhkan eksekusi dan berhenti mengisi daya untuk waktu komputasi.

  4. Dimulai kembali: Ketika tiba waktunya untuk melanjutkan (termasuk setelah percobaan ulang), Lambda memanggil fungsi Anda lagi. SDK memutar ulang log pos pemeriksaan dan melanjutkan dari tempat eksekusi dijeda.

  5. Penyelesaian: Ketika fungsi Anda mengembalikan hasil akhir atau melempar kesalahan yang tidak ditangani, eksekusi tahan lama selesai.

Untuk pemanggilan sinkron, pemanggil menunggu seluruh eksekusi tahan lama selesai, termasuk operasi tunggu apa pun. Jika eksekusi melebihi batas waktu pemanggilan (15 menit atau kurang), waktu pemanggilan habis. Untuk pemanggilan asinkron, Lambda segera kembali dan eksekusi berlanjut secara independen. Gunakan API eksekusi tahan lama untuk melacak status eksekusi dan mengambil hasil akhir.

Memanggil dari kode aplikasi

Gunakan AWS SDK untuk memanggil fungsi tahan lama dari kode aplikasi Anda. Proses pemanggilan identik dengan fungsi standar:

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'}) )

Permohonan yang dirantai

Fungsi tahan lama dapat memanggil fungsi tahan lama dan tidak tahan lama lainnya menggunakan invoke operasi dari. DurableContext Ini menciptakan pemanggilan beraneka di mana fungsi panggilan menunggu (menangguhkan) untuk menyelesaikan fungsi yang dipanggil:

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)}

Pemanggilan beranTAI membuat pos pemeriksaan dalam fungsi panggilan. Jika fungsi panggilan terganggu, fungsi tersebut dilanjutkan dari pos pemeriksaan dengan hasil fungsi yang dipanggil, tanpa memanggil kembali fungsi tersebut.

catatan

Cross-account pemanggilan beranTAI tidak didukung. Fungsi yang dipanggil harus berada di AWS akun yang sama dengan fungsi panggilan.