Pola integrasi layanan - AWS Step Functions

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pola integrasi layanan

AWS Step Functions terintegrasi dengan layanan langsung di Amazon States Language. Anda dapat mengendalikan layanan AWS ini menggunakan tiga pola integrasi layanan:

  • Memanggil layanan dan memungkinkan Step Functions maju ke status berikutnya segera setelah mendapat respons HTTP.

  • 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 bidang "Resource" ketentuan tugas Anda.

Untuk informasi tentang konfigurasi AWS Identity and Access Management (IAM) untuk layanan terintegrasi, lihat. Kebijakan IAM untuk layanan terintegrasi

Minta Tanggapan

Ketika Anda menentukan layanan di string "Resource" status tugas Anda, dan Anda hanya menyediakan sumber daya, Step Functions akan menunggu respons HTTP lalu maju ke status berikutnya. Step Functions tidak akan menunggu tugas selesai.

Contoh berikut menunjukkan cara Anda dapat memublikasikan topik Amazon SNS.

"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 mereferensikan API Publikasikan Amazon SNS. Alur kerja berlangsung ke status berikutnya setelah memanggil API Publish.

Tip

Untuk menerapkan alur kerja sampel yang menggunakan pola integrasi layanan Respons Permintaan ke Anda Akun AWS, lihat Modul 2 - Permintaan Respons Lokakarya. AWS Step Functions

Jalankan Tugas (.sync)

Untuk layanan terintegrasi seperti AWS Batch dan Amazon ECS, Step Functions dapat menunggu permintaan selesai sebelum melanjutkan ke status berikutnya. Untuk membuat Step Functions menunggu, tentukan bidang "Resource" di ketentuan status tugas Anda dengan sufiks .sync yang ditambahkan setelah URI sumber daya.

Misalnya, saat mengirimkan AWS Batch pekerjaan, gunakan "Resource" bidang dalam definisi mesin status 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" }

Saat bagian .sync ditambahkan ke sumber daya Amazon Resource Name (ARN), ini berarti bahwa Step Functions menunggu tugas selesai. Setelah memanggil AWS Batch submitJob, alur kerja dijeda. Ketika tugas selesai, Step Functions maju ke status berikutnya. Untuk informasi lebih lanjut, lihat AWS Batch contoh proyek:Mengelola pekerjaan batch (AWS Batch,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 tugas states:startExecution.sync Step Functions dibatalkan, tugas tersebut akan memanggil tindakan API StopExecution Step Functions. Namun, ada kemungkinan bahwa Step Functions akan dapat membatalkan tugas. Alasan tersebut termasuk, namun tidak terbatas pada:

  • Peran eksekusi IAM Anda tidak memiliki izin untuk membuat panggilan API 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 melakukan polling API yang Anda tentukan dalam status. Task Untuk .sync pemanggilan lintas akun, Step Functions hanya menggunakan polling. Misalnyastates:StartExecution.sync, Step Functions melakukan polling di DescribeExecutionAPI dan menggunakan kuota yang Anda tetapkan.

Tip

Untuk menerapkan alur kerja contoh yang menggunakan pola integrasi layanan Run a Job (.sync) ke Anda Akun AWS, lihat Modul 3 - Jalankan Job (.sync) dari Workshop. AWS Step Functions

Untuk melihat daftar dukungan layanan terintegrasi yang menunggu tugas selesai (.sync), lihat Integrasi yang dioptimalkan untuk Step Functions.

catatan

Integrasi layanan yang menggunakan pola .sync memerlukan izin IAM tambahan. Untuk informasi selengkapnya, lihat Kebijakan IAM 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 Panggilan Balik dengan Token Tugas layanan. Untuk melakukan ini, berikan token tugas ke pekerjaan Anda, lalu kembalikan menggunakan panggilan SendTaskFailureAPI SendTaskSuccessatau. Step Functions akan menggunakan data yang Anda berikan dalam panggilan tersebut untuk menyelesaikan tugas, berhenti memantau pekerjaan, dan melanjutkan alur kerja.

Tunggu Panggilan Balik dengan Token Tugas

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 meneruskan token tugas ke integrasi layanan AWS SDK, dan juga ke 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 menggunakan .waitForTaskToken integrasi AWS SDK, API yang Anda gunakan harus memiliki bidang parameter untuk menempatkan token tugas.

catatan

Anda harus meneruskan token tugas dari kepala sekolah dalam akun yang sama. AWS Token tidak akan berfungsi jika Anda mengirimnya dari kepala sekolah di akun yang berbeda. AWS

Tip

Untuk menerapkan alur kerja sampel yang menggunakan pola integrasi layanan token tugas callback ke Anda Akun AWS, lihat Modul 4 - Tunggu Panggilan Balik dengan Token Tugas Lokakarya. AWS Step Functions

Untuk melihat daftar dukungan layanan terintegrasi yang menunggu token tugas (.waitForTaskToken), lihat Integrasi yang dioptimalkan untuk 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 memublikasikan pesan Amazon SQS yang mencakup token tugas sebagai bagian dari pesan. Sistem eksternal terintegrasi dengan Amazon SQS, dan menarik pesan dari antrean. Ketika selesai, sistem eksternal mengembalikan hasil dan token tugas asli. Step Functions kemudian dilanjutkan dengan alur kerjanya.


            Tugas SQS menunggu token tugas untuk dikembalikan

Bidang "Resource" dari ketentuan tugas yang mereferensikan Amazon SQS termasuk .waitForTaskToken yang 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 objek JSON 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 contoh Amazon SQS, .waitForTaskToken di bidang "Resource" memberitahu Step Functions untuk menunggu token tugas yang akan dikembalikan. Parameter "TaskToken.$": "$$.Task.Token" meneruskan token tersebut sebagai bagian dari pesan Amazon SQS.

"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 Pengolahan 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 ketentuan mesin status ini, tugas mendorong pesan ke Amazon SQS dan menunggu proses eksternal untuk memanggil kembali dengan token tugas yang disediakan. Bidang "HeartbeatSeconds": 600 menetapkan interval batas waktu heartbeat hingga 10 menit. Tugas akan menunggu token tugas yang akan dikembalikan dengan salah satu tindakan API 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 Contoh Pola Panggilan Balik (Amazon SQS, Amazon SNS, Lambda) proyek sampel tugas panggilan balik.