Anda dapat menggunakan Bahasa Definisi Alur (FDL) untuk mengintegrasikan CloudFlow dengan layanan Alibaba Cloud lainnya dan memanggil layanan tersebut di dalam CloudFlow. Topik ini menjelaskan cara CloudFlow diintegrasikan dengan Function Compute dan memanggil fungsi-fungsinya.
Informasi latar belakang
CloudFlow menggambarkan alur bisnis berdasarkan status alur dan model mesin keadaan, serta menggunakan parameter pemanggilan API yang Anda tentukan untuk menyelesaikan setiap langkah dari alur tersebut.
Untuk menambahkan fungsi ke CloudFlow dan memanggil fungsi-fungsi CloudFlow, Anda harus mengikuti spesifikasi orkestrasi. Bagian berikut memberikan contoh prosedur tentang cara menambahkan fungsi ke CloudFlow dan kemudian memanggil fungsi tersebut.
Langkah 1: Pilih tipe status
Tambahkan status Tugas ke alur, lalu orkestrasikan Function Compute berdasarkan definisi Tugas.
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: contoh pemanggilan fungsi
States:
- Name: contoh pemanggilan fungsi
Type: Task
TaskMode: RequestComplete
Action: FC:InvokeFunction
Parameters:
resourceArn: xxx
invocationType: xxx
body: xxx
End: true
Langkah 2: Konfigurasikan parameter pemanggilan
Pemanggilan fungsi Function Compute melibatkan parameter utama berikut: Nama Sumber Daya Alibaba Cloud (ARN) yang mengidentifikasi fungsi, mode pemanggilan fungsi, dan parameter acara. Tabel berikut menjelaskan parameter-parameter tersebut.
Menurut spesifikasi Spec, parameter mengikuti konvensi penamaan camel case dan dimulai dengan huruf kecil.
Parameter | Diperlukan | Tipe data parameter | Deskripsi |
resourceArn | Ya | String. | ARN dari fungsi, yang digunakan untuk mengidentifikasi fungsi tersebut. |
invocationType | Ya | Sync atau Async. | Mode pemanggilan fungsi. |
body | Tidak | Objek JSON atau string, yang diserialisasi menjadi larik byte sebelum diteruskan ke fungsi yang dipanggil. | Parameter acara, yang merupakan parameter input dari proses eksekusi fungsi. |
Kode contoh:
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: contoh pemanggilan fungsi sinkron
States:
- Name: contoh pemanggilan fungsi sinkron
Type: Task
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
invocationType: Sync
body:
testKey: isi parameter testKey dalam acara fungsi
Next: contoh pemanggilan fungsi asinkron
- Name: contoh pemanggilan fungsi asinkron
Type: Task
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:::services/myService2.LATEST/functions/myFunction2
invocationType: Async
body:
key1: value1
key2: value2
End: true
Langkah 3: Atur mode integrasi
Status Tugas mendukung atribut TaskMode, yang mendefinisikan bagaimana status saat ini menangani pemanggilan API. Integrasi CloudFlow dan Function Compute mendukung mode integrasi berikut:
Dalam mode ini, setelah sistem merespons permintaan dan mengembalikan hasilnya, alur maju ke status berikutnya. Mode ini efektif untuk pemanggilan fungsi sinkron, pemanggilan fungsi asinkron, dan pemanggilan tugas asinkron.
Dalam mode ini, setelah sistem mengirim permintaan pemanggilan fungsi, sistem fungsi mengirim notifikasi panggilan balik sistem. Setelah alur kerja menerima notifikasi panggilan balik sistem, alur kerja mengeksekusi langkah berikutnya. Mode ini hanya efektif untuk pemanggilan fungsi asinkron dan pemanggilan tugas asinkron.
Setelah permintaan pemanggilan fungsi selesai, alur kerja akan terus menunggu hingga program pengguna memberi tahu API untuk mengirim notifikasi menggunakan panggilan balik yang disediakan oleh CloudFlow. Alur kerja baru akan maju setelah CloudFlow menerima notifikasi panggilan balik. Mode ini hanya berlaku untuk pemanggilan fungsi asinkron dan pemanggilan tugas asinkron.
Untuk informasi lebih lanjut tentang pemanggilan fungsi, lihat Pemanggilan Sinkron, Pemanggilan Asinkron, dan Manajemen Tugas Asinkron.
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: contoh pemanggilan fungsi sinkron
States:
- Name: contoh pemanggilan fungsi sinkron
Type: Task
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
invocationType: Sync
body:
testKey: isi parameter testKey dalam acara fungsi
Next: contoh pemanggilan fungsi asinkron
- Name: contoh pemanggilan fungsi asinkron
Type: Task
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:::services/myService2.LATEST/functions/myFunction2
invocationType: Async
body:
key1: value1
key2: value2
End: true
Anda harus menambahkan bidang kustom callbackToken ke parameter body dan mereferensikan ekspresi $Context.Current.TaskToken di bidang kustom callbackToken. Ekspresi ini menentukan atribut token yang harus digunakan ketika alur kerja memanggil kembali hasil eksekusi tugas.
Langkah 4: Bangun parameter pemanggilan
Dalam orkestrasi alur sebenarnya, Anda harus membangun parameter yang diperlukan oleh pemanggilan fungsi saat ini berdasarkan konteks alur kerja dan hasil dari status sebelumnya. Kode berikut memberikan contoh tentang cara membangun parameter pemanggilan.
Anda dapat menggunakan konstanta
$Contextdan$Inputyang dicadangkan oleh spesifikasi Spec untuk mengakses data dalam alur.
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: contoh pemanggilan fungsi
States:
- Name: contoh pemanggilan fungsi
Type: Task
TaskMode: RequestComplete
Action: FC:InvokeFunction
Parameters:
resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
invocationType: Sync
body:
argument1.$: $Input.input.BucketName
argument2.$: $Input.input.TaskId
End: true
Langkah 5: Tangani hasil pemanggilan
Anda memanggil status untuk menyelesaikan seluruh alur. Dalam skenario pemanggilan fungsi, alur kerja mengembalikan hasil eksekusi setelah alur kerja menyelesaikan pemanggilan. Anda dapat menggunakan hasil yang dikembalikan sebagai pernyataan bersyarat dari alur atau sebagai input dari status berikutnya. Menurut definisi API InvokeFunction dari Function Compute, jika nilai parameter respons Type dari fungsi adalah Byte, tipe data aktualnya adalah Byte. Nilai kembali fungsi bisa berupa string, objek JSON, array JSON, atau tipe data dasar.
Dalam mode integrasi RequestComplete, setelah alur kerja menerima hasil yang dikembalikan, alur kerja membungkus hasil tersebut ke dalam objek JSON. Kode berikut menunjukkan struktur pembungkusan hasil dalam alur kerja.
{ "Body": "hasil pemanggilan fungsi" }Anda dapat menggunakan JSONPath dari
$Output.Bodydalam deskripsi alur kerja untuk mengakses hasil yang dikembalikan dari fungsi. Jika nilai kembali adalah objek JSON, Anda dapat memanggil fungsi bawaan dalam alur kerja untuk mendeserialisasi nilai kembali. Kemudian, Anda dapat mengakses anggota dalam nilai kembali berdasarkan operasi objek JSON.Type: StateMachine Name: MyWorkflow SpecVersion: v1 Description: ' ' StartAt: Contoh 1 pemanggilan fungsi States: - Name: Contoh 1 pemanggilan fungsi Type: Task TaskMode: RequestComplete Action: FC:InvokeFunction Parameters: resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1 invocationType: Sync body: argument1.$: $Input.Records argument2.$: $Input.BucketName Next: pernyataan bersyarat - Type: Choice Name: pernyataan bersyarat Branches: - Condition: $Input.ObjectSize >= $Input.Threshold Next: Contoh 2 pemanggilan fungsi Default: Tidak ada tindakan yang dilakukan. - Type: Pass Name: Tidak ada tindakan yang dilakukan. End: true - Name: Contoh 2 pemanggilan fungsi Type: Task TaskMode: RequestComplete Action: FC:InvokeFunction Parameters: resourceArn: acs:fc:::services/myService2.LATEST/functions/myFunction2 invocationType: Sync body: argument1.$: $Input.BucketName argument2.$: $Input.TaskId End: trueDalam mode integrasi WaitForSystemCallback dan WaitForCustomCallback, sistem eksternal memanggil operasi API ReportTaskSucceeded atau ReportTaskFailed untuk menanyakan hasil pemanggilan fungsi dan meneruskan hasil tersebut ke alur kerja. Alur kerja tidak membungkus hasil yang dikembalikan. Sebagai contoh, jika nilai kembali fungsi adalah {"message": "hello"}, struktur nilai kembali dalam alur kerja ditampilkan seperti kode berikut.
{ "message": "hello" }Anda dapat menggunakan ekspresi $Output dalam deskripsi alur kerja Anda untuk mengakses hasil yang dikembalikan dari fungsi.
Definisi kesalahan umum
FC.ResourceThrottled: Fungsi Anda dibatasi karena konkurensi tinggi. Total jumlah pemanggilan fungsi Anda tidak boleh lebih besar dari nilai konkurensi tertentu. CloudFlow secara sinkron memanggil Function Compute ketika CloudFlow mengeksekusi status Tugas. Nilai konkurensi mencakup pemanggilan fungsi di CloudFlow dan pemanggilan fungsi dalam mode lainnya. Anda dapat meminta untuk memodifikasi nilai konkurensi jika nilai konkurensi tidak dapat memenuhi kebutuhan Anda.FC.ResourceExhausted: Fungsi Anda dibatasi karena sumber daya tidak mencukupi. Hubungi kami ketika kesalahan ini terjadi.FC.InternalServerError: Terjadi kesalahan sistem di Function Compute. Jalankan ulang alur.FC.AccessDenied: Permintaan akses Anda ditolak karena akun Alibaba Cloud Anda tidak memiliki izin yang diperlukan.FC.InvalidArgument: Parameter tidak valid.FC.EntityTooLarge: Nilai parameter input yang ditentukan melebihi rentang nilai yang valid.
Untuk informasi tentang kesalahan lainnya di Function Compute, lihat Kode Kesalahan.