Ulangi loop dengan Lambda - AWS Step Functions

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

Ulangi loop dengan Lambda

Dalam tutorial ini, Anda menerapkan pola desain yang menggunakan mesin status dan fungsi AWS Lambda untuk mengiterasi putaran beberapa kali.

Gunakan pola desain ini setiap kali Anda perlu melacak jumlah putaran dalam mesin status. Implementasi ini dapat membantu Anda memecah tugas-tugas besar atau eksekusi berjalan lama menjadi potongan yang lebih kecil, atau untuk mengakhiri eksekusi setelah sejumlah peristiwa tertentu. Anda dapat menggunakan implementasi serupa untuk secara berkala mengakhiri dan memulai ulang eksekusi yang berjalan lama untuk menghindari melebihi kuota layanan untuk AWS Step Functions, AWS Lambda, atau layanan lainnya. AWS

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

Langkah 1: Buat fungsi Lambda untuk mengulangi hitungan

Dengan menggunakan fungsi Lambda Anda dapat melacak jumlah iterasi dari putaran 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 adalah true, atau keluar jika statusnya adalah false.

Untuk membuat fungsi Lambda

  1. Masuk ke konsol Lambda, lalu 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.

    3. Di Ubah peran eksekusi default, pilih Buat peran baru dengan izin Lambda dasar.

    4. Pilih Buat fungsi.

  4. Salin kode berikut untuk fungsi Lambda ke sumber Kode.

    export const handler = function (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 menambahkan index dengan nilai dari step dan mengembalikan nilai-nilai ini, dan nilai Boolean continue. Nilai dari continue adalah true jika index kurang dari count.

  5. Pilih Deploy.

Langkah 2: Uji Fungsi Lambda

Jalankan fungsi Lambda Anda dengan nilai-nilai numerik untuk melihatnya dalam operasi. Anda dapat memberikan nilai masukan untuk fungsi Lambda Anda yang meniru iterasi.

Untuk menguji fungsi Lambda Anda

  1. Pilih Uji.

  2. Dalam kotak dialog Konfigurasikan peristiwa uji, masukkan TestIterator di Nama acara kotak.

  3. 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 akan meningkatkan indeks dan kembali true continue ketika indeks kurang dari. count Untuk uji ini, indeks telah bertambah menjadi 5. Tes akan meningkat index ke 6 dan diatur continue ketrue.

  4. Pilih Buat.

  5. Pilih Uji untuk menguji fungsi Lambda Anda.

    Hasil tes ditampilkan di tab Hasil eksekusi.

  6. Pilih tab Hasil eksekusi untuk melihat output.

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

    Jika Anda mengatur index ke 9 dan menguji lagi, index kenaikan ke10, dan continue akan menjadifalse.

Langkah 3: Buat Mesin Status

Sebelum Anda meninggalkan konsol Lambda...

Salin fungsi Lambda ARN. Tempelkan ke dalam catatan. Anda akan membutuhkannya di langkah berikutnya.

Selanjutnya, Anda akan membuat mesin negara dengan status berikut:

  • ConfigureCount— Menetapkan nilai default untukcount,index, danstep.

  • Iterator— Mengacu pada fungsi Lambda yang Anda buat sebelumnya, meneruskan nilai yang dikonfigurasi. ConfigureCount

  • IsCountReached— Status pilihan yang melanjutkan loop atau melanjutkan ke Done status, berdasarkan nilai yang dikembalikan dari Iterator fungsi Anda.

  • ExampleWorkSebuah rintisan untuk pekerjaan yang perlu dilakukan. Dalam contoh ini, alur kerja memiliki Pass status, tetapi dalam solusi nyata, Anda mungkin akan menggunakan. Task

  • Done- Akhiri status alur kerja Anda.

Untuk membuat mesin status di konsol:

  1. Buka Konsol Step Functions, lalu pilih Buat mesin status.

    penting

    Mesin status Anda harus berada di AWS akun dan Wilayah yang sama dengan fungsi Lambda Anda.

  2. Pilih template Kosong.

  3. Di panel Kode, tempel JSON berikut yang mendefinisikan mesin status.

    Untuk informasi selengkapnya tentang Bahasa Status Amazon, lihat Struktur Mesin Status.

    { "Comment": "Iterator State Machine Example", "StartAt": "ConfigureCount", "States": { "ConfigureCount": { "Type": "Pass", "Result": { "count": 10, "index": 0, "step": 1 }, "ResultPath": "$.iterator", "Next": "Iterator" }, "Iterator": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Iterate", "ResultPath": "$.iterator", "Next": "IsCountReached" }, "IsCountReached": { "Type": "Choice", "Choices": [ { "Variable": "$.iterator.continue", "BooleanEquals": true, "Next": "ExampleWork" } ], "Default": "Done" }, "ExampleWork": { "Comment": "Your application logic, to run a specific number of times", "Type": "Pass", "Result": { "success": true }, "ResultPath": "$.result", "Next": "Iterator" }, "Done": { "Type": "Pass", "End": true } } }
  4. Ganti Iterator Resource bidang dengan ARN untuk fungsi Iterator Lambda Anda yang Anda buat sebelumnya.

  5. Pilih Config, dan masukkan Nama untuk mesin status Anda, seperti. IterateCount

    catatan

    Nama mesin negara, eksekusi, dan tugas aktivitas tidak boleh melebihi 80 karakter panjangnya. Nama-nama ini harus unik untuk akun dan AWS Wilayah Anda, dan tidak boleh mengandung salah satu dari yang berikut:

    • Spasi putih

    • Karakter wildcard (? *)

    • Karakter tanda kurung (< > { } [ ])

    • Karakter khusus (" # % \ ^ | ~ ` $ & , ; : /)

    • Karakter kontrol (\\u0000 - \\u001f atau \\u007f - \\u009f).

    Jika mesin status Anda bertipe Express, Anda dapat memberikan nama yang sama untuk beberapa eksekusi mesin status. Step Functions menghasilkan ARN eksekusi unik untuk setiap eksekusi mesin status Express, bahkan jika beberapa eksekusi memiliki nama yang sama.

    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.

  6. Untuk Type, terima nilai default Standard. Untuk Izin, pilih Buat peran baru.

  7. Pilih Buat, lalu Konfirmasikan kreasi peran.

Langkah 4: Mulai Eksekusi Baru

Setelah Anda membuat mesin status, Anda dapat memulai eksekusi.

  1. Pada IterateCounthalaman, pilih Mulai eksekusi.

  2. (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.

  3. Pilih Mulai Eksekusi.

    Eksekusi baru mesin status Anda dimulai, dan halaman baru yang menunjukkan eksekusi Anda yang sedang berjalan akan ditampilkan.

    Status tampilan grafik mesin, menunjukkan status Iterator berwarna biru untuk menunjukkan status kemajuan.

    Eksekusi bertambah dalam beberapa langkah, melacak hitungan menggunakan fungsi Lambda Anda. Pada setiap iterasi, eksekusi melakukan pekerjaan contoh yang direferensikan dalam status ExampleWork di mesin status Anda.

    Ketika hitungan mencapai jumlah yang ditentukan dalam status ConfigureCount di mesin status Anda, eksekusi berhenti dari iterasi dan berakhir.

    Tampilan grafik mesin status, menunjukkan status Iterator dan status Selesai berwarna hijau untuk menunjukkan keduanya telah berhasil.