Menggunakan fungsi Lambda untuk melanjutkan eksekusi baru - AWS Step Functions

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

Menggunakan fungsi Lambda untuk melanjutkan eksekusi baru

Anda dapat membuat mesin status yang menggunakan fungsi Lambda untuk memulai eksekusi baru sebelum eksekusi saat ini berakhir. Menggunakan pendekatan ini untuk melanjutkan pekerjaan Anda yang sedang berlangsung dalam eksekusi baru memungkinkan Anda memiliki mesin status yang dapat memecah pekerjaan besar menjadi alur kerja yang lebih kecil, atau memiliki mesin status yang berjalan tanpa batas waktu.

Tutorial ini didasarkan pada konsep penggunaan fungsi Lambda eksternal untuk mengubah alur kerja Anda, yang ditunjukkan dalam tutorial Ulangi loop dengan Lambda. Anda menggunakan fungsi Lambda yang sama (Iterator) untuk mengiterasi putaran untuk beberapa jumlah tertentu. Selain itu, Anda membuat fungsi Lambda lain untuk memulai eksekusi baru dari alur kerja Anda, dan untuk mengurangi hitungan setiap kali memulai eksekusi baru. Dengan mengatur jumlah eksekusi dalam input, mesin status tersebut berakhir dan memulai eksekusi sejumlah waktu tertentu.

Mesin status yang Anda akan buat mengimplementasikan status berikut.

Status Tujuan

ConfigureCount

Status Pass yang mengonfigurasi nilai count, index, dan step yang Fungsi Lambda Iterator gunakan untuk melangkah melalui iterasi pekerjaan.

Iterator

Status Task yang mereferensikan Fungsi Lambda Iterator.

IsCountReached

ChoiceStatus yang menggunakan nilai Boolean dari Iterator fungsi untuk memutuskan apakah mesin status harus melanjutkan pekerjaan contoh, atau pindah ke ShouldRestart status.

ExampleWork

PassNegara yang mewakili Task status yang akan melakukan pekerjaan dalam implementasi aktual.

ShouldRestart

Sebuah Choice negara yang menggunakan executionCount nilai untuk memutuskan apakah itu harus mengakhiri satu eksekusi dan memulai yang lain, atau hanya mengakhiri.

Restart

Status Task yang menggunakan fungsi Lambda untuk memulai eksekusi baru dari mesin status Anda. Seperti fungsi Iterator, fungsi ini juga mengurangi hitungan. RestartNegara meneruskan nilai penghitungan yang dikurangi ke input eksekusi baru.

Prasyarat

Sebelum Anda mulai, ikuti Membuat mesin status Step Functions yang menggunakan Lambda tutorial untuk memastikan bahwa Anda terbiasa menggunakan Lambda dan Step Functions bersama-sama.

Langkah 1: Buat fungsi Lambda untuk mengulangi hitungan

catatan

Jika Anda telah menyelesaikan tutorial Ulangi loop dengan Lambda, Anda dapat melewati langkah ini dan menggunakan fungsi Lambda.

Bagian ini dan Ulangi loop dengan Lambda tutorial menunjukkan bagaimana Anda dapat menggunakan fungsi Lambda untuk melacak hitungan, misalnya, jumlah iterasi loop di mesin status Anda.

Fungsi Lambda berikut menerima nilai input untuk count, index, dan step. Ia mengembalikan nilai-nilai ini dengan index diperbarui dan Boolean bernama continue. Fungsi Lambda mengatur continue ke true jika index kurang dari count.

Mesin status Anda kemudian mengimplementasikan status Choice yang mengeksekusi beberapa logika aplikasi jika continue merupakan true, atau pindah ke ShouldRestart jika continue adalah false.

Buat fungsi Lambda Iterasi

  1. Buka konsol Lambda dan pilih Buat fungsi.

  2. Pilih halaman Buat fungsi, pilih Penulis dari scratch.

  3. Di bagian Informasi dasar, konfigurasikan fungsi Lambda Anda, sebagai berikut:

    1. Untuk Nama fungsi, masukkan Iterator.

    2. Untuk Runtime, pilih Node.js 16.x.

    3. Simpan semua pilihan default pada halaman, lalu pilih Buat fungsi.

      Ketika fungsi Lambda Anda dibuat, buat catatan dari Amazon Resource Name (ARN)nya di sudut kanan atas halaman, misalnya:

      arn:aws:lambda:us-east-1:123456789012:function:Iterator
  4. Salin kode berikut untuk fungsi Lambda ke bagian sumber Kode halaman Iterator di konsol Lambda.

    exports.handler = function iterator (event, context, callback) { let index = event.iterator.index; let step = event.iterator.step; let count = event.iterator.count; index = index + step; callback(null, { index, step, count, continue: index < count }) }

    Kode ini menerima nilai input untuk count, index, dan step. Kode ini menambah index dengan nilai dari step, dan mengembalikan nilai-nilai ini, dan nilai Boolean dari continue. Nilai dari continue adalah true jika index kurang dari count.

  5. Pilih Deploy untuk menyebarkan kode.

Uji fungsi Iterate Lambda

Untuk melihat fungsi Iterate Anda bekerja, jalankan dengan nilai-nilai numerik. Anda dapat memberikan nilai input untuk fungsi Lambda yang meniru iterasi untuk melihat output yang Anda dapatkan dengan nilai input tertentu.

Untuk menguji fungsi Lambda Anda

  1. Di kotak dialog Konfigurasikan peristiwa pengujian, pilih Buat peristiwa pengujian baru, lalu ketik TestIterator untuk Nama peristiwa.

  2. Ganti contoh data dengan hal berikut.

    { "Comment": "Test my Iterator function", "iterator": { "count": 10, "index": 5, "step": 1 } }

    Nilai-nilai ini meniru yang akan datang dari mesin status Anda selama iterasi. Fungsi Lambda menambah indeks dan mengembalikan continue sebagai true. Bila indeks tidak kurang dari count, ia mengembalikan continue sebagai false. Untuk tes ini, indeks telah bertambah menjadi 5. Hasil harus menambah index ke 6 dan atur continue ke true.

  3. Pilih Buat.

  4. Pada halaman Iterator di konsol Lambda Anda, TestIteratorpastikan terdaftar, lalu pilih Uji.

    Hasil uji ditampilkan di bagian atas halaman. Pilih Detail dan tinjau hasilnya.

    { "index": 6, "step": 1, "count": 10, "continue": true }
    catatan

    Jika Anda mengatur index ke 9 untuk uji ini, index menaikkannya ke 10, dan continue adalah false.

Langkah 2: Buat fungsi Restart Lambda untuk memulai eksekusi Step Functions baru

  1. Buka konsol Lambda dan pilih Buat fungsi.

  2. Pilih halaman Buat fungsi, pilih Penulis dari scratch.

  3. Di bagian Informasi dasar, konfigurasikan fungsi Lambda Anda, sebagai berikut:

    1. Untuk Nama fungsi, masukkan Restart.

    2. Untuk Runtime, pilih Node.js 16.x.

  4. Simpan semua pilihan default pada halaman, lalu pilih Buat fungsi.

    Ketika fungsi Lambda Anda dibuat, buat catatan dari Amazon Resource Name (ARN)nya di sudut kanan atas halaman, misalnya:

    arn:aws:lambda:us-east-1:123456789012:function:Iterator
  5. Salin kode berikut untuk fungsi Lambda ke bagian Sumber kode pada halaman Restart di konsol Lambda.

    Kode berikut mengurangi hitungan jumlah eksekusi, dan memulai eksekusi baru dari mesin status Anda, termasuk nilai yang dikurangi.

    var aws = require('aws-sdk'); var sfn = new aws.StepFunctions(); exports.restart = function(event, context, callback) { let StateMachineArn = event.restart.StateMachineArn; event.restart.executionCount -= 1; event = JSON.stringify(event); let params = { input: event, stateMachineArn: StateMachineArn }; sfn.startExecution(params, function(err, data) { if (err) callback(err); else callback(null,event); }); }
  6. Pilih Deploy untuk menyebarkan kode.

Langkah 3: Buat mesin negara

Sekarang Anda telah membuat dua fungsi Lambda Anda, buat mesin status. Dalam mesin status ini, status ShouldRestart dan Restart adalah cara Anda memecah pekerjaan Anda menjadi beberapa eksekusi.

contoh ShouldRestart Negara pilihan

Kutipan berikut menunjukkan negara. ShouldRestart Choice Status ini menentukan apakah Anda harus memulai ulang eksekusi atau tidak.

"ShouldRestart": { "Type": "Choice", "Choices": [ { "Variable": "$.restart.executionCount", "NumericGreaterThan": 1, "Next": "Restart" } ],

Nilai $.restart.executionCount disertakan dalam input eksekusi awal. Nilai ini dikurangi satu setiap kali fungsi Restart dipanggil, lalu ditempatkan ke input untuk setiap eksekusi berikutnya.

contoh Mulai Ulang Status Tugas

Kutipan berikut menunjukkan negara. Restart Task Status ini menggunakan fungsi Lambda yang Anda buat sebelumnya untuk memulai ulang eksekusi, dan untuk mengurangi jumlah guna melacak jumlah eksekusi yang tersisa untuk memulai.

"Restart": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Restart", "Next": "Done" },
Untuk membuat mesin negara
  1. Buka Konsol Step Functions dan pilih Buat mesin status.

    penting

    Pastikan mesin status Anda berada di bawah AWS akun dan Wilayah yang sama dengan fungsi Lambda yang Anda buat sebelumnya di Langkah 1 dan Langkah 2.

  2. Dalam kotak dialog Pilih templat, pilih Kosong.

  3. Pilih Pilih. Ini membuka Workflow Studio diMode desain.

  4. Untuk tutorial ini, Anda akan menulis definisi Amazon States Language (ASL) dari mesin status Anda diEditor kode. Untuk melakukan ini, pilih Kode.

  5. Hapus kode boilerplate yang ada dan tempel kode berikut. Ingatlah untuk mengganti ARN dalam kode ini dengan ARN dari fungsi Lambda yang Anda buat.

    { "Comment": "Continue-as-new State Machine Example", "StartAt": "ConfigureCount", "States": { "ConfigureCount": { "Type": "Pass", "Result": { "count": 100, "index": -1, "step": 1 }, "ResultPath": "$.iterator", "Next": "Iterator" }, "Iterator": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Iterator", "ResultPath": "$.iterator", "Next": "IsCountReached" }, "IsCountReached": { "Type": "Choice", "Choices": [ { "Variable": "$.iterator.continue", "BooleanEquals": true, "Next": "ExampleWork" } ], "Default": "ShouldRestart" }, "ExampleWork": { "Comment": "Your application logic, to run a specific number of times", "Type": "Pass", "Result": { "success": true }, "ResultPath": "$.result", "Next": "Iterator" }, "ShouldRestart": { "Type": "Choice", "Choices": [ { "Variable": "$.restart.executionCount", "NumericGreaterThan": 0, "Next": "Restart" } ], "Default": "Done" }, "Restart": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Restart", "Next": "Done" }, "Done": { "Type": "Pass", "End": true } } }
  6. Tentukan nama untuk mesin negara Anda. Untuk melakukan ini, pilih ikon edit di sebelah nama mesin status default MyStateMachine. Kemudian, dalam konfigurasi mesin Negara, tentukan nama di kotak Nama mesin Negara.

    Untuk tutorial ini, masukkan nama ContinueAsNew.

  7. (Opsional) Dalam konfigurasi mesin State, tentukan pengaturan alur kerja lainnya, seperti jenis mesin status dan peran pelaksanaannya.

    Untuk tutorial ini, simpan semua pilihan default di pengaturan mesin State.

    Jika sebelumnya Anda telah membuat peran IAM dengan izin yang benar untuk mesin status dan ingin menggunakannya, di Izin, pilih Pilih peran yang ada, lalu pilih peran dari daftar. Atau pilih Masukkan peran ARN dan kemudian berikan ARN untuk peran IAM itu.

  8. Dalam kotak dialog Konfirmasi pembuatan peran, pilih Konfirmasi untuk melanjutkan.

    Anda juga dapat memilih Lihat pengaturan peran untuk kembali ke konfigurasi mesin Status.

    catatan

    Jika Anda menghapus IAM role yang Step Functions buat, Step Functions tidak dapat membuatnya kembali nanti. Demikian pula, jika Anda mengubah peran (misalnya, dengan menghapus Step Functions dari principal dalam kebijakan IAM), Step Functions tidak dapat memulihkan pengaturan aslinya nanti.

  9. Simpan Nama Sumber Daya Amazon (ARN) dari mesin status ini dalam file teks. Anda harus memberikan ARN sambil memberikan izin ke fungsi Lambda untuk memulai eksekusi Step Functions baru.

Langkah 4: Perbarui Kebijakan IAM

Untuk memastikan fungsi Lambda Anda memiliki izin untuk memulai eksekusi Step Functions baru, lampirkan kebijakan inline ke peran IAM yang Anda gunakan untuk fungsi Lambda Anda. Restart Untuk informasi selengkapnya, lihat Menyematkan kebijakan sebaris dalam Panduan Pengguna IAM.

catatan

Anda dapat memperbarui baris Resource dalam contoh sebelumnya untuk mereferensikan ARN mesin status ContinueAsNew Anda. Baris ini membatasi kebijakan sehingga hanya dapat memulai eksekusi mesin status tertentu.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": "arn:aws:states:us-east-2:123456789012stateMachine:ContinueAsNew" } ] }

Langkah 5: Jalankan mesin negara

Untuk memulai eksekusi, sediakan input yang mencakup ARN dari mesin status dan executionCount untuk berapa kali mesin status harus memulai eksekusi baru.

  1. Pada ContinueAsNewhalaman, pilih Mulai eksekusi.

    Kotak dialog Mulai eksekusi ditampilkan.

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

    1. (Opsional) Untuk mengidentifikasi eksekusi Anda, Anda dapat menentukan nama untuk itu di Nama kotak. Secara default, Step Functions menghasilkan nama eksekusi unik secara otomatis.

      catatan

      Step Functions memungkinkan Anda membuat nama untuk mesin status, eksekusi, dan aktivitas, serta label yang berisi karakter non-ASCII. Nama-nama non-ASCII ini tidak berfungsi dengan Amazon. CloudWatch Untuk memastikan bahwa Anda dapat melacak CloudWatch metrik, pilih nama yang hanya menggunakan karakter ASCII.

    2. Dalam kotak Input, masukkan input JSON berikut untuk menjalankan alur kerja Anda.

      { "restart": { "StateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:ContinueAsNew", "executionCount": 4 } }
    3. Perbarui bidang StateMachineArn dengan ARN untuk mesin status ContinueAsNew.

    4. Pilih Mulai Eksekusi.

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

      Tampilan Grafik menampilkan yang pertama dari empat eksekusi. Sebelum selesai, ia akan melewati status Restart dan memulai eksekusi baru.

      Eksekusi pertama dari empat eksekusi.

      Saat eksekusi ini selesai, Anda dapat melihat eksekusi berikutnya yang sedang berjalan. Pilih ContinueAsNewtautan di bagian atas untuk melihat daftar eksekusi. Anda akan melihat eksekusi yang baru saja ditutup, dan eksekusi berkelanjutan yang dimulai oleh fungsi Restart Lambda.

      Satu eksekusi selesai, eksekusi berikutnya berjalan.

      Ketika semua eksekusi selesai, Anda akan melihat empat eksekusi yang berhasil dalam daftar. Eksekusi pertama yang dimulai menampilkan nama yang Anda pilih, dan eksekusi berikutnya memiliki nama yang dibuat.

      Semua eksekusi selesai.