CloudFlow, Flow Definition Language (FDL) ile tanımlanan durum makineleri olarak sunucusuz iş akışlarını orkestre eder. Bir iş akışından bir Function Compute işlevini çağırmak için FC:InvokeFunction eylemini içeren bir Görev (Task) durumu ekleyin. Akış motoru işlevi çağırır, seçtiğiniz entegrasyon moduna göre yanıtı işler ve sonraki duruma geçer.
Nasıl çalışır
CloudFlow akışı durumları birbirine zincirler. Her Görev durumu bir Alibaba Cloud hizmetini çağırabilir. Function Compute entegrasyonu için akış şu sırayı izler:
Bir Görev durumu,
FC:InvokeFunctioneylemini tetikler.Akış motoru, belirttiğiniz parametrelerle (ARN, çağrı türü ve yük) hedef işlevi çağırır.
TaskModeayarına bağlı olarak akış; API yanıtını bekler, sistem geri aramasını bekler veya kodunuzdan gelen özel bir geri aramayı bekler.Akış, işlevin dönüş değerini sarar veya doğrudan geçirir, ardından sonraki duruma ilerler.
Temel kavramlar
| Kavram | Açıklama |
|---|---|
| Görev durumu | Harici bir hizmeti çağırarak iş yapan bir durum. |
FC:InvokeFunction |
CloudFlow'a bir Function Compute işlevini çağırmasını söyleyen eylem tanımlayıcısı. |
TaskMode |
Akışın yanıtı nasıl işleyeceğini kontrol eder: API yanıtını bekleme, sistem geri aramasını bekleme veya özel geri aramayı bekleme. |
resourceArn |
Hedef işlevi benzersiz şekilde tanımlayan Alibaba Cloud Kaynak Adı (ARN). |
| FDL ifadeleri | Bir akış içindeki verilere erişmek için yerleşik ifadeler ($Input, $Output, $Context). |
Bir Görev durumu tanımlayın
Akış tanımınıza bir Görev durumu ekleyin. Action öğesini FC:InvokeFunction olarak ayarlayın ve gerekli parametreleri Parameters altında belirtin:
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: an example of function invocation
States:
- Name: an example of function invocation
Type: Task
TaskMode: RequestComplete
Action: FC:InvokeFunction
Parameters:
resourceArn: xxx
invocationType: xxx
body: xxx
End: true
Çağrı parametrelerini yapılandırın
İşlevin nasıl çağrılacağını üç parametre belirler:
| Parametre | Zorunlu | Tür | Açıklama |
|---|---|---|---|
resourceArn |
Evet | Dize | Hedef işlevi tanımlayan ARN. Örnek: acs:fc:::services/myService1.LATEST/functions/myFunction1 |
invocationType |
Evet | Sync veya Async |
Senkron veya asenkron çağrı. |
body |
Hayır | JSON nesnesi veya dize (işleve aktarılmadan önce bir bayt dizisine seri hale getirilir) | İşlevin giriş parametresi olarak iletilen olay yükü. |
Spec belirtimine göre parametre adları camelCase kullanır ve küçük harfle başlar.
Aşağıdaki örnek, biri senkron diğeri asenkron olmak üzere iki çağrı yapan iki durumu tanımlar:
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: an example of synchronous function invocation
States:
- Name: an example of synchronous function invocation
Type: Task
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
invocationType: Sync
body:
testKey: the content of the testKey parameter in the event of the function
Next: an example of asynchronous function invocation
- Name: an example of asynchronous function invocation
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
Bir entegrasyon modu seçin
TaskMode niteliği, işlev çağrıldıktan sonra akışın API çağrısını nasıl işleyeceğini kontrol eder. Üç mod mevcuttur:
| Mod | Desteklenen çağrı türleri | Ne zaman kullanılır |
|---|---|---|
RequestComplete |
Sync, Async, Async task | Akış, API yanıtını bekler ve ardından devam eder. |
WaitForSystemCallback |
Yalnızca Async, Async task | Function Compute, işlev tamamlandıktan sonra sistem düzeyinde bir geri arama gönderdiğinde kullanın. |
WaitForCustomCallback |
Yalnızca Async, Async task | Akışın ne zaman devam edeceğine kendi kodunuz karar verdiğinde kullanın. |
RequestComplete
Akış işlevi çağırır ve API yanıtını bekler. Sistem yanıt verip sonucu döndürdükten sonra akış sonraki duruma ilerler. Bu mod, senkron çağrılar, asenkron çağrılar ve asenkron görev çağrıları ile çalışır.
Daha fazla bilgi için bkz. RequestComplete.
WaitForSystemCallback
Akış çağrı isteğini gönderir, ardından Function Compute'ün bir sistem geri arama bildirimi göndermesini bekler. Akış, yalnızca bu geri aramayı aldıktan sonra ilerler. Bu mod yalnızca asenkron çağrılar ve asenkron görev çağrıları ile çalışır.
Daha fazla bilgi için bkz. WaitForSystemCallback.
WaitForCustomCallback
Akış işlevi çağırır ve ardından duraklar. Yalnızca programınız CloudFlow geri arama API'sini çağırarak görev sonucunu bildirdiğinde ilerler. Bu mod yalnızca asenkron çağrılar ve asenkron görev çağrıları ile çalışır.
Bu modu kullanmak için body parametresine bir callbackToken alanı ekleyin ve $Context.Current.TaskToken ifadesine başvurun. Bu belirteç, programınızın görev sonucunu akışa bildirirken dahil etmesi gereken kimlik bilgisidir.
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: invoke-with-callback
States:
- Name: invoke-with-callback
Type: Task
Action: FC:InvokeFunction
TaskMode: WaitForCustomCallback
Parameters:
resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
invocationType: Async
body:
callbackToken.$: $Context.Current.TaskToken
key1: value1
End: true
Bu örnekte, akış görev belirtecini işleve callbackToken aracılığıyla iletir. İşlev (veya aşağı yönlü bir işlem), sonucu CloudFlow'a bildirmek için bu belirteci kullanarak ReportTaskSucceeded veya ReportTaskFailed API'sini çağırır.
Daha fazla bilgi için bkz. WaitForCustomCallback.
İşlev çağrı türleri hakkında ayrıntılı bilgi için bkz. Senkron çağrılar, Asenkron çağrılar ve Asenkron görev yönetimi.
Dinamik parametreler oluşturun
Çoğu iş akışında işlev girdileri statik değerlerden ziyade iş akışı bağlamına veya önceki bir durumun çıktısına bağlıdır. Dinamik verilere başvurmak için $Context ve $Input ayrılmış ifadelerini kullanın.
Bir parametre adının değerinin bir değişmez değer değil, bir FDL ifadesi olduğunu belirtmek için ada .$ ekleyin:
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: an example of function invocation
States:
- Name: an example of function invocation
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
Bu örnekte, argument1 çalışma zamanında $Input.input.BucketName değerini alır ve argument2 $Input.input.TaskId değerini alır.
Çağrı sonuçlarını işleyin
Akışın işlevin dönüş değerini nasıl sardığı entegrasyon moduna bağlıdır.
InvokeFunction API tanımına göre, işlevin Type yanıt parametresinin değeri Byte ise gerçek veri türü Byte'dır. İşlev dönüş değeri bir dize, JSON nesnesi, JSON dizisi veya temel bir veri türü olabilir.
RequestComplete modu
Akış, işlevin dönüş değerini bir Body alanı içeren bir JSON nesnesine sarar:
{
"Body": "function invocation result"
}
Sonraki durum tanımlarında dönüş değerine $Output.Body ile erişin. Dönüş değeri bir JSON nesnesiyse iş akışının yerleşik işlevi ile serisini kaldırın ve üyelerine standart bir JSON nesnesi olarak erişin.
Aşağıdaki örnek bir işlevi çağırır ve ardından işlevin çıktısından alınan bir değere göre dallanmak için bir Seçim (Choice) durumu kullanır:
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
Description: ' '
StartAt: Example 1 of function invocation
States:
- Name: Example 1 of function invocation
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: conditional statement
- Type: Choice
Name: conditional statement
Branches:
- Condition: $Input.ObjectSize >= $Input.Threshold
Next: Example 2 of function invocation
Default: No action is performed.
- Type: Pass
Name: No action is performed.
End: true
- Name: Example 2 of function invocation
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: true
WaitForSystemCallback ve WaitForCustomCallback modları
Bu modlarda harici sistem, sonucu bildirmek için ReportTaskSucceeded veya ReportTaskFailed API'sini çağırır. Akış, sonucu sarmadan doğrudan geçirir. Örneğin, işlev {"message": "hello"} döndürürse akıştaki sonuç şöyledir:
{
"message": "hello"
}
Dönüş değerine doğrudan $Output ifadesi ile erişin.
Yaygın hatalar
| Hata kodu | Neden | Eylem |
|---|---|---|
FC.ResourceThrottled |
Toplam eşzamanlı çağrılar (CloudFlow ve diğer tüm çağrı kaynakları genelinde) eşzamanlılık sınırını aştığı için işlevler kısıtlanır. CloudFlow, Görev durumlarını yürütürken Function Compute'ü senkron olarak çağırır. | Eşzamanlılık sınırı artırımı isteyin. |
FC.ResourceExhausted |
Yetersiz kaynak nedeniyle işlevler kısıtlanır. | Bize ulaşın. |
FC.InternalServerError |
Function Compute'de bir sistem hatası oluştu. | Akışı yeniden yürütün. |
FC.AccessDenied |
Alibaba Cloud hesabı gerekli izinlere sahip değil. | Gerekli izinleri verin ve yeniden deneyin. |
FC.InvalidArgument |
Bir parametre değeri geçersiz. | Parametre değerlerini belirtimle karşılaştırarak doğrulayın. |
FC.EntityTooLarge |
Bir giriş parametresi değeri izin verilen boyutu aşıyor. | Giriş yükü boyutunu azaltın. |
Diğer Function Compute hata kodları için bkz. Hata kodları.