Tutorial: Memeriksa eksekusi mesin status di Step Functions - AWS Step Functions

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

Tutorial: Memeriksa eksekusi mesin status di Step Functions

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, lihatMelihat detail eksekusi alur kerja di Step Functions.

Langkah 1: Buat dan uji fungsi Lambda yang diperlukan

  1. Buka konsol Lambda dan kemudian lakukan langkah 1 hingga 4 di bagian tersebut. Langkah 1: Membuat fungsi Lambda Pastikan untuk memberi nama fungsi Lambda. GetListOfFruits

  2. Setelah Anda membuat fungsi Lambda, salin Amazon Resource Name (ARN) fungsi yang ditampilkan di sudut kanan atas halaman. Untuk menyalinARN, klik ikon salin untuk menyalin Nama Sumber Daya Amazon fungsi Lambda. Berikut ini adalah contohARN, di mana nama-fungsi adalah nama fungsi Lambda (dalam hal ini,GetListOfFruits):

    arn:aws:lambda:us-east-1:123456789012:function:function-name
  3. 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); };
  4. Pilih Deploy, lalu pilih Test, untuk menyebarkan perubahan dan melihat output dari fungsi Lambda Anda.

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

      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; };
    2. Salin kode berikut ke area sumber Kode dari fungsi CalculateAverageLambda:

      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); };
    3. Pastikan untuk menyalin ARNs dari dua fungsi Lambda ini, lalu Deploy dan Test mereka.

Langkah 2: Buat dan jalankan mesin negara

Gunakan konsol Step Functions untuk membuat mesin status yang memanggil fungsi Lambda yang Anda buat di 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 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.

  2. Untuk Jenis, pertahankan pilihan standar Standar.

  3. 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:us-east-1: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:us-east-1: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:us-east-1: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 } } }
  4. Masukkan nama untuk mesin negara Anda. Simpan pilihan default untuk opsi lain di halaman ini dan pilih Buat mesin status.

  5. Buka halaman berjudul dengan nama mesin negara Anda. Lakukan langkah 1 hingga 4 di Langkah 4: Jalankan mesin negara bagian, tetapi gunakan data berikut sebagai input eksekusi:

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

Langkah 3: Lihat detail eksekusi mesin negara

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.

  2. Jika eksekusi mesin status Anda gagal, pilih Penyebab atau Tampilkan detail langkah pada pesan kesalahan. Detail tentang kesalahan ditampilkan di bagian Detail langkah. Perhatikan bahwa langkah yang menyebabkan kesalahan, yang merupakan Task status bernama GetListofFruits, disorot dalam tampilan Grafik dan tampilan Tabel.

    catatan

    Karena GetListofFruitslangkah 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

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

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.

  2. Dari Map iteration viewer, pilih iterasi yang ingin Anda lihat. Iterasi dihitung dari nol. Untuk memilih iterasi ketiga dari lima, pilih #2 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.

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

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.

  2. Dalam tampilan tampilan pohon iterasi Map status, pilih baris untuk iterasi bernama #2 untuk iterasi nomor tiga. Demikian pula, pilih baris bernama #3 untuk iterasi nomor empat.

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.

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.

  2. Di bawah Operator, pilih Status =.

  3. Pilih Status = Gagal.

  4. (Opsional) Pilih Hapus filter untuk menghapus filter yang diterapkan.

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.

  2. Di bawah Operator, pilih Type =.

  3. Pilih Jenis = TaskFailed.

  4. (Opsional) Pilih Hapus filter untuk menghapus filter yang diterapkan.

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