

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

# Ulangi loop dengan fungsi Lambda di Step Functions
<a name="tutorial-create-iterate-pattern-section"></a>

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-creating-lambda-state-machine.md) tutorial untuk memastikan Anda terbiasa menggunakan Lambda dan Step Functions bersama-sama.

## Langkah 1: Buat fungsi Lambda untuk mengulangi hitungan
<a name="create-iterate-pattern-step-1"></a>

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
<a name="create-iterate-pattern-create-lambda-function"></a>

1. Masuk ke [konsol Lambda](https://console.aws.amazon.com/lambda/home), lalu pilih **Buat fungsi**.

1. Pilih halaman **Buat fungsi**, pilih **Penulis dari scratch**.

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

   1. Untuk **Nama fungsi**, masukkan `Iterator`.

   1. Untuk **Runtime**, pilih **Node.js**.

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

   1. Pilih **Buat fungsi**.

1. 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`.

1. Pilih **Deploy**.

## Langkah 2: Uji Fungsi Lambda
<a name="create-iterate-pattern-step-2"></a>

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
<a name="create-iterate-pattern-test-lambda-function"></a>

1. Pilih **Uji**.

1. Dalam kotak dialog **Konfigurasikan peristiwa uji**, masukkan `TestIterator` di **Nama acara** kotak.

1. 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` ke`true`.

1. Pilih **Buat**.

1. Pilih **Uji** untuk menguji fungsi Lambda Anda.

   Hasil tes ditampilkan di tab **Hasil eksekusi**. 

1. Pilih tab **Hasil eksekusi** untuk melihat output.

   ```
   {
     "index": 6,
     "step": 1,
     "count": 10,
     "continue": true
   }
   ```
**catatan**  
Jika Anda `index` mengatur `9` dan menguji lagi, `index` kenaikan ke`10`, dan `continue` akan`false`.

## Langkah 3: Buat Mesin Status
<a name="create-iterate-pattern-step-3"></a>

**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 untuk`count`,`index`, dan`step`.
+ `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.
+ `ExampleWork`Sebuah 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](https://console.aws.amazon.com/states/home), lalu pilih **Buat mesin status**.
**penting**  
Mesin status Anda harus berada di AWS akun dan Wilayah yang sama dengan fungsi Lambda Anda.

1. Pilih template **Kosong**.

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

   Untuk informasi selengkapnya tentang Bahasa Status Amazon, lihat [Struktur Mesin Status](statemachine-structure.md).

   ```
   {
       "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:region: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
             
           }
       }
   }
   ```

1. Ganti `Iterator Resource` bidang dengan ARN untuk fungsi `Iterator` Lambda Anda yang Anda buat sebelumnya.

1. 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`).
Step Functions menerima nama untuk mesin negara, eksekusi, aktivitas, dan label yang berisi karakter non-ASCII. Karena karakter seperti itu akan CloudWatch mencegah Amazon mencatat data, sebaiknya gunakan hanya karakter ASCII sehingga Anda dapat melacak metrik Step Functions.

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

1. Pilih **Buat**, lalu **Konfirmasikan** kreasi peran.

## Langkah 4: Mulai Eksekusi Baru
<a name="create-iterate-pattern-step-4"></a>

Setelah Anda membuat mesin status, Anda dapat memulai eksekusi.

1. Pada **IterateCount**halaman, pilih **Mulai eksekusi**.

1. (Opsional) Masukkan nama eksekusi khusus untuk mengganti default yang dihasilkan.
**Nama dan pencatatan non-ASCII**  
Step Functions menerima nama untuk mesin negara, eksekusi, aktivitas, dan label yang berisi karakter non-ASCII. Karena karakter seperti itu akan CloudWatch mencegah Amazon mencatat data, sebaiknya gunakan hanya karakter ASCII sehingga Anda dapat melacak metrik Step Functions.

1. Pilih **Mulai Eksekusi**.

   Eksekusi baru mesin status Anda dimulai, dan halaman baru yang menunjukkan eksekusi Anda yang sedang berjalan akan ditampilkan.  
![\[Grafik mesin negara yang menunjukkan status iterator biru yang menunjukkan status kemajuan.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/tutorial-create-iterate-running.png)

   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.   
![\[Grafik mesin negara yang menunjukkan status Iterator dan Selesai berwarna hijau untuk menunjukkan keduanya telah berhasil.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/tutorial-create-iterate-done.png)