Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Status alur kerja tugas
Mengelola status dan mengubah data
Step Functions baru-baru ini menambahkan variabel dan JSONata untuk mengelola status dan mengubah data.
Pelajari tentang Melewati data dengan variabel dan Mengubah data dengan JSONata.
Status Task
("Type": "Task"
) mewakili satu unit kerja yang dilakukan oleh mesin status. Tugas melakukan pekerjaan dengan menggunakan aktivitas atau AWS Lambda fungsi, dengan mengintegrasikan dengan dukungan lain Layanan AWS, atau dengan memanggil HTTPSAPI, seperti Stripe.
Amazon States Language mewakili tugas dengan menyetel jenis status ke Task
dan dengan menyediakan tugas dengan Amazon Resource Name (ARN) aktivitas, fungsi Lambda, atau titik akhir HTTPSAPI.
Memanggil fungsi dengan Argumen JSONata
Definisi status Tugas berikut (JSONata) memanggil fungsi Lambda bernama. priceWatcher
Perhatikan penggunaan JSONata ekspresi untuk menanyakan data masukan yang akan digunakan dalam Argumen dan hasil tugas di bidang penetapan.
"Get Current Price": {
"Type": "Task",
"QueryLanguage" : "JSONata",
"Resource": "arn:aws:states:::lambda:invoke",
"Next": "Check Price",
"Arguments": {
"Payload": {
"product": "{% $states.context.Execution.Input.product %}"
},
"FunctionName": "arn:aws:lambda:<region>:123456789012:function:priceWatcher:$LATEST"
},
"Assign": {
"currentPrice": "{% $states.result.Payload.current_price %}"
}
}
Memanggil fungsi dengan Parameter JSONPath
Definisi status Tugas berikut (JSONPath) memanggil fungsi Lambda bernama. HelloFunction
"Lambda Invoke": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"Payload.$": "$",
"FunctionName": "arn:aws:lambda:us-east-2
:123456789012
:function:HelloFunction
:$LATEST"
},
"End": true
}
Tipe tugas
Step Functions mendukung jenis tugas berikut yang dapat Anda tentukan dalam definisi status Tugas:
Anda menentukan jenis tugas dengan menyediakannya ARN di Resource
bidang definisi status Tugas. Contoh berikut menunjukkan sintaks Resource
bidang. Semua jenis Tugas kecuali salah satu yang memanggil HTTPSAPI, gunakan sintaks berikut. Untuk informasi tentang sintaks HTTP Tugas, lihatPanggilan HTTPS APIs dalam alur kerja Step Functions.
Dalam definisi status Tugas Anda, ganti teks yang dicetak miring dalam sintaks berikut dengan informasi khusus sumber daya. AWS
arn:partition
:service
:region
:account
:task_type
:name
Daftar berikut menjelaskan komponen individual dalam sintaks ini:
-
partition
adalah AWS Step Functions partisi yang digunakan, paling umumaws
. -
service
menunjukkan yang Layanan AWS digunakan untuk menjalankan tugas, dan dapat menjadi salah satu dari nilai-nilai berikut:-
states
untuk aktivitas. -
lambda
untuk Fungsi Lambda. Jika Anda mengintegrasikan dengan yang lain Layanan AWS, misalnya, Amazon SNS atau Amazon DynamoDB, gunakan atau.sns
dynamodb
-
-
region
adalah kode AWS Wilayah di mana aktivitas Step Functions atau jenis mesin status, fungsi Lambda, atau AWS sumber daya lainnya telah dibuat. -
account
adalah Akun AWS ID di mana Anda telah mendefinisikan sumber daya. -
task_type
adalah tipe tugas untuk dijalankan. Ini bisa menjadi salah satu nilai berikut:-
activity
– Aktivitas. -
function
– Fungsi Lambda. -
– Nama layanan terhubung yang didukung (lihat Mengintegrasikan layanan dengan Step Functions).servicename
-
-
name
adalah nama sumber daya terdaftar (nama aktivitas, nama fungsi Lambda, atau API tindakan layanan).
catatan
Step Functions tidak mendukung referensi ARNs di seluruh partisi atau wilayah. Misalnya, tidak aws-cn
dapat memanggil tugas di aws
partisi, dan sebaliknya.
Bagian berikut menyediakan detail selengkapnya tentang setiap tipe tugas.
Aktifitas
Aktivitas menunjukkan pekerja (proses atau thread), diimplementasikan dan di-hosting oleh Anda, yang melakukan tugas tertentu. Aktivitas hanya didukung oleh Alur Kerja standar, tidak Alur Kerja Ekspres.
Aktivitas Resource
ARNs menggunakan sintaks berikut.
arn:partition
:states:region
:account
:activity:name
catatan
Anda harus membuat aktivitas dengan Step Functions (menggunakan konsol CreateActivity, API action, atau Step Functions
Untuk informasi selengkapnya tentang cara membuat aktivitas dan mengimplementasikan pekerja, lihat Aktivitas.
Fungsi Lambda
Tugas Lambda menjalankan fungsi menggunakan. AWS Lambda Untuk menentukan fungsi Lambda, gunakan fungsi Lambda di lapangan. ARN Resource
Bergantung pada jenis integrasi (Integrasi atau AWS SDKintegrasi yang dioptimalkan) yang Anda gunakan untuk menentukan fungsi Lambda, sintaks bidang fungsi Lambda Anda bervariasi. Resource
Sintaks Resource
bidang berikut adalah contoh integrasi yang dioptimalkan dengan fungsi Lambda.
"arn:aws:states:::lambda:invoke"
Sintaks Resource
bidang berikut adalah contoh AWS SDK integrasi dengan fungsi Lambda.
"arn:aws:states:::aws-sdk:lambda:invoke"
Definisi Task
status berikut menunjukkan contoh integrasi yang dioptimalkan dengan fungsi Lambda bernama. HelloWorld
"LambdaState": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"OutputPath": "$.Payload",
"Parameters": {
"Payload.$": "$",
"FunctionName": "arn:aws:lambda:us-east-1:function:HelloWorld:$LATEST
"
},
"Next": "NextState"
}
Setelah fungsi Lambda yang ditentukan di Resource
bidang selesai, outputnya dikirim ke status yang diidentifikasi di Next
bidang (” “). NextState
A didukung Layanan AWS
Saat Anda mereferensikan sumber daya yang terhubung, Step Functions langsung memanggil API tindakan layanan yang didukung. Tentukan layanan dan tindakan di bidang Resource
.
Layanan yang terhubung Resource
ARNs menggunakan sintaks berikut.
arn:partition
:states:region
:account
:servicename
:APIname
catatan
Untuk membuat koneksi sinkron ke sumber daya yang terhubung, tambahkan .sync
APIname
entri di file. ARN Untuk informasi selengkapnya, lihat Integrasi layanan .
Sebagai contoh:
{
"StartAt": "BATCH_JOB",
"States": {
"BATCH_JOB": {
"Type": "Task",
"Resource": "arn:aws:states:::batch:submitJob.sync",
"Parameters": {
"JobDefinition": "preprocessing",
"JobName": "PreprocessingBatchJob",
"JobQueue": "SecondaryQueue",
"Parameters.$": "$.batchjob.parameters",
"RetryStrategy": {
"attempts": 5
}
},
"End": true
}
}
}
Bidang status tugas
Selain bidang status umum, status Task
mempunyai bidang berikut.
-
Resource
(Wajib) -
AURI, terutama ARN yang secara unik mengidentifikasi tugas khusus untuk dieksekusi.
Arguments
(Opsional, JSONata hanya)-
Digunakan untuk meneruskan informasi ke API tindakan sumber daya yang terhubung. Nilai dapat mencakup JSONata ekspresi. Untuk informasi selengkapnya, lihat Mengubah data dengan Step JSONata Functions.
Output
(Opsional, JSONata hanya)-
Digunakan untuk menentukan dan mengubah output dari negara. Ketika ditentukan, nilai mengesampingkan default output status.
Bidang output menerima JSON nilai apa pun (objek, array, string, angka, boolean, null). Nilai string apa pun, termasuk yang ada di dalam objek atau array, akan dievaluasi JSONata seolah-olah dikelilingi oleh karakter {%%}.
Output juga menerima JSONata ekspresi secara langsung, misalnya: “Output”: “{% jsonata expression%}”
Untuk informasi selengkapnya, lihat Pemrosesan Input dan Output.
Parameters
(Opsional, JSONPath hanya)-
Digunakan untuk meneruskan informasi ke API tindakan sumber daya yang terhubung. Parameter dapat menggunakan campuran statis JSON dan JsonPath
. Untuk informasi selengkapnya, lihat Meneruskan parameter ke layanan API di Step Functions. Credentials
(Opsional)-
Menentukan peran target peran eksekusi mesin negara harus mengasumsikan sebelum memanggil yang ditentukan.
Resource
Atau, Anda juga dapat menentukan JSONPath nilai atau fungsi intrinsik yang menyelesaikan IAM peran ARN saat runtime berdasarkan input eksekusi. Jika Anda menentukan JSONPath nilai, Anda harus mengawalnya dengan$.
notasi.Untuk contoh menggunakan bidang ini di
Task
negara bagian, lihatContoh bidang Kredensial status tugas. Untuk contoh menggunakan bidang ini untuk mengakses AWS sumber daya lintas akun dari mesin status Anda, lihatMengakses lintas akun AWS sumber daya di Step Functions.catatan
Bidang ini didukung oleh Tipe tugas yang menggunakan fungsi Lambda dan layanan yang didukung AWS.
-
ResultPath
(Opsional, JSONPath hanya) -
Menentukan tempat (dalam input) untuk meletakkan hasil eksekusi tugas yang ditentukan di
Resource
. Input kemudian difilter sebagaimana ditentukan oleh bidangOutputPath
(jika ada) sebelum digunakan sebagai output status. Untuk informasi selengkapnya, lihat Pemrosesan Input dan Output. -
ResultSelector
(Opsional, JSONPath hanya) -
Teruskan koleksi pasangan nilai kunci, tempat nilai-nilai bersifat statis atau dipilih dari hasil. Untuk informasi selengkapnya, lihat ResultSelector.
-
Retry
(Opsional) -
Array objek yang disebut Retriers, yang menentukan kebijakan percobaan ulang jika status menemukan kesalahan waktu aktif. Untuk informasi selengkapnya, lihat Nyatakan contoh mesin menggunakan Coba Ulang dan menggunakan Catch.
-
Catch
(Opsional) -
Array objek, disebut Catch yang menentukan status fallback. Status ini dijalankan jika status menemukan kesalahan waktu aktif dan kebijakan percobaan ulang habis atau tidak ditentukan. Untuk informasi selengkapnya, lihat Status Fallback.
-
TimeoutSeconds
(Opsional) -
Menentukan waktu maksimum aktivitas atau tugas dapat berjalan sebelum waktu habis dengan States.Timeout kesalahan dan gagal. Nilai batas waktu harus positif, bilangan bulat bukan nol. Nilai default-nya adalah
99999999
.Hitungan batas waktu dimulai setelah tugas dimulai, misalnya, kapan
ActivityStarted
atauLambdaFunctionStarted
peristiwa dicatat dalam riwayat peristiwa eksekusi. Untuk Aktivitas, penghitungan dimulai saatGetActivityTask
menerima token danActivityStarted
dicatat dalam riwayat peristiwa eksekusi.Saat tugas dimulai, Step Functions menunggu respons sukses atau gagal dari tugas atau pekerja aktivitas dalam
TimeoutSeconds
durasi yang ditentukan. Jika pekerja tugas atau aktivitas gagal merespons dalam waktu ini, Step Functions menandai eksekusi alur kerja sebagai gagal.catatan
HTTPbatas waktu tugas memiliki maksimum 60 detik, bahkan jika
TimeoutSeconds
melebihi batas itu. Lihat Kuota yang terkait dengan Tugas HTTP -
TimeoutSecondsPath
(Opsional, JSONPath hanya) -
Jika Anda ingin memberikan nilai waktu habis dinamis dari input status menggunakan jalur referensi, gunakan
TimeoutSecondsPath
. Ketika diselesaikan, jalur referensi harus memilih bidang yang nilainya adalah bilangan bulat positif.catatan
Suatu
Task
negara tidak dapat mencakup keduanyaTimeoutSeconds
danTimeoutSecondsPath
. HTTPbatas waktu tugas memiliki maksimum 60 detik, bahkan jikaTimeoutSecondsPath
nilainya melebihi batas itu. -
HeartbeatSeconds
(Opsional) -
Menentukan frekuensi sinyal detak jantung yang dikirim pekerja aktivitas selama pelaksanaan tugas. Detak jantung menunjukkan bahwa suatu tugas masih berjalan dan perlu lebih banyak waktu untuk menyelesaikannya. Detak jantung mencegah aktivitas atau tugas dari waktu habis dalam durasi.
TimeoutSeconds
HeartbeatSeconds
harus berupa nilai bilangan bulat positif, bukan nol kurang dari nilaiTimeoutSeconds
bidang. Nilai default-nya adalah99999999
. Jika lebih banyak waktu dari detik yang ditentukan berlalu antara detak jantung dari tugas, status Tugas gagal dengan kesalahan. States.TimeoutUntuk Aktivitas, penghitungan dimulai saat
GetActivityTask
menerima token danActivityStarted
dicatat dalam riwayat peristiwa eksekusi. -
HeartbeatSecondsPath
(Opsional, JSONPath hanya) -
Jika Anda ingin memberikan nilai heartbeat secara dinamis dari input status menggunakan jalur referensi, gunakan
HeartbeatSecondsPath
. Ketika diselesaikan, jalur referensi harus memilih bidang yang nilainya adalah bilangan bulat positif.catatan
Suatu
Task
negara tidak dapat mencakup keduanyaHeartbeatSeconds
danHeartbeatSecondsPath
.
Status Task
harus mengatur salah satu bidang End
ke true
jika status mengakhiri eksekusi, atau harus memberikan status di bidang Next
yang dijalankan ketika status Task
selesai.
Contoh definisi status tugas
Contoh berikut menunjukkan bagaimana Anda dapat menentukan definisi status Tugas berdasarkan kebutuhan Anda.
Interval waktu habis dan heartbeat status tugas
Ini adalah praktik terbaik untuk mengatur nilai waktu habis dan interval heartbeat untuk aktivitas yang berjalan lama. Hal ini dapat dilakukan dengan menentukan nilai batas waktu dan heartbeat, atau dengan mengaturnya secara dinamis.
Contoh notifikasi waktu habis dan heartbeat statis
Saat HelloWorld
selesai, status berikutnya (di sini disebut NextState
) akan dijalankan.
Jika tugas ini gagal diselesaikan dalam waktu 300 detik, atau tidak mengirim notifikasi heartbeat dalam interval 60 detik, tugas ditandai sebagai failed
.
"ActivityState": {
"Type": "Task",
"Resource": "arn:aws:states:us-east-1:123456789012:activity:HelloWorld",
"TimeoutSeconds": 300,
"HeartbeatSeconds": 60,
"Next": "NextState"
}
Contoh notifikasi waktu habis dan heartbeat tugas dinamis
Dalam contoh ini, ketika AWS Glue pekerjaan selesai, status berikutnya akan dijalankan.
Jika tugas ini gagal diselesaikan dalam interval yang ditetapkan secara dinamis oleh AWS Glue
pekerjaan, tugas ditandai sebagaifailed
.
"GlueJobTask": {
"Type": "Task",
"Resource": "arn:aws:states:::glue:startJobRun.sync",
"Parameters": {
"JobName": "myGlueJob"
},
"TimeoutSecondsPath": "$.params.maxTime",
"Next": "NextState"
}
Contoh bidang Kredensial status tugas
Menentukan peran hard-code IAM ARN
Contoh berikut menentukan IAM peran target yang harus diasumsikan oleh peran eksekusi mesin status untuk mengakses fungsi Lambda lintas akun bernama. Echo
Dalam contoh ini, peran target ARN ditentukan sebagai nilai hard-code.
{
"StartAt": "Cross-account call",
"States": {
"Cross-account call": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Credentials": {
"RoleArn": "arn:aws:iam::111122223333:role/LambdaRole"
},
"Parameters": {
"FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:Echo
"
},
"End": true
}
}
}
Menentukan JSONPath sebagai peran IAM ARN
Contoh berikut menentukan JSONPath nilai, yang akan menyelesaikan IAM peran ARN saat runtime.
{
"StartAt": "Lambda",
"States": {
"Lambda": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Credentials": {
"RoleArn.$": "$.roleArn"
},
...
}
}
}
Menentukan fungsi intrinsik sebagai peran IAM ARN
Contoh berikut menggunakan fungsi States.Formatintrinsik, yang menyelesaikan peran saat runtime. IAM ARN
{
"StartAt": "Lambda",
"States": {
"Lambda": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Credentials": {
"RoleArn.$": "States.Format('arn:aws:iam::{}:role/ROLENAME', $.accountId)"
},
...
}
}
}