Integrasikan AWS Lambda dalam mesin status Step Functions dengan Amazon SQS dan Amazon SNS - AWS Step Functions

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

Integrasikan AWS Lambda dalam mesin status Step Functions dengan Amazon SQS dan Amazon SNS

Proyek sampel ini menunjukkan cara mengintegrasikan AWS Lambda fungsi dalam mesin status Step Functions.

Dalam proyek ini, Step Functions menggunakan fungsi Lambda untuk memeriksa harga saham dan menentukan rekomendasi perdagangan beli atau jual. Pengguna kemudian memberikan rekomendasi ini dan dapat memilih apakah akan membeli atau menjual saham. Hasil perdagangan dikembalikan menggunakan SNS topik.

Untuk informasi selengkapnya tentang integrasi layanan Step Functions, lihat hal berikut:

catatan

Proyek sampel ini mungkin dikenakan biaya.

Untuk AWS pengguna baru, tingkat penggunaan gratis tersedia. Pada tingkat ini, layanan akan gratis di bawah tingkat penggunaan tertentu. Untuk informasi selengkapnya tentang AWS biaya dan tingkat gratis, lihat Harga.

Langkah 1: Buat mesin negara bagian dan sumber daya penyediaan

  1. Buka Konsol Step Functions dan pilih Buat mesin status.

  2. Ketik Orchestrate Lambda functions di kotak pencarian, lalu pilih Orkestrasi Lambda fungsi dari hasil pencarian yang dikembalikan.

  3. Pilih Next untuk melanjutkan.

  4. Step Functions mencantumkan yang AWS layanan digunakan dalam proyek sampel yang Anda pilih. Ini juga menunjukkan grafik alur kerja untuk proyek sampel. Menyebarkan proyek ini ke Anda Akun AWS atau menggunakannya sebagai titik awal untuk membangun proyek Anda sendiri. Berdasarkan cara Anda ingin melanjutkan, pilih Jalankan demo atau Bangun di atasnya.

    Proyek contoh ini menyebarkan sumber daya berikut:

    • Lima Lambda fungsi

    • Amazon Simple Queue ServiceAntrian

    • Sebuah Amazon Simple Notification Service topik

    • Mesin status AWS Step Functions

    • Peran terkait AWS Identity and Access Management (IAM)

    Gambar berikut menunjukkan grafik alur kerja untuk proyek contoh fungsi Orchestrate Lambda:

    Grafik alur kerja dari proyek sampel fungsi Orchestrate. Lambda
  5. Pilih Gunakan templat untuk melanjutkan pilihan Anda.

  6. Lakukan salah satu hal berikut ini:

    • Jika Anda memilih Build on it, Step Functions akan membuat prototipe alur kerja, tetapi tidak menyebarkan sumber daya dalam definisi alur kerja, sehingga Anda dapat terus membangun prototipe alur kerja Anda.

      Di Workflow StudioMode desain, Anda dapat menambahkan status ke dalam prototipe alur kerja Anda. Atau, Anda dapat beralih ke Mode kode untuk menggunakan editor kode terintegrasi untuk mengedit definisi Amazon States Language (ASL) mesin status Anda dari konsol Step Functions.

      penting

      Anda mungkin perlu memperbarui placeholder Amazon Resource Name (ARN) untuk sumber daya yang digunakan dalam proyek sampel sebelum Anda dapat menjalankan alur kerja Anda.

    • Jika Anda memilih Jalankan demo, Step Functions akan membuat proyek hanya-baca yang menggunakan AWS CloudFormation templat untuk menyebarkan AWS sumber daya dalam templat tersebut ke templat Anda. Akun AWS Anda dapat melihat definisi mesin status dengan memilih mode Kode.

      Pilih Deploy dan jalankan untuk menyebarkan proyek dan membuat sumber daya.

      Perhatikan bahwa penerapan dapat memakan waktu hingga 10 menit untuk sumber daya dan IAM izin dibuat. Saat sumber daya Anda sedang digunakan, Anda dapat membuka tautan AWS CloudFormation Stack ID untuk melihat sumber daya mana yang sedang disediakan.

      Setelah semua sumber daya dibuat, Anda akan melihat proyek di halaman mesin Negara di konsol.

      penting

      Biaya standar mungkin berlaku untuk setiap layanan yang digunakan dalam CloudFormation templat.

Langkah 2: Jalankan mesin negara

Setelah semua sumber daya disediakan dan digunakan, kotak dialog Mulai eksekusi ditampilkan.

  1. Pada halaman mesin Negara, pilih proyek sampel Anda.

  2. Pada halaman proyek sampel, pilih Mulai eksekusi.

  3. Dalam kotak dialog Mulai eksekusi, lakukan hal berikut:

    1. (Opsional) Untuk mengidentifikasi eksekusi Anda, Anda dapat menentukan nama, atau menggunakan nama eksekusi default yang dihasilkan.

      catatan

      Step Functions menerima nama untuk mesin negara, eksekusi, aktivitas, dan label yang berisi ASCII non-karakter. Karena nama dengan ASCII non-karakter tidak akan berfungsi dengan Amazon CloudWatch, sebaiknya gunakan hanya ASCII charcter sehingga Anda dapat melacak metrik. CloudWatch

    2. (Opsional) Dalam kotak Input, masukkan nilai input dalam JSON format untuk menjalankan alur kerja Anda.

      Jika Anda memilih untuk Menjalankan demo, Anda tidak perlu memberikan input eksekusi apa pun.

      catatan

      Jika proyek demo yang Anda gunakan berisi data input eksekusi yang telah diisi sebelumnya, gunakan input tersebut untuk menjalankan mesin status.

    3. Pilih Mulai Eksekusi.

    4. Konsol Step Functions mengarahkan Anda ke halaman yang berjudul dengan ID eksekusi Anda. Halaman ini dikenal sebagai halaman Detail Eksekusi. Di halaman ini, Anda dapat meninjau hasil eksekusi saat eksekusi berlangsung atau setelah selesai.

      Untuk meninjau hasil eksekusi, pilih status individual pada tampilan Grafik, lalu pilih tab individual di Detail langkah panel untuk melihat detail setiap status termasuk input, output, dan definisi masing-masing. Untuk detail tentang informasi eksekusi yang dapat Anda lihat di halaman Rincian Eksekusi, lihatHalaman Detail Eksekusi - Ikhtisar antarmuka.

Tentang mesin negara dan pelaksanaannya

Mesin status dalam proyek sampel ini terintegrasi AWS Lambda dengan meneruskan parameter langsung ke sumber daya tersebut, menggunakan SQS antrian Amazon untuk mengelola permintaan persetujuan manusia, dan menggunakan SNS topik Amazon untuk mengembalikan hasil kueri.

Eksekusi Step Functions menerima JSON teks sebagai input dan meneruskan input tersebut ke status pertama dalam alur kerja. Setiap negara menerima JSON data sebagai input dan biasanya meneruskan JSON data sebagai output ke status berikutnya. Dalam proyek sampel ini, output dari setiap langkah diteruskan sebagai input ke langkah berikutnya dalam alur kerja. Misalnya, langkah rekomendasi Hasilkan Beli/Jual menerima output dari langkah Periksa Harga Saham sebagai masukan. Selanjutnya, output dari langkah rekomendasi Generate Beli/Sell diteruskan sebagai masukan ke langkah berikutnya, Request Human Approval, yang meniru langkah persetujuan manusia.

catatan

Untuk melihat output yang dikembalikan secara bertahap dan input diteruskan ke langkah, buka halaman Rincian Eksekusi untuk eksekusi alur kerja Anda. Di bagian Detail langkah, lihat input dan output untuk setiap langkah yang Anda pilih dalam mode Lihat.

Untuk menerapkan langkah persetujuan manusia, Anda biasanya menjeda eksekusi alur kerja hingga token tugas dikembalikan. Dalam proyek contoh ini, pesan diteruskan ke SQS antrean Amazon, yang digunakan sebagai pemicu fungsi Lambda yang ditentukan untuk menangani fungsionalitas panggilan balik. Pesan berisi token tugas dan output yang dikembalikan oleh langkah sebelumnya. Fungsi Lambda dipanggil dengan muatan pesan. Eksekusi alur kerja dijeda hingga menerima token tugas kembali dengan panggilan. SendTaskSuccessAPI Untuk informasi selengkapnya tentang token tugas, lihatTunggu Panggilan Balik dengan Token Tugas.

Kode berikut untuk StepFunctionsSample-HelloLambda-ApproveSqsLambda fungsi ini menunjukkan cara didefinisikan untuk secara otomatis menyetujui tugas apa pun yang dikirimkan oleh SQS antrian Amazon melalui mesin status Step Functions.

exports.lambdaHandler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); // For every record in sqs queue for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"approved\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); // Approve stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };

Jelajahi contoh mesin status ini untuk melihat bagaimana Step Functions mengontrol Lambda dan Amazon. SQS

Untuk informasi selengkapnya tentang AWS Step Functions cara mengontrol AWS layanan lain, lihatMengintegrasikan layanan lain dengan Step Functions.

{ "StartAt": "Check Stock Price", "States": { "Check Stock Price": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Next": "Generate Buy/Sell recommendation" }, "Generate Buy/Sell recommendation": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "ResultPath": "$.recommended_type", "Next": "Request Human Approval" }, "Request Human Approval": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-west-1.amazonaws.com/111122223333/StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-777788889999", "MessageBody": { "Input.$": "$", "TaskToken.$": "$$.Task.Token" } }, "ResultPath": null, "Next": "Buy or Sell?" }, "Buy or Sell?": { "Type": "Choice", "Choices": [ { "Variable": "$.recommended_type", "StringEquals": "buy", "Next": "Buy Stock" }, { "Variable": "$.recommended_type", "StringEquals": "sell", "Next": "Sell Stock" } ] }, "Buy Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-000000000000", "Next": "Report Result" }, "Sell Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-111111111111", "Next": "Report Result" }, "Report Result": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "TopicArn": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "Message": { "Input.$": "$" } }, "End": true } } }

Untuk informasi tentang cara mengonfigurasi IAM saat menggunakan Step Functions dengan AWS layanan lain, lihatBagaimana Step Functions menghasilkan IAM kebijakan untuk layanan terintegrasi.

IAMContoh

Kebijakan contoh AWS Identity and Access Management (IAM) yang dihasilkan oleh proyek sampel ini mencakup hak istimewa paling sedikit yang diperlukan untuk mengeksekusi mesin negara dan sumber daya terkait. Kami menyarankan Anda hanya menyertakan izin yang diperlukan dalam IAM kebijakan Anda.

{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-777788889999", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-000000000000", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sqs:SendMessage*" ], "Resource": "arn:aws:sqs:us-west-1:111122223333:StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-111111111111", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "Effect": "Allow" } ] }

Untuk informasi tentang cara mengonfigurasi IAM saat menggunakan Step Functions dengan AWS layanan lain, lihatBagaimana Step Functions menghasilkan IAM kebijakan untuk layanan terintegrasi.