

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 di Step Functions
<a name="tutorial-use-lambda-cont-exec"></a>

**Tip**  
Pendekatan berikut menggunakan fungsi Lambda untuk memulai eksekusi alur kerja baru. **Sebaiknya** gunakan status Tugas Step Functions untuk memulai eksekusi alur kerja baru. Lihat caranya di tutorial berikut: **[Lanjutkan alur kerja yang berjalan lama menggunakan Step Functions API (disarankan)](tutorial-continue-new.md)**.

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

Tutorial ini didasarkan pada konsep penggunaan fungsi Lambda eksternal untuk mengubah alur kerja Anda, yang ditunjukkan dalam tutorial [Ulangi loop dengan fungsi Lambda di Step Functions](tutorial-create-iterate-pattern-section.md). 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
<a name="tutorial-continue-new-prereq"></a>

Sebelum Anda mulai, ikuti [Membuat mesin status Step Functions yang menggunakan Lambda](tutorial-creating-lambda-state-machine.md) tutorial untuk memastikan bahwa Anda terbiasa menggunakan Lambda dan Step Functions bersama-sama.

## Langkah 1: Buat fungsi Lambda untuk mengulangi hitungan
<a name="tutorial-continue-new-step-1"></a>

**catatan**  
Jika Anda telah menyelesaikan tutorial [Ulangi loop dengan fungsi Lambda di Step Functions](tutorial-create-iterate-pattern-section.md), Anda dapat melewati langkah ini dan menggunakan fungsi Lambda.

Bagian ini dan [Ulangi loop dengan fungsi Lambda di Step Functions](tutorial-create-iterate-pattern-section.md) 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
<a name="tutorial-continue-new-create-lambda-function"></a>

1. Buka [konsol Lambda](https://console.aws.amazon.com/lambda/home) dan 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 16.x**.

   1. 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:region:123456789012:function:Iterator
      ```

1. Salin kode berikut untuk fungsi Lambda ke bagian **Sumber kode ***Iterator*****halaman 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`.

1. Pilih **Deploy** untuk menyebarkan kode.

### Uji fungsi Iterate Lambda
<a name="tutorial-continue-new-step-1-test"></a>

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
<a name="tutorial-continue-new-test-lambda-function"></a>

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

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

1. Pilih **Buat**.

1. **Pada ***Iterator*** halaman di konsol Lambda Anda, pastikan **TestIterator**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
<a name="tutorial-continue-new-step-3"></a>

1. Buka [konsol Lambda](https://console.aws.amazon.com/lambda/home) dan 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 `Restart`.

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

1. 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:region:123456789012:function:Iterator
   ```

1. Salin kode berikut untuk fungsi Lambda ke bagian **Sumber kode ***Restart*****halaman 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);
     });
   
   }
   ```

1. Pilih **Deploy** untuk menyebarkan kode.

## Langkah 3: Buat mesin negara
<a name="tutorial-continue-new-step-4"></a>

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.

**Example 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.

**Example 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:region:123456789012:function:Restart",
  "Next": "Done"
},
```

**Untuk membuat mesin negara**

1. Buka [konsol Step Functions](https://console.aws.amazon.com/states/home), pilih **State Machines** dari menu, lalu pilih **Create state machine**.
**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](#tutorial-continue-new-step-3) 2](#tutorial-continue-new-step-1).

1. Pilih **Buat dari kosong**.

1. Beri nama mesin status Anda, lalu pilih **Lanjutkan** untuk mengedit mesin status Anda di Workflow Studio.

1. Untuk tutorial ini, Anda akan menulis definisi [Amazon States Language](concepts-amazon-states-language.md) (ASL) dari mesin status Anda di[Editor kode](workflow-studio.md#wfs-interface-code-editor). Untuk melakukan ini, pilih **Kode**.

1. Hapus kode boilerplate yang ada dan tempel kode berikut. Ingatlah untuk mengganti kode ini dengan fungsi Lambda yang Anda buat. ARNs ARNs 

   ```
   {
       "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:region: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:region:123456789012:function:Restart",
             "Next": "Done"
           },
           "Done": {
               "Type": "Pass",
               "End": true 
           }
       }
   }
   ```

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

1. (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](procedure-create-iam-role.md) 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.

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

1. 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
<a name="tutorial-continue-new-step-2"></a>

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](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#embed-inline-policy-console) 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:123456789012:stateMachine:ContinueAsNew"
     }
 ]
}
```

## Langkah 5: Jalankan mesin negara
<a name="tutorial-continue-new-step-5"></a>

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

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

   Kotak dialog **Mulai eksekusi** ditampilkan.

1. Dalam kotak dialog **Mulai eksekusi**, lakukan hal berikut:

   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. Dalam kotak **Input, masukkan input** JSON berikut untuk menjalankan alur kerja Anda.

      ```
      {
        "restart": {
          "StateMachineArn": "arn:aws:states:region:account-id:stateMachine:ContinueAsNew",
          "executionCount": 4
        }
      }
      ```

   1. Perbarui bidang `StateMachineArn` dengan ARN untuk mesin status `ContinueAsNew`.

   1. Pilih **Mulai Eksekusi**.

   1. 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](concepts-view-execution-details.md#exec-details-intf-step-details) 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*, lihat[Ikhtisar detail eksekusi](concepts-view-execution-details.md#exec-details-interface-overview).

      **Tampilan Grafik** menampilkan yang pertama dari empat eksekusi. Sebelum selesai, ia akan melewati status `Restart` dan memulai eksekusi baru.  
![\[Diagram eksekusi menunjukkan eksekusi pertama dari empat.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/execution-test1.png)

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

      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.  
![\[Tangkapan layar ilustratif yang menunjukkan semua eksekusi telah selesai.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/execution-test1-complete.png)