Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Temukan pola integrasi layanan di Step Functions
AWS Step Functions terintegrasi dengan layanan langsung di Amazon States Language. Anda dapat mengontrol ini AWS layanan menggunakan tiga pola integrasi layanan:
-
Panggil layanan dan biarkan Step Functions maju ke status berikutnya segera setelah mendapat HTTP respons.
-
Memanggil layanan dan membuat Step Functions menunggu tugas untuk diselesaikan.
-
Memanggil layanan dengan token tugas dan membuat Step Functions menunggu sampai token tersebut dikembalikan dengan muatan.
Masing-masing pola integrasi layanan ini dikendalikan oleh cara Anda membuat URI di "Resource"
bidang definisi tugas Anda.
Cara Memanggil Layanan Terintegrasi
Untuk informasi tentang konfigurasi AWS Identity and Access Management (IAM) untuk layanan terintegrasi, lihatBagaimana Step Functions menghasilkan IAM kebijakan untuk layanan terintegrasi.
Dukungan pola integrasi
Alur Kerja Standar dan Alur Kerja Ekspres mendukung integrasi yang sama tetapi bukan pola integrasi yang sama.
-
Alur Kerja Standar mendukung integrasi Respons Permintaan. Layanan tertentu mendukung Run a Job (.sync), atau Wait for Callback (. waitForTaskToken), dan keduanya dalam beberapa kasus. Lihat tabel integrasi yang dioptimalkan berikut untuk detailnya.
-
Alur Kerja Ekspres hanya mendukung integrasi Respons Permintaan.
Untuk membantu memutuskan di antara kedua jenis, lihatMemilih jenis alur kerja di Step Functions.
AWS SDKIntegrasi dalam Step Functions
Layanan terintegrasi | Minta Respons | Jalankan Pekerjaan - .sync | Tunggu Callback -. waitForTaskToken |
---|---|---|---|
Lebih dari dua ratus layanan | Standar & Ekspres | Tidak didukung | Standar |
Integrasi yang dioptimalkan dalam Step Functions
Layanan terintegrasi | Minta Respons | Jalankan Pekerjaan - .sync | Tunggu Callback -. waitForTaskToken |
---|---|---|---|
Amazon API Gateway | Standar & Ekspres | Tidak didukung | Standar |
Amazon Athena | Standar & Ekspres | Standar | Tidak didukung |
AWS Batch | Standar & Ekspres | Standar | Tidak didukung |
Amazon Bedrock | Standar & Ekspres | Standar | Standar |
AWS CodeBuild | Standar & Ekspres | Standar | Tidak didukung |
Amazon DynamoDB | Standar & Ekspres | Tidak didukung | Tidak didukung |
Amazon ECS/Fargate | Standar & Ekspres | Standar | Standar |
Amazon EKS | Standar & Ekspres | Standar | Standar |
Amazon EMR | Standar & Ekspres | Standar | Tidak didukung |
Amazon EMR on EKS | Standar & Ekspres | Standar | Tidak didukung |
Amazon EMR Serverless | Standar & Ekspres | Standar | Tidak didukung |
Amazon EventBridge | Standar & Ekspres | Tidak didukung | Standar |
AWS Glue | Standar & Ekspres | Standar | Tidak didukung |
AWS Glue DataBrew | Standar & Ekspres | Standar | Tidak didukung |
AWS Lambda | Standar & Ekspres | Tidak didukung | Standar |
AWS Elemental MediaConvert | Standar & Ekspres | Standar | Tidak didukung |
Amazon SageMaker | Standar & Ekspres | Standar | Tidak didukung |
Amazon SNS | Standar & Ekspres | Tidak didukung | Standar |
Amazon SQS | Standar & Ekspres | Tidak didukung | Standar |
AWS Step Functions | Standar & Ekspres | Standar | Standar |
Minta Respons
Ketika Anda menentukan layanan dalam "Resource"
string status tugas Anda, dan Anda hanya menyediakan sumber daya, Step Functions akan menunggu HTTP respons dan kemudian melanjutkan ke status berikutnya. Step Functions tidak akan menunggu tugas selesai.
Contoh berikut menunjukkan bagaimana Anda dapat mempublikasikan SNS topik Amazon.
"Send message to SNS":{
"Type":"Task",
"Resource":"arn:aws:states:::sns:publish",
"Parameters":{
"TopicArn":"arn:aws:sns:us-east-1:123456789012:myTopic",
"Message":"Hello from Step Functions!"
},
"Next":"NEXT_STATE"
}
Contoh ini merujuk pada Publish API of AmazonSNS. Alur kerja berlanjut ke status berikutnya setelah memanggil file. Publish
API
Tip
Untuk menerapkan alur kerja sampel yang menggunakan pola integrasi layanan Request Response ke Akun AWS, lihat Modul 2 - Minta Respons
Jalankan Tugas (.sync)
Untuk layanan terintegrasi seperti AWS Batch dan AmazonECS, Step Functions dapat menunggu permintaan selesai sebelum melanjutkan ke status berikutnya. Agar Step Functions menunggu, tentukan "Resource"
bidang dalam definisi status tugas Anda dengan .sync
akhiran yang ditambahkan setelah sumber daya. URI
Misalnya, saat mengirimkan AWS Batch job, gunakan "Resource"
bidang dalam definisi mesin negara seperti yang ditunjukkan dalam contoh ini.
"Manage Batch task": {
"Type": "Task",
"Resource": "arn:aws:states:::batch:submitJob.sync",
"Parameters": {
"JobDefinition": "arn:aws:batch:us-east-2:123456789012:job-definition/testJobDefinition",
"JobName": "testJob",
"JobQueue": "arn:aws:batch:us-east-2:123456789012:job-queue/testQueue"
},
"Next": "NEXT_STATE"
}
Setelah .sync
bagian ditambahkan ke sumber daya Amazon Resource Name (ARN) berarti Step Functions menunggu pekerjaan selesai. Setelah menelepon AWS Batch
submitJob
, alur kerja berhenti. Ketika tugas selesai, Step Functions maju ke status berikutnya. Untuk informasi lebih lanjut, lihat AWS Batch proyek sampel:Kelola pekerjaan batch dengan AWS Batch and Amazon SNS.
Jika tugas menggunakan ini (.sync
) pola integrasi layanan dibatalkan, dan Step Functions tidak dapat membatalkan tugas, Anda mungkin dikenakan biaya tambahan dari layanan terintegrasi. Sebuah tugas dapat dibatalkan jika:
-
Eksekusi mesin status dihentikan.
-
Cabang tatus Paralel yang berbeda gagal dengan kesalahan yang tidak tertangkap.
-
Perulangan dari Status Peta gagal dengan kesalahan yang tidak tertangkap.
Step Functions akan membuat upaya terbaik untuk membatalkan tugas. Misalnya, jika states:startExecution.sync
tugas Step Functions dibatalkan, itu akan memanggil StopExecution
API tindakan Step Functions. Namun, ada kemungkinan bahwa Step Functions akan dapat membatalkan tugas. Alasan tersebut termasuk, namun tidak terbatas pada:
-
Peran IAM eksekusi Anda tidak memiliki izin untuk melakukan API panggilan yang sesuai.
-
Terjadi pemadaman layanan sementara.
Saat Anda menggunakan pola integrasi .sync
layanan, Step Functions menggunakan polling yang menggunakan kuota dan peristiwa yang ditetapkan untuk memantau status pekerjaan. Untuk .sync
pemanggilan dalam akun yang sama, Step Functions menggunakan EventBridge peristiwa dan polling APIs yang Anda tentukan dalam status. Task
Untuk .sync
pemanggilan lintas akun, Step Functions hanya menggunakan polling. Misalnya, untukstates:StartExecution.sync
, Step Functions melakukan polling pada DescribeExecutionAPIdan menggunakan kuota yang Anda tetapkan.
Tip
Untuk menerapkan alur kerja contoh yang menggunakan pola integrasi layanan Run a Job (.sync) ke Akun AWS, lihat Modul 3 - Jalankan Job (.sync)
Untuk melihat daftar dukungan layanan terintegrasi yang menunggu tugas selesai (.sync
), lihat Mengintegrasikan layanan dengan Step Functions.
catatan
Integrasi layanan yang menggunakan .waitForTaskToken
pola .sync
atau memerlukan IAM izin tambahan. Untuk informasi selengkapnya, lihat Bagaimana Step Functions menghasilkan IAM kebijakan untuk layanan terintegrasi.
Dalam beberapa kasus, Anda mungkin ingin Step Functions melanjutkan alur kerja Anda sebelum pekerjaan selesai sepenuhnya. Anda dapat mencapai ini dengan cara yang sama seperti saat menggunakan pola integrasi Tunggu Callback dengan Task Token layanan. Untuk melakukan ini, berikan token tugas ke pekerjaan Anda, lalu kembalikan menggunakan SendTaskFailure
APIpanggilan SendTaskSuccess
atau. Step Functions akan menggunakan data yang Anda berikan dalam panggilan tersebut untuk menyelesaikan tugas, berhenti memantau pekerjaan, dan melanjutkan alur kerja.
Tunggu Callback dengan Task Token
Tugas panggilan balik menyediakan cara untuk menjeda alur kerja sampai token tugas dikembalikan. Tugas mungkin perlu menunggu persetujuan seseorang, mengintegrasikan dengan pihak ketiga, atau memanggil sistem warisan. Untuk tugas seperti ini, Anda dapat menjeda Step Functions hingga eksekusi alur kerja mencapai kuota layanan satu tahun (lihat,Kuota terkait throttling status), dan menunggu proses eksternal atau alur kerja selesai. Untuk situasi ini Step Functions memungkinkan Anda untuk meneruskan token tugas ke AWS SDKintegrasi layanan, dan juga untuk beberapa Integrasi layanan yang dioptimalkan. Tugas akan terjeda sampai menerima token tugas yang dikembalikan dengan panggilan SendTaskSuccess
atau SendTaskFailure
.
Jika Task
status yang menggunakan token tugas panggilan balik habis, token acak baru akan dihasilkan. Anda dapat mengakses token tugas dari objek konteks.
catatan
Token tugas harus berisi setidaknya satu karakter, dan tidak dapat melebihi 1024 karakter.
Untuk digunakan .waitForTaskToken
dengan AWS SDKintegrasi, yang API Anda gunakan harus memiliki bidang parameter untuk menempatkan token tugas.
catatan
Anda harus melewati token tugas dari prinsipal dalam hal yang sama AWS akun. Token tidak akan berfungsi jika Anda mengirimnya dari prinsipal dengan cara yang berbeda AWS akun.
Tip
Untuk menerapkan alur kerja sampel yang menggunakan pola integrasi layanan token tugas panggilan balik ke Akun AWS, lihat Modul 4 - Tunggu Callback dengan Token Tugas dari The AWS Step Functions Lokakarya
Untuk melihat daftar dukungan layanan terintegrasi yang menunggu token tugas (.waitForTaskToken
), lihat Mengintegrasikan layanan dengan Step Functions.
Topik
Contoh Token Tugas
Dalam contoh ini, alur kerja Step Functions perlu diintegrasikan dengan layanan mikro eksternal untuk melakukan pemeriksaan kredit sebagai bagian dari alur kerja persetujuan. Step Functions menerbitkan SQS pesan Amazon yang menyertakan token tugas sebagai bagian dari pesan. Sistem eksternal terintegrasi dengan AmazonSQS, dan menarik pesan dari antrian. Ketika selesai, sistem eksternal mengembalikan hasil dan token tugas asli. Step Functions kemudian dilanjutkan dengan alur kerjanya.
"Resource"
Bidang definisi tugas yang mereferensikan Amazon SQS termasuk .waitForTaskToken
ditambahkan ke akhir.
"Send message to SQS": {
"Type": "Task",
"Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken",
"Parameters": {
"QueueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/myQueue",
"MessageBody": {
"Message": "Hello from Step Functions!",
"TaskToken.$": "$$.Task.Token"
}
},
"Next": "NEXT_STATE"
}
Hal tersebut memberitahu Step Functions untuk menjeda dan menunggu token tugas. Bila Anda menentukan sumber daya menggunakan .waitForTaskToken
, token tugas dapat diakses di bidang "Parameters"
ketentuan status Anda dengan penunjukan jalur khusus ($$.Task.Token
). $$.
awal menunjukkan bahwa jalur mengakses objek konteks, dan mendapatkan token tugas untuk tugas saat ini dalam eksekusi yang sedang berjalan.
Setelah selesai, layanan eksternal akan memanggil SendTaskSuccess
atau SendTaskFailure
termasuk dengan taskToken
. Baru setelah itu alur kerja berlanjut ke status berikutnya.
catatan
Untuk menghindari menunggu tanpa batas waktu jika proses gagal untuk mengirim token tugas dengan SendTaskSuccess
atau SendTaskFailure
, lihat Konfigurasikan Batas Waktu Heartbeat untuk Tugas Menunggu.
Dapatkan Token dari Object Konteks
Objek konteks adalah JSON objek internal yang berisi informasi tentang eksekusi Anda. Seperti input status, objek konteks dapat diakses dengan jalur dari bidang "Parameters"
selama eksekusi. Ketika diakses dari dalam ketentuan tugas, objek konteks mencakup informasi tentang eksekusi tertentu, termasuk token tugas.
{
"Execution": {
"Id": "arn:aws:states:us-east-1:123456789012:execution:stateMachineName:executionName",
"Input": {
"key": "value"
},
"Name": "executionName",
"RoleArn": "arn:aws:iam::123456789012:role...",
"StartTime": "2019-03-26T20:14:13.192Z"
},
"State": {
"EnteredTime": "2019-03-26T20:14:13.192Z",
"Name": "Test",
"RetryCount": 3
},
"StateMachine": {
"Id": "arn:aws:states:us-east-1:123456789012:stateMachine:stateMachineName",
"Name": "name"
},
"Task": {
"Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W"
}
}
Anda dapat mengakses token tugas dengan menggunakan jalur khusus dari dalam bidang "Parameters"
dari ketentuan tugas Anda. Untuk mengakses input atau objek konteks, pertama tentukan bahwa parameter akan menjadi jalur dengan menambahkan .$
ke nama parameter. Berikut ini menentukan simpul dari kedua input dan objek konteks dalam spesifikasi "Parameters"
.
"Parameters": {
"Input.$": "$",
"TaskToken.$": "$$.Task.Token"
},
Pada kedua kasus, menambahkan .$
ke nama parameter memberitahu Step Functions untuk mengharapkan jalur. Pada kasus pertama, "$"
adalah jalur yang mencakup seluruh input. pada kasus kedua, $$.
menetapkan bahwa jalur akan mengakses objek konteks, dan $$.Task.Token
menetapkan parameter untuk nilai token tugas dalam objek konteks eksekusi yang sedang berjalan.
Dalam SQS contoh Amazon, .waitForTaskToken
di "Resource"
bidang memberitahu Step Functions untuk menunggu token tugas dikembalikan. "TaskToken.$":
"$$.Task.Token"
Parameter melewati token itu sebagai bagian dari SQS pesan Amazon.
"Send message to SQS": {
"Type": "Task",
"Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken",
"Parameters": {
"QueueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/myQueue",
"MessageBody": {
"Message": "Hello from Step Functions!",
"TaskToken.$": "$$.Task.Token"
}
},
"Next": "NEXT_STATE"
}
Untuk informasi selengkapnya tentang objek konteks, lihat Objek konteks di bagian Memproses input dan output dalam panduan ini.
Konfigurasikan Batas Waktu Heartbeat untuk Tugas Menunggu
Tugas yang menunggu token tugas akan menunggu hingga eksekusi mencapai kuota layanan satu tahun (lihat, Kuota terkait throttling status). Untuk menghindari eksekusi yang macet, Anda dapat mengonfigurasi interval batas waktu heartbeat dalam ketentuan mesin status Anda. Gunakan bidang HeartbeatSeconds untuk menentukan interval batas waktu.
{
"StartAt": "Push to SQS",
"States": {
"Push to SQS": {
"Type": "Task",
"Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken",
"HeartbeatSeconds": 600,
"Parameters": {
"MessageBody": { "myTaskToken.$": "$$.Task.Token" },
"QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/push-based-queue"
},
"ResultPath": "$.SQS",
"End": true
}
}
}
Dalam definisi mesin status ini, tugas mendorong pesan ke Amazon SQS dan menunggu proses eksternal untuk menelepon kembali dengan token tugas yang disediakan. Bidang "HeartbeatSeconds":
600
menetapkan interval batas waktu heartbeat hingga 10 menit. Tugas akan menunggu token tugas dikembalikan dengan salah satu API tindakan ini:
Jika tugas menunggu tidak menerima token tugas yang valid dalam periode 10 menit, tugas tersebut akan gagal dengan nama kesalahan States.Timeout
.
Untuk informasi selengkapnya, lihat Buat contoh pola panggilan balik dengan AmazonSQS, AmazonSNS, dan Lambda proyek sampel tugas panggilan balik.