All Products
Search
Document Center

CloudFlow:Langkah Tugas

Last Updated:Jul 06, 2025

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. $local adalah hasil dari pemanggilan fungsi dan harus dalam format JSON.
    Catatan Jika tidak ada pemetaan output yang ditentukan, $local digunakan sebagai output langkah ini secara default.
  • Opsional:errorMappings: pemetaan kesalahan. Parameter atribut ini hanya valid ketika terjadi kesalahan selama eksekusi langkah dan parameter catch ditentukan. Anda dapat menggunakan nilai $local.cause dan $local.error untuk memetakan informasi kesalahan ke output dan meneruskannya ke langkah berikutnya.
    Catatan Nilai $local.error dan $local.code dicadangkan untuk sistem. Bidang source dalam errorMappings harus disetel ke dua nilai ini. Untuk informasi lebih lanjut, lihat Contoh. Selain itu, parameter errorMappings bersifat 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 fungsiKode status HTTP dari respons Function ComputeRespons Function ComputeServerless workflow kegagalan langkah (for retry and catch)Ulangi
Tidak dieksekusi429ResourceExhaustedFC.ResourceExhaustedYa
Tidak dieksekusi4xx tetapi bukan 429ServiceNotFound, FunctionNotFound, atau InvalidArgumentFC.ServiceNotFound, FC.FunctionNotFound, atau FC.InvalidArgumentTidak
Tidak pasti500InternalServerErrorFC.InternalServerErrorYa
Tidak dieksekusi503ResourceThrottledFC.ResourceThrottledYa
Eksekusi berhasil, dengan kode kesalahan dikembalikan 200Kesalahan kustom, termasuk errorType errorTypeDitentukan berdasarkan bisnis
Eksekusi gagal, dengan kode kesalahan dikembalikan 200Tidak ada errorTypeFC.UnknownYa
Eksekusi berhasil, dengan objek non-JSON dikembalikan 200Tidak ada errorTypeFC.InvalidOutputTidak
Kesalahan lainnya:
  • 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/hello           
      Parameter-parameter resourceArn:
      • {region}: Ganti dengan wilayah sebenarnya, seperti cn-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. create_flow_step1
    • 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")          
  • Ulang

    Contoh berikut menunjukkan cara mengulang tugas saat terjadi MyError. Jika tidak ada input yang ditentukan untuk alur atau input alur tidak mengandung kunci name, 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 MyError dan kemudian pergi ke langkah final. 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 MyError dan kemudian pergi ke langkah final. Informasi kesalahan dapat diperoleh dan diproses di langkah final karena pemetaan kesalahan telah ditentukan. Alur berhasil. Anda juga dapat menentukan dalam errorMappings untuk 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: final  

    Pada event langkah akhir, Anda dapat melihat konten berikut dalam EventDetail:

    "EventDetail": "{\"input\":{},\"local\":{\"errorCode\":\"MyError\",\"errorMsg\":\"some message\"}}",