Temukan pola integrasi layanan di Step Functions - AWS Step Functions

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.

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 dari The AWS Step Functions Lokakarya.

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) dari The AWS Step Functions Lokakarya.

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 SendTaskFailureAPIpanggilan SendTaskSuccessatau. 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.

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.

SQStugas menunggu token tugas dikembalikan

"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.