

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

# Memeriksa eksekusi mesin status di Step Functions
<a name="debug-sm-exec-using-ui"></a>

Dalam tutorial ini, Anda akan belajar bagaimana memeriksa informasi eksekusi yang ditampilkan pada halaman *Rincian Eksekusi* dan melihat alasan eksekusi gagal. Kemudian, Anda akan belajar cara mengakses iterasi yang berbeda dari eksekusi `Map` status. Terakhir, Anda akan belajar cara mengonfigurasi kolom pada **tampilan Tabel** dan menerapkan filter yang sesuai untuk hanya melihat informasi yang menarik bagi Anda.

Dalam tutorial ini, Anda membuat mesin status tipe Standar, yang memperoleh harga satu set buah. Untuk melakukan ini, mesin negara menggunakan tiga AWS Lambda fungsi yang mengembalikan daftar acak empat buah, harga setiap buah, dan biaya rata-rata buah. Fungsi Lambda dirancang untuk menimbulkan kesalahan jika harga buah kurang dari atau sama dengan nilai ambang batas.

**catatan**  
Meskipun prosedur berikut berisi petunjuk tentang cara memeriksa detail eksekusi alur kerja Standar, Anda juga dapat memeriksa detail untuk eksekusi alur kerja Express. Untuk informasi tentang perbedaan antara detail eksekusi untuk tipe alur kerja Standar dan Ekspres, lihat[Perbedaan pengalaman konsol standar dan Express](concepts-view-execution-details.md#console-exp-differences).

## Langkah 1: Buat dan uji fungsi Lambda yang diperlukan
<a name="step-create-all-lambda-functions"></a>

1. Buka [konsol Lambda](https://console.aws.amazon.com/lambda/home) dan kemudian lakukan langkah 1 hingga 4 di bagian tersebut. [Langkah 1: Membuat fungsi Lambda](tutorial-creating-lambda-state-machine.md#create-lambda-function) Pastikan untuk memberi nama fungsi Lambda. **GetListOfFruits**

1. Setelah Anda membuat fungsi Lambda, salin Nama Sumber Daya Amazon (ARN) fungsi yang ditampilkan di sudut kanan atas halaman. Untuk menyalin ARN, klik ikon salin untuk menyalin Nama Sumber Daya Amazon fungsi Lambda. Berikut ini adalah contoh ARN, di mana *`function-name`* adalah nama fungsi Lambda (dalam hal ini,): `GetListOfFruits`

   ```
   arn:aws:lambda:region:123456789012:function:function-name
   ```

1. Salin kode berikut untuk fungsi Lambda ke area **sumber Kode** halaman. **GetListOfFruits**

   ```
   function getRandomSubarray(arr, size) {
       var shuffled = arr.slice(0), i = arr.length, temp, index;
       while (i--) {
           index = Math.floor((i + 1) * Math.random());
           temp = shuffled[index];
           shuffled[index] = shuffled[i];
           shuffled[i] = temp;
       }
       return shuffled.slice(0, size);
   }
   
   exports.handler = async function(event, context) {
       
       const fruits = ['Abiu','Açaí','Acerola','Ackee','African cucumber','Apple','Apricot','Avocado','Banana','Bilberry','Blackberry','Blackcurrant','Jostaberry'];
   
       
        const errorChance = 45;
       
       const waitTime = Math.floor( 100 * Math.random() );
   
       await new Promise( r => setTimeout(() => r(), waitTime));
   
       const num = Math.floor( 100 * Math.random() );
       // const num = 51;
        if (num <= errorChance) {
            throw(new Error('Error'));
        }
   
       return getRandomSubarray(fruits, 4);
   };
   ```

1. Pilih **Deploy**, lalu pilih **Test**, untuk menyebarkan perubahan dan melihat output dari fungsi Lambda Anda.

1. Buat dua fungsi Lambda tambahan, bernama **GetFruitPrice** dan **CalculateAverage** masing-masing, dengan langkah-langkah berikut:

   1. Salin kode berikut ke area **sumber Kode** dari fungsi **GetFruitPrice**Lambda:

      ```
      exports.handler = async function(event, context) {
          
          const errorChance = 0;
          const waitTime = Math.floor( 100 * Math.random() );
      
          await new Promise( r => setTimeout(() => r(), waitTime));
      
          const num = Math.floor( 100 * Math.random() );
          if (num <= errorChance) {
              throw(new Error('Error'));
          }
      
          return Math.floor(Math.random()*100)/10;
      };
      ```

   1. Salin kode berikut ke area **sumber Kode** dari fungsi **CalculateAverage**Lambda:

      ```
      function getRandomSubarray(arr, size) {
          var shuffled = arr.slice(0), i = arr.length, temp, index;
          while (i--) {
              index = Math.floor((i + 1) * Math.random());
              temp = shuffled[index];
              shuffled[index] = shuffled[i];
              shuffled[i] = temp;
          }
          return shuffled.slice(0, size);
      }
      
      const average = arr => arr.reduce( ( p, c ) => p + c, 0 ) / arr.length;
          
      exports.handler = async function(event, context) {
              const errors = [
              "Error getting data from DynamoDB",
              "Error connecting to DynamoDB",
              "Network error",
              "MemoryError - Low memory"
              ]
              
          const errorChance = 0;
          
          const waitTime = Math.floor( 100 * Math.random() );
      
          await new Promise( r => setTimeout(() => r(), waitTime));
      
          const num = Math.floor( 100 * Math.random() );
          if (num <= errorChance) {
              throw(new Error(getRandomSubarray(errors, 1)[0]));
          }
      
          return average(event);
      };
      ```

   1. **Pastikan untuk menyalin ARNs dari dua fungsi Lambda ini, lalu **Deploy** dan Test mereka.**

## Langkah 2: Buat dan jalankan mesin negara
<a name="step-create-exec-sm"></a>

Gunakan [konsol Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/) untuk membuat mesin status yang memanggil [fungsi Lambda yang Anda buat di](#step-create-all-lambda-functions) Langkah 1. Dalam mesin negara ini, tiga `Map` negara didefinisikan. Masing-masing `Map` status ini berisi `Task` status yang memanggil salah satu fungsi Lambda Anda. Selain itu, `Retry` bidang didefinisikan di setiap `Task` negara bagian dengan sejumlah upaya coba lagi yang ditentukan untuk setiap status. Jika `Task` status mengalami kesalahan runtime, status akan dieksekusi lagi hingga jumlah percobaan ulang yang ditentukan untuk itu. `Task`

1. Buka [konsol Step Functions](https://console.aws.amazon.com/states/home) dan pilih **Tulis alur kerja Anda dalam kode**.
**penting**  
Pastikan mesin status Anda berada di bawah AWS akun dan Wilayah yang sama dengan fungsi Lambda yang Anda buat sebelumnya.

1. Untuk **Type**, pertahankan pilihan standar **Standar**.

1. Salin definisi Bahasa Amazon States berikut dan tempel di bawah **Definisi**. Pastikan untuk mengganti yang ARNs ditampilkan dengan fungsi Lambda yang sebelumnya Anda buat.

   ```
   {
       "StartAt": "LoopOverStores",
       "States": {
           "LoopOverStores": {
               "Type": "Map",
               "Iterator": {
                   "StartAt": "GetListOfFruits",
                   "States": {
                       "GetListOfFruits": {
                           "Type": "Task",
                           "Resource": "arn:aws:states:::lambda:invoke",
                           "OutputPath": "$.Payload",
                           "Parameters": {
                               "FunctionName": "arn:aws:lambda:region:123456789012:function:GetListofFruits:$LATEST",
                               "Payload": {
                                   "storeName.$": "$"
                               }
                           },
                           "Retry": [
                               {
                                   "ErrorEquals": [
                                       "States.ALL"
                                   ],
                                   "IntervalSeconds": 2,
                                   "MaxAttempts": 1,
                                   "BackoffRate": 1.3
                               }
                           ],
                           "Next": "LoopOverFruits"
                       },
                       "LoopOverFruits": {
                           "Type": "Map",
                           "Iterator": {
                               "StartAt": "GetFruitPrice",
                               "States": {
                                   "GetFruitPrice": {
                                       "Type": "Task",
                                       "Resource": "arn:aws:states:::lambda:invoke",
                                       "OutputPath": "$.Payload",
                                       "Parameters": {
                                           "FunctionName": "arn:aws:lambda:region:123456789012:function:GetFruitPrice:$LATEST",
                                           "Payload": {
                                               "fruitName.$": "$"
                                           }
                                       },
                                       "Retry": [
                                           {
                                               "ErrorEquals": [
                                                   "States.ALL"
                                               ],
                                               "IntervalSeconds": 2,
                                               "MaxAttempts": 3,
                                               "BackoffRate": 1.3
                                           }
                                       ],
                                       "End": true
                                   }
                               }
                           },
                           "ItemsPath": "$",
                           "End": true
                       }
                   }
               },
               "ItemsPath": "$.stores",
               "Next": "LoopOverStoreFruitsPrice",
               "ResultPath": "$.storesFruitsPrice"
           },
           "LoopOverStoreFruitsPrice": {
               "Type": "Map",
               "End": true,
               "Iterator": {
                   "StartAt": "CalculateAverage",
                   "States": {
                       "CalculateAverage": {
                           "Type": "Task",
                           "Resource": "arn:aws:states:::lambda:invoke",
                           "OutputPath": "$.Payload",
                           "Parameters": {
                               "FunctionName": "arn:aws:lambda:region:123456789012:function:Calculate-average:$LATEST",
                               "Payload.$": "$"
                           },
                           "Retry": [
                               {
                                   "ErrorEquals": [
                                       "States.ALL"
                                   ],
                                   "IntervalSeconds": 2,
                                   "MaxAttempts": 2,
                                   "BackoffRate": 1.3
                               }
                           ],
                           "End": true
                       }
                   }
               },
               "ItemsPath": "$.storesFruitsPrice",
               "ResultPath": "$.storesPriceAverage",
               "MaxConcurrency": 1
           }
       }
   }
   ```

1. Masukkan nama untuk mesin negara Anda. Simpan pilihan default untuk opsi lain di halaman ini dan pilih **Buat mesin status**.

1. Buka halaman berjudul dengan nama mesin negara Anda. Lakukan langkah 1 hingga 4 di [Langkah 4: Jalankan mesin negara](tutorial-creating-lambda-state-machine.md#start-lambda-function) bagian, tetapi gunakan data berikut sebagai input eksekusi:

   ```
   {
       "stores": [
         "Store A",
         "Store B",
         "Store C",
         "Store D"
       ]
   }
   ```

## Langkah 3: Lihat detail eksekusi mesin negara
<a name="view-sm-exec-details"></a>

Pada halaman berjudul dengan ID eksekusi Anda, Anda dapat meninjau hasil eksekusi Anda dan men-debug kesalahan apa pun.

1. (Opsional) Pilih dari tab yang ditampilkan di halaman *Rincian Eksekusi* untuk melihat informasi yang ada di masing-masing tab tersebut. Misalnya, untuk melihat input mesin status dan output eksekusinya, pilih **Input & output eksekusi** pada bagian *[Ringkasan eksekusi](concepts-view-execution-details.md#exec-details-intf-exec-summ)*.

1. Jika eksekusi mesin status Anda gagal, pilih **Penyebab** atau **Tampilkan detail langkah** pada pesan kesalahan. Detail tentang kesalahan ditampilkan di bagian *[Detail langkah](concepts-view-execution-details.md#exec-details-intf-step-details)*. Perhatikan bahwa langkah yang menyebabkan kesalahan, yang merupakan `Task` status bernama **GetListofFruits**, disorot dalam **tampilan Grafik dan tampilan** **Tabel**.
**catatan**  
Karena **GetListofFruits**langkah didefinisikan di dalam `Map` status, dan langkah gagal dijalankan dengan sukses, langkah **Status status** ditampilkan sebagai **Gagal**. `Map`

## Langkah 4: Jelajahi *mode Tampilan* yang berbeda
<a name="sm-exec-details-exp-view-modes"></a>

Anda dapat memilih mode yang disukai untuk melihat alur kerja mesin status atau riwayat peristiwa eksekusi. Beberapa tugas yang dapat Anda lakukan dalam *mode Tampilan* ini adalah sebagai berikut:

### **Tampilan grafik** - Beralih di antara iterasi `Map` status yang berbeda
<a name="graph-view-see-map-state-iterations"></a>

Jika status **Peta** Anda memiliki lima iterasi dan Anda ingin melihat detail eksekusi untuk iterasi ketiga dan keempat, lakukan hal berikut:

1. Pilih `Map` status yang ingin Anda lihat data iterasi.

1. Dari **Penampil iterasi Peta**, pilih iterasi yang ingin Anda lihat. Iterasi dihitung dari nol. Untuk memilih iterasi ketiga dari lima, pilih **\$12** dari daftar tarik-turun di sebelah nama status **Peta**.
**catatan**  
Jika mesin status Anda berisi `Map` status bersarang, Step Functions menampilkan iterasi `Map` status induk dan anak sebagai dua daftar tarik-turun terpisah yang mewakili data iterasi untuk status bersarang.

1. (Opsional) Jika satu atau beberapa iterasi `Map` status gagal dijalankan atau dihentikan dalam status dibatalkan, Anda dapat melihat detail tentang iterasi yang gagal. Untuk melihat detail ini, pilih nomor iterasi yang terpengaruh di bawah **Gagal** atau **Dibatalkan dalam daftar** tarik-turun.

### **Tampilan tabel** - Beralih di antara iterasi `Map` status yang berbeda
<a name="table-view-see-map-state-iterations"></a>

Jika status **Peta** Anda memiliki lima iterasi dan Anda ingin melihat detail eksekusi untuk nomor iterasi tiga dan empat, lakukan hal berikut:

1. Pilih `Map` status yang ingin Anda lihat data iterasi yang berbeda.

1. Dalam tampilan tampilan pohon iterasi `Map` status, pilih baris untuk iterasi bernama **\$12** untuk iterasi nomor tiga. Demikian pula, pilih baris bernama **\$13** untuk iterasi nomor empat.

### **Tampilan tabel** - Konfigurasikan kolom untuk ditampilkan
<a name="table-view-cfg-display-cols"></a>

Pilih ikon pengaturan. Kemudian, di kotak dialog **Preferensi**, pilih kolom yang ingin Anda tampilkan di bawah **Pilih kolom yang terlihat**.

Secara default, mode ini menampilkan kolom **Nama**, **Jenis**, **Status**, **Sumber Daya**, dan **Dimulai Setelah**.

### **Tampilan tabel** - Filter hasilnya
<a name="table-view-filter-results"></a>

Batasi jumlah informasi yang ditampilkan dengan menerapkan satu atau beberapa filter berdasarkan properti, seperti **Status**, atau rentang tanggal dan waktu. Misalnya, untuk melihat langkah-langkah yang gagal eksekusi, terapkan filter berikut:

1. Pilih **Filter menurut properti atau cari berdasarkan kata kunci**, lalu pilih **Status** di bawah **Properti**.

1. Di bawah **Operator**, pilih **Status =**.

1. Pilih **Status = Gagal**.

1. (Opsional) Pilih **Hapus filter** untuk menghapus filter yang diterapkan.

### **Tampilan acara** - Filter hasil
<a name="event-view-filter-results"></a>

Batasi jumlah informasi yang ditampilkan dengan menerapkan satu atau beberapa filter berdasarkan properti, seperti **Jenis**, atau rentang tanggal dan waktu. Misalnya, untuk melihat langkah-langkah `Task` status yang gagal dieksekusi, terapkan filter berikut:

1. Pilih **Filter menurut properti atau cari berdasarkan kata kunci**, lalu pilih **Ketik** di bawah **Properti**.

1. Di bawah **Operator**, pilih **Type =**.

1. Pilih **Type = TaskFailed**.

1. (Opsional) Pilih **Hapus filter** untuk menghapus filter yang diterapkan.

### **Tampilan acara** - Periksa detail **TaskFailed**acara
<a name="event-view-inspect-failed-task-details"></a>

Pilih ikon panah di sebelah ID **TaskFailed**acara untuk memeriksa detailnya, termasuk input, output, dan pemanggilan sumber daya yang muncul di kotak tarik-turun.