Topik ini menjelaskan langkah tugas dan contoh.
Atribut
Langkah tugas mendefinisikan informasi pemanggilan fungsi dari Function Compute. Saat langkah tugas dijalankan, fungsi yang sesuai dipanggil.
Langkah tugas mencakup atribut berikut:
- : jenis langkah. Nilai
task name: nama langkah.resourceArn: pengenal sumber daya, yang dapat berupa fungsi, antrian MNS, atau Serverless workflow. Contoh:acs:fc:cn-shanghai:18807708****3420:services/fnf_test/functions/hello. Untuk informasi lebih lanjut, lihat Integrasi Layanan.- Opsional:pola: mode eksekusi layanan integrasi. Layanan integrasi yang berbeda mendukung mode eksekusi yang berbeda. Nilai default:
requestResponse. Nilai valid:requestResponse: Sistem menunggu hingga eksekusi tugas selesai setelah tugas dikirimkan, lalu melanjutkan ke langkah berikutnya.sync: Sistem menunggu hingga eksekusi tugas selesai setelah tugas dikirimkan secara asinkron, lalu melanjutkan ke langkah berikutnya setelah sistem menerima hasil eksekusi tugas.waitForCallback: Sistem menangguhkan langkah setelah tugas dikirimkan secara asinkron (seperti memanggil fungsi), dan menunggu hingga sistem menerima permintaan balik atau notifikasi timeout dari tugas.
- Opsional:
timeoutSeconds: periode timeout tugas. Jika durasi eksekusi tugas melebihi periode timeout yang ditentukan, langkah tugas akan timeout. - Opsional:
end: menentukan apakah akan melanjutkan dengan langkah-langkah berikutnya setelah langkah saat ini selesai. - Opsional:
inputMappings: pemetaan input. Input dari langkah tugas digunakan sebagai acara pemanggilan fungsi. Untuk informasi lebih lanjut, lihat InvokeFunction. - Opsional:
outputMappings: pemetaan output.$localadalah hasil dari pemanggilan fungsi dan harus dalam format JSON.Catatan Jika tidak ada pemetaan output yang ditentukan,$localdigunakan sebagai output langkah ini secara default. - Opsional:
errorMappings: pemetaan kesalahan. Parameter atribut ini hanya valid ketika terjadi kesalahan selama eksekusi langkah dan parametercatchditentukan. Anda dapat menggunakan nilai$local.causedan$local.erroruntuk memetakan informasi kesalahan ke output dan meneruskannya ke langkah berikutnya.Catatan Nilai$local.errordan$local.codedicadangkan untuk sistem. Bidangsourcedalam errorMappings harus disetel ke dua nilai ini. Untuk informasi lebih lanjut, lihat Contoh. Selain itu, parametererrorMappingsbersifat opsional. Jika tidak ditentukan, informasi kesalahan tidak dapat diperoleh pada langkah berikutnya setelah terjadi kesalahan. retry: kelompok kebijakan ulang. Setiap kebijakan ulang memiliki atribut berikut:errors: satu atau lebih kesalahan. Untuk informasi lebih lanjut, lihat Definisi Kesalahan.intervalSeconds: interval awal antar percobaan ulang. Nilai maksimum adalah 86.400 detik. Nilai default: 1 detik.maxIntervalSeconds: interval waktu maksimum untuk percobaan ulang. Nilai maksimum dan defaultnya adalah 86.400 detik.maxAttempts: jumlah maksimum percobaan ulang. Nilai default: 3.multiplier: nilai yang digunakan untuk mengalikan interval percobaan ulang untuk membuat interval percobaan ulang berikutnya. Nilai default: 2.
catch: kelompok kebijakan tangkap. Setiap kebijakan tangkap memiliki atribut berikut:errors: satu atau lebih kesalahan. Untuk informasi lebih lanjut, lihat tabel berikut.goto: nama langkah tujuan.Catatan Langkah tujuan harus merupakan langkah paralel dengan langkah tugas saat ini.
Tabel 1. Definisi Kesalahan
| Status eksekusi fungsi | Kode status HTTP dari respons Function Compute | Respons Function Compute | Serverless workflow kegagalan langkah (for retry and catch) | Ulangi |
| Tidak dieksekusi | 429 | ResourceExhausted | FC.ResourceExhausted | Ya |
| Tidak dieksekusi | 4xx tetapi bukan 429 | ServiceNotFound, FunctionNotFound, atau InvalidArgument | FC.ServiceNotFound, FC.FunctionNotFound, atau FC.InvalidArgument | Tidak |
| Tidak pasti | 500 | InternalServerError | FC.InternalServerError | Ya |
| Tidak dieksekusi | 503 | ResourceThrottled | FC.ResourceThrottled | Ya |
| Eksekusi berhasil, dengan kode kesalahan dikembalikan | 200 | Kesalahan kustom, termasuk errorType | errorType | Ditentukan berdasarkan bisnis |
| Eksekusi gagal, dengan kode kesalahan dikembalikan | 200 | Tidak ada errorType | FC.Unknown | Ya |
| Eksekusi berhasil, dengan objek non-JSON dikembalikan | 200 | Tidak ada errorType | FC.InvalidOutput | Tidak |
FnF.ALL: menangkap semua kegagalan untuk kasus penggunaan ulang atau goto.
Contoh
- Langkah tugas sederhana
Alur sampel berikut berisi langkah tugas.
- Jika input adalah
{"name": "function flow"}, output adalah{"hello": "function flow"}. - Jika tidak ada input yang ditentukan untuk alur atau input alur tidak mengandung kunci
name, eksekusi langkah tugas gagal, yang menyebabkan kegagalan alur.
- Definisikan alur.
version: v1 type: flow steps: - type: task name: hello resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/helloParameter-parameterresourceArn:{region}: Ganti dengan wilayah sebenarnya, seperticn-shanghai.{accountID}: Ganti dengan ID akun Anda. Anda dapat melihat ID akun dengan mengklik gambar profil di halaman Flows dari Konsol Serverless Workflow, seperti yang ditunjukkan pada gambar berikut.
- Definisikan fungsi.
import json class MyError(Exception): pass def handle(event, context): evt = json.loads(event) if "name" in evt: return { "hello": evt["name"] } else: raise MyError("My unhandled exception")
- Jika input adalah
- Ulang
Contoh berikut menunjukkan cara mengulang tugas saat terjadi
MyError. Jika tidak ada input yang ditentukan untuk alur atau input alur tidak mengandung kunciname, Serverless workflow gagal mengulang tugas beberapa kali berdasarkan kebijakan ulang.- Sistem menunggu 3 detik setelah kesalahan pertama terjadi, lalu memanggil fungsi lagi.
- Sistem menunggu 6 detik (
intervalSeconds x multiplier) setelah kesalahan kedua terjadi, lalu memanggil fungsi lagi. - Sistem menunggu 12 detik (
intervalSeconds x multiplier x multiplier) setelah kesalahan ketiga terjadi, lalu memanggil fungsi lagi. - Jika kesalahan masih terjadi setelah tiga kali percobaan ulang, jumlah percobaan ulang melebihi
maxAttempts. Oleh karena itu, langkah tugas gagal dan alur gagal.
version: v1 type: flow steps: - type: task name: hello resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/hello retry: - errors: - MyError intervalSeconds: 3 maxAttempts: 3 multiplier: 2 - Tangkap kesalahan
Contoh berikut menunjukkan cara menangkap
MyErrordan kemudian pergi ke langkahfinal. Kesalahan tertangkap, sehingga alur berhasil.version: v1 type: flow steps: - type: task name: hello resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/hello catch: - errors: - MyError goto: final - type: pass name: pass1 - type: pass name: final - Tangkap kesalahan dengan pemetaan kesalahan yang ditentukan
Contoh berikut menunjukkan cara menangkap
MyErrordan kemudian pergi ke langkahfinal. Informasi kesalahan dapat diperoleh dan diproses di langkahfinalkarena pemetaan kesalahan telah ditentukan. Alur berhasil. Anda juga dapat menentukan dalamerrorMappingsuntuk memetakan input dan konstanta langkah ini ke output.version: v1 type: flow steps: - type: task name: hello resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/hello errorMappings: - target: errMsg source: $local.cause # Nilai ini dicadangkan untuk sistem dan dapat digunakan langsung saat terjadi kesalahan pada langkah ini. - target: errCode source: $local.error # Nilai ini dicadangkan untuk sistem dan dapat digunakan langsung saat terjadi kesalahan pada langkah ini. catch: - errors: - MyError goto: final - type: pass name: pass1 - type: pass name: finalPada
eventlangkah akhir, Anda dapat melihat konten berikut dalamEventDetail:"EventDetail": "{\"input\":{},\"local\":{\"errorCode\":\"MyError\",\"errorMsg\":\"some message\"}}",