Saat Anda memanggil fungsi secara asinkron, Function Compute mengantri permintaan dan segera mengembalikan respons tanpa perlu menunggu hingga fungsi selesai berjalan. Untuk menyimpan catatan permintaan yang gagal setelah melebihi jumlah maksimum percobaan ulang atau memberi notifikasi kepada layanan downstream mengenai hasil eksekusi, Anda dapat mengonfigurasi tujuan. Setelah dikonfigurasi, Function Compute secara otomatis mengirimkan detail hasil pemanggilan ke layanan yang ditentukan.
Cara kerja
Diagram berikut menunjukkan cara kerja tujuan.
Kasus penggunaan
Simpan event yang dibuang untuk diproses lebih lanjut
Jika pemanggilan asinkron gagal setelah semua percobaan ulang sesuai kebijakan Anda, Function Compute akan membuang event tersebut. Dengan mengonfigurasi tujuan untuk kegagalan, Anda dapat membuat Function Compute secara otomatis mengirimkan konteks pemanggilan yang gagal ke layanan pesan, seperti ApsaraMQ for RocketMQ, untuk analisis atau pemrosesan lebih lanjut. Anda juga dapat menetapkan fungsi lain sebagai tujuan. Function Compute secara otomatis mengirimkan konteks permintaan yang gagal ke fungsi tersebut untuk menjalankan logika penanganan kesalahan kustom Anda.
Berikan notifikasi kepada layanan downstream mengenai hasil pemanggilan
Jika Anda telah mengonfigurasi tujuan untuk pemanggilan yang berhasil, sistem Function Compute secara otomatis mengirimkan konteks permintaan yang berhasil ke tujuan setelah permintaan dieksekusi. Misalnya, jika Anda menggunakan Function Compute untuk secara otomatis mengekstrak file ZIP yang diunggah ke OSS dan ingin menerima notifikasi saat proses selesai, Anda dapat mengonfigurasi tujuan untuk pemanggilan asinkron fungsi tersebut.
Layanan yang didukung sebagai tujuan untuk pemanggilan asinkron
Saat Anda mengonfigurasi tujuan untuk pemanggilan asinkron suatu fungsi, Function Compute mengirimkan konteks permintaan dan data ke layanan yang ditentukan jika hasil pemanggilan memenuhi kondisi tertentu. Anda dapat mengonfigurasi tujuan yang berbeda untuk fungsi, versi, dan alias yang berbeda. Layanan berikut didukung sebagai tujuan untuk pemanggilan asinkron:
Simple Message Queue (formerly MNS)
Function Compute
EventBridge
ApsaraMQ for RocketMQ
Anda hanya dapat mengonfigurasi fungsi event di Function Compute sebagai tujuan. Anda tidak dapat mengonfigurasi fungsi HTTP sebagai tujuan. Untuk informasi selengkapnya mengenai fungsi event dan fungsi HTTP, lihat Pilih jenis fungsi.
Tinjau detail konfigurasi berikut untuk tujuan:
Konten event untuk tujuan
Kode berikut merupakan contoh event yang dikirim saat tujuannya adalah Simple Message Queue (formerly MNS), Function Compute, atau ApsaraMQ for RocketMQ.
{ "timestamp": 1660120276975, "requestContext": { "requestId": "xxx", "functionArn": "acs:fc:::services/{serviceName}/functions/{functionName}", "condition": "FunctionResourceExhausted", "approximateInvokeCount": 3 }, "requestPayload": "", "responseContext": { "statusCode": 200, "functionError": "" }, "responsePayload": "" }Tabel 1. Deskripsi parameter
Parameter
Deskripsi
timestamp
Timestamp pemanggilan.
requestContext
Konteks permintaan.
requestContext.requestId
ID permintaan untuk pemanggilan asinkron.
requestContext.functionArn
ARN fungsi yang dieksekusi secara asinkron.
requestContext.condition
Kode kesalahan pemanggilan.
requestContext.approximateInvokeCount
Jumlah eksekusi pemanggilan asinkron. Jika nilai ini lebih besar dari 1, artinya Function Compute telah melakukan retry terhadap fungsi Anda.
requestPayload
Muatan asli permintaan fungsi.
responseContext
Kembali ke konteks.
responseContext.statusCode
Kode respons sistem untuk pemanggilan fungsi. Jika kode respons ini bukan 200, artinya terjadi kesalahan sistem.
responseContext.functionError
Informasi kesalahan pemanggilan.
responsePayload
Muatan asli yang dikembalikan oleh eksekusi fungsi.
Contoh berikut menunjukkan event ketika EventBridge menjadi target untuk pemanggilan asinkron. Untuk informasi selengkapnya, lihat Ikhtisar event.
{ "datacontenttype": "application/json", "aliyunaccountid": "143xxxx", "data": { "requestContext": { "condition": "", "approximateInvokeCount": 1, "requestId": "0fcb7f0c-xxxx", "functionArn": "acs:fc:::services/xxxx.LATEST/functions/xxxx" }, "requestPayload": "", "responsePayload": "", "responseContext": { "functionError": "", "statusCode": 200 }, "timestamp": 1660120276975 }, "subject": "acs:fc:::services/xxxx.LATEST/functions/xxxx", "source": "acs:fc", "type": "fc:AsyncInvoke:succeeded", "aliyunpublishtime": "2021-01-03T09:44:31.233Asia/Shanghai", "specversion": "1.0", "aliyuneventbusname": "xxxxxxx", "id": "ecc4865xxxxxx", "time": "2021-01-03T01:44:31Z", "aliyunregionid": "cn-shanghai-vpc", "aliyunpublishaddr": "199.99.xxx.xxx" }Batas muatan
Batas muatan maksimum untuk layanan tujuan dalam pemanggilan asinkron adalah sebagai berikut:
Simple Message Queue (formerly MNS): 64 KB
Function Compute: 128 KB
EventBridge: 64 KB
ApsaraMQ for RocketMQ: 4 MB
Hindari pemanggilan melingkar
Saat Anda mengonfigurasi tujuan eksekusi asinkron, hindari membuat pemanggilan melingkar. Misalnya, Anda mengonfigurasi Function B sebagai tujuan untuk pemanggilan sukses Function A, dan Function A sebagai tujuan untuk pemanggilan sukses Function B. Jika Anda memanggil Function A secara asinkron dan eksekusinya berhasil, maka Function B akan dipicu. Function B kemudian memicu Function A lagi, sehingga terbentuk loop.
Konfigurasikan tujuan untuk pemanggilan asinkron
Sebelum mengonfigurasi tujuan untuk pemanggilan asinkron, buat fungsi dan pastikan peran yang digunakan oleh fungsi memiliki izin yang diperlukan untuk mengakses layanan cloud tersebut. Untuk informasi selengkapnya, lihat Berikan izin Function Compute untuk mengakses layanan cloud lainnya.
Simple Message Queue (formerly MNS): mns:SendMessage atau mns:PublishMessage.
Function Compute: fc:InvokeFunction.
EventBridge: eventbridge:PutEvents.
ApsaraMQ for RocketMQ: mq:PUB.
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.
Pada halaman Functions, klik nama fungsi tujuan. Lalu, pada halaman detail fungsi, klik tab Asynchronous Configurations.
Pada tab Asynchronous Configurations, konfigurasikan parameter sesuai kebutuhan.
Konfigurasikan Tujuan untuk Pemanggilan Berhasil
Pada bagian Destination for Successful Invocation, klik Modify.
Pada panel Modify Destination for Successful Invocation, atur Invoke Other Services upon Success ke Enable. Lalu, konfigurasikan layanan cloud tujuan tempat hasil dikirim setelah permintaan berhasil dieksekusi. Tabel berikut menjelaskan parameter-parameter tersebut:
Parameter
Deskripsi
Destination Service
Function Compute. Jika Anda mengatur Destination Service ke Function Compute, konfigurasikan parameter berikut:
Service Name: Tentukan nama layanan tujuan.
Version or Alias: Tentukan alias atau versi layanan.
Function Name: Tentukan nama fungsi tujuan.
CatatanAnda hanya dapat menetapkan fungsi event Function Compute sebagai tujuan. Anda tidak dapat menetapkan fungsi HTTP sebagai tujuan.
Simple Message Queue (formerly MNS). Jika Anda mengatur Destination Service ke Simple Message Queue (formerly MNS), konfigurasikan parameter berikut:
Destination Type: Pilih jenis tujuan sesuai kebutuhan. Nilai yang valid:
Queue:
Topic:
Queue: Nama antrian Simple Message Queue (formerly MNS). Parameter ini wajib diisi jika Anda mengatur Destination Type ke Queue.
Topic: Nama topik Simple Message Queue (formerly MNS). Parameter ini wajib diisi jika Anda mengatur Destination Type ke Topic.
ApsaraMQ for RocketMQ. Jika Anda mengatur Destination Service ke ApsaraMQ for RocketMQ, konfigurasikan parameter berikut:
Instances: Pilih instans tujuan.
Topic: Pilih topik tujuan.
EventBridge. Jika Anda mengatur Destination Service ke EventBridge, tentukan Custom Event Bus.
Klik OK.
Konfigurasikan Tujuan untuk Pemanggilan Gagal
Pada bagian Destination for Failed Invocation, klik Modify.
Pada panel Modify Destination for Failed Invocation, atur Invoke Other Services upon Failure ke Enable. Lalu, konfigurasikan layanan cloud tujuan tempat hasil dikirim setelah permintaan gagal.
Untuk informasi mengenai parameter konfigurasi tujuan untuk pemanggilan gagal, lihat Konfigurasikan Tujuan untuk Pemanggilan Berhasil.
Klik OK.
Setelah fungsi dipicu, Anda dapat membaca konten berikut dari layanan tujuan yang dikonfigurasi saat eksekusi fungsi berhasil atau gagal:
{ "timestamp": 1660120276975, "requestContext": { "requestId": "xxx", "functionArn": "acs:fc:::services/{serviceName}/functions/{functionName}", "condition": "FunctionResourceExhausted", "approximateInvokeCount": 3 }, "requestPayload": "", "responseContext": { "statusCode": 200, "functionError": "" }, "responsePayload": "" }
Penanganan kegagalan callback
Callback ke Destination Service dapat gagal jika peran layanan tidak memiliki izin akses atau jika Destination Service tidak tersedia. Function Compute menyediakan metrik dan log terkait untuk membantu Anda menangani kegagalan tersebut. Tabel berikut menjelaskan kesalahan umum dan perilaku sistem.
Kode kesalahan | Penyebab | Perilaku sistem |
5xx | Throttling, kesalahan konten, atau masalah lainnya. | Function Compute secara otomatis melakukan retry dengan backoff eksponensial. Interval retry awal adalah 500 ms, dan durasi retry maksimum adalah 30 menit. |
4xx | Kurangnya izin, parameter permintaan salah seperti sumber daya yang telah dihapus di Destination Service, atau isi pesan permintaan yang melebihi batas Destination Service. | Kesalahan dikembalikan dan pesan kesalahan dicatat. |
Metrik callback hasil
Jika callback ke Destination Service gagal, Function Compute mencatat metrik terkait dan menampilkannya di konsol. Masuk ke Function Compute console. Di panel navigasi sebelah kiri, pilih . Lalu, pada daftar Service Name, klik nama layanan tujuan untuk melihat metriknya. Tabel berikut menjelaskan metrik untuk fitur tujuan.
Nama metrik | Deskripsi |
Destination Invocation Errors (FunctionDestinationErrors) | Jumlah permintaan yang gagal memanggil tujuan selama eksekusi fungsi. Metrik ini berlaku saat tujuan dikonfigurasi untuk pemanggilan asinkron. Nilainya dijumlahkan dengan granularitas 1 menit atau 1 jam. |
Destination Invocation Successes (FunctionDestinationSucceed) | Jumlah permintaan yang berhasil memanggil tujuan selama eksekusi fungsi. Metrik ini berlaku saat tujuan dikonfigurasi untuk pemanggilan asinkron. Nilainya dijumlahkan dengan granularitas 1 menit atau 1 jam. |
Untuk informasi selengkapnya mengenai metrik pemantauan, lihat Metrik pemantauan.
Informasi tambahan
Anda juga dapat menggunakan API atau tool Serverless Devs untuk mengonfigurasi Destination Service untuk pemanggilan asinkron. Untuk informasi selengkapnya, lihat Referensi API dan Perintah umum Serverless Devs.
Fungsi HTTP tidak didukung sebagai fungsi tujuan, tetapi mendukung pemanggilan sinkron dan asinkron. Untuk informasi selengkapnya, lihat Metode pemanggilan HTTP.
Anda juga dapat mengaktifkan mode Tugas asinkron saat mengonfigurasi fitur callback hasil untuk pemanggilan asinkron. Untuk informasi selengkapnya, lihat Tugas asinkron.