Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Status alur kerja pilihan
Sebuah Choice
state ("Type": "Choice"
) menambahkan logika kondisional ke mesin state.
Selain sebagian besar bidang negara bagian umum, Choice negara bagian berisi bidang tambahan berikut.
Choices
(Wajib)-
Array Aturan Pilihan yang menentukan status mesin status yang akan ditransisikan ke berikutnya. Anda menggunakan operator perbandingan dalam Aturan Pilihan untuk membandingkan variabel input dengan nilai tertentu. Misalnya, menggunakan Aturan Pilihan Anda dapat membandingkan jika variabel input lebih besar dari atau kurang dari 100.
Ketika sebuah
Choice
negara dijalankan, ia mengevaluasi setiap Aturan Pilihan menjadi benar atau salah. Berdasarkan hasil evaluasi ini, Step Functions bertransisi ke status berikutnya dalam alur kerja.Anda harus mendefinisikan setidaknya satu aturan di
Choice
negara bagian. Default
(Opsional, Direkomendasikan)-
Nama status yang akan ditransisikan jika tidak ada transisi di
Choices
yang diambil.
penting
Status Choice
tidak mendukung bidang End
. Selain itu, status tersebut hanya menggunakan Next
di dalam bidang Choices
nya.
Tip
Untuk menerapkan contoh alur kerja yang menggunakan Choice
status ke Anda Akun AWS, lihat Modul 5 - Status Pilihan dan Status Peta
Aturan Pilihan
Sebuah Choice
negara harus memiliki Choices
bidang yang nilainya adalah array yang tidak kosong. Setiap elemen dalam array ini adalah objek yang disebut Choice Rule, yang berisi berikut:
-
Perbandingan — Dua bidang yang menentukan variabel input untuk membandingkan tipe perbandingan, dan nilai untuk membandingkan variabel. Aturan Pilihan mendukung perbandingan antara dua variabel. Dalam Aturan Pilihan, nilai variabel dapat dibandingkan dengan nilai lain dari input status dengan menambahkan nama
Path
operator perbandingan yang didukung. Nilai bidangVariable
dan Path dalam perbandingan harus merupakan Jalur Referensi yang valid. -
Bidang
Next
— Nilai bidang ini harus cocok dengan nama status di mesin status.
Contoh berikut memeriksa apakah nilai numerik sama dengan 1
.
{
"Variable": "$.foo",
"NumericEquals": 1,
"Next": "FirstMatchState"
}
Contoh berikut memeriksa apakah string sama dengan MyString
.
{
"Variable": "$.foo",
"StringEquals": "MyString",
"Next": "FirstMatchState"
}
Contoh berikut memeriksa apakah string lebih besar dengan MyStringABC
.
{
"Variable": "$.foo",
"StringGreaterThan": "MyStringABC",
"Next": "FirstMatchState"
}
Contoh berikut memeriksa apakah string bernilai null.
{
"Variable": "$.possiblyNullValue",
"IsNull": true
}
Contoh berikut menunjukkan bagaimana StringEquals aturan hanya dievaluasi ketika $.keyThatMightNotExist
ada karena Aturan Pilihan sebelumnyaIsPresent
.
"And": [
{
"Variable": "$.keyThatMightNotExist",
"IsPresent": true
},
{
"Variable": "$.keyThatMightNotExist",
"StringEquals": "foo"
}
]
Contoh berikut memeriksa apakah pola dengan kecocokan wildcard.
{ "Variable": "$.foo", "StringMatches": "log-*.txt" }
Contoh berikut memeriksa apakah waktu stempel sama dengan 2001-01-01T12:00:00Z
.
{
"Variable": "$.foo",
"TimestampEquals": "2001-01-01T12:00:00Z",
"Next": "FirstMatchState"
}
Contoh berikut membandingkan variabel dengan nilai lain dari input status.
{ "Variable": "$.foo", "StringEqualsPath": "$.bar" }
Step Functions meneliti masing-masing Aturan Pilihan dalam urutan yang terdaftar di bidang Choices
. Lalu bertransisi ke status yang ditentukan di bidang Next
Aturan Pilihan pertama saat variabel cocok dengan nilai yang sesuai dengan operator perbandingan.
Operator perbandingan berikut didukung:
-
And
-
BooleanEquals
,BooleanEqualsPath
-
IsBoolean
-
IsNull
-
IsNumeric
-
IsPresent
-
IsString
-
IsTimestamp
-
Not
-
NumericEquals
,NumericEqualsPath
-
NumericGreaterThan
,NumericGreaterThanPath
-
NumericGreaterThanEquals
,NumericGreaterThanEqualsPath
-
NumericLessThan
,NumericLessThanPath
-
NumericLessThanEquals
,NumericLessThanEqualsPath
-
Or
-
StringEquals
,StringEqualsPath
-
StringGreaterThan
,StringGreaterThanPath
-
StringGreaterThanEquals
,StringGreaterThanEqualsPath
-
StringLessThan
,StringLessThanPath
-
StringLessThanEquals
,StringLessThanEqualsPath
-
StringMatches
-
TimestampEquals
,TimestampEqualsPath
-
TimestampGreaterThan
,TimestampGreaterThanPath
-
TimestampGreaterThanEquals
,TimestampGreaterThanEqualsPath
-
TimestampLessThan
,TimestampLessThanPath
-
TimestampLessThanEquals
,TimestampLessThanEqualsPath
Untuk masing-masing operator ini, nilai yang sesuai harus dari tipe yang sesuai: string, nomor, Boolean, atau waktu stempel. Step Functions tidak mencoba untuk mencocokkan bidang numerik dengan nilai string. Namun, karena bidang waktu stempel secara logis adalah string, ada kemungkinan bahwa bidang yang dianggap sebagai stempel waktu dapat dicocokkan dengan pembanding StringEquals
.
catatan
Untuk interoperabilitas, jangan berasumsi bahwa perbandingan numerik bekerja dengan nilai di luar besarnya atau presisi yang diwakili oleh tipe data 754-2008. IEEE binary64
[-253+1,
253-1]
mungkin gagal untuk membandingkan dengan cara yang diharapkan.
Stempel waktu (misalnya,2016-08-18T17:33:00Z
) harus sesuai dengan RFC3339profil ISO 8601
-
Huruf kapital
T
harus memisahkan bagian tanggal dan waktu. -
Huruf kapital
Z
harus menunjukkan bahwa offset zona waktu numerik tidak ada.
Untuk memahami perilaku perbandingan string, lihat Dokumentasi compareTo
Java
Nilai operator And
dan Or
harus berupa array non-kosong dari Aturan Pilihan yang tidak boleh berisi bidang Next
. Demikian juga, nilai operator Not
harus menjadi Aturan Pilihan tunggal yang tidak boleh mengandung bidang Next
.
Anda dapat membuat Aturan Pilihan yang kompleks dan di-nest menggunakan And
, Not
, dan Or
. Namun, bidang Next
hanya dapat muncul di Aturan Pilihan tingkat atas.
Perbandingan string terhadap pola dengan satu atau lebih wildcard (“*”) dapat dilakukan dengan operator StringMatches perbandingan. Karakter wildcard dihilangkan menggunakan \\ (Ex: “\\*”)
standar. Tidak ada karakter selain “*” yang memiliki arti khusus selama pencocokan.
Contoh Status Pilihan
Berikut ini adalah contoh status Choice
dan status lain tempat status bertransisi.
catatan
Anda harus menentukan bidang $.type
. Jika input status tidak berisi bidang $.type
, eksekusi gagal dan kesalahan ditampilkan di riwayat eksekusi. Anda hanya dapat menentukan string di bidang StringEquals
yang cocok dengan nilai literal. Misalnya, "StringEquals": "Buy"
.
"ChoiceStateX": {
"Type": "Choice",
"Choices": [
{
"Not": {
"Variable": "$.type",
"StringEquals": "Private"
},
"Next": "Public"
},
{
"Variable": "$.value",
"NumericEquals": 0,
"Next": "ValueIsZero"
},
{
"And": [
{
"Variable": "$.value",
"NumericGreaterThanEquals": 20
},
{
"Variable": "$.value",
"NumericLessThan": 30
}
],
"Next": "ValueInTwenties"
}
],
"Default": "DefaultState"
},
"Public": {
"Type" : "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:Foo",
"Next": "NextState"
},
"ValueIsZero": {
"Type" : "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:Zero",
"Next": "NextState"
},
"ValueInTwenties": {
"Type" : "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:Bar",
"Next": "NextState"
},
"DefaultState": {
"Type": "Fail",
"Cause": "No Matches!"
}
Dalam contoh ini, mesin status dimulai dengan nilai input berikut.
{
"type": "Private",
"value": 22
}
Step Functions bertransisi ke status ValueInTwenties
, berdasarkan bidang value
.
Jika tidak ada kecocokan untuk Choices
status Choice
, status yang disediakan di bidang Default
berjalan sebagai gantinya. Jika status Default
tidak ditentukan, eksekusi gagal dengan kesalahan.