Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Contoh: Memanipulasi data status dalam alur kerja Step Functions
Topik ini berisi contoh cara memanipulasi input dan output status JSON menggunakan InputPath, ResultPath, dan OutputPath bidang.
Setiap negara selain Status alur kerja gagal negara bagian atau Status alur kerja yang berhasil negara dapat mencakup bidang pemrosesan input dan output, sepertiInputPath
,ResultPath
, atauOutputPath
. Selain itu, Tunggu status alur kerja dan Status alur kerja pilihan negara bagian tidak mendukung ResultPath
lapangan. Dengan bidang ini, Anda dapat menggunakan a JsonPath
Anda juga dapat menggunakan Parameters
bidang untuk memanipulasi JSON data saat bergerak melalui alur kerja Anda. Untuk informasi tentang penggunaanParameters
, lihatMemanipulasi data status menggunakan parameter dalam alur kerja Step Functions.
Misalnya, mulailah dengan AWS Lambda fungsi dan mesin negara dijelaskan dalam Membuat mesin status Step Functions yang menggunakan Lambda tutorial. Modifikasi mesin status sehingga termasuk InputPath
, ResultPath
, dan OutputPath
berikut.
{
"Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function",
"StartAt": "HelloWorld",
"States": {
"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction
",
"InputPath": "$.lambda",
"ResultPath": "$.data.lambdaresult",
"OutputPath": "$.data",
"End": true
}
}
}
Mulai eksekusi menggunakan input berikut.
{
"comment": "An input comment.",
"data": {
"val1": 23,
"val2": 17
},
"extra": "foo",
"lambda": {
"who": "AWS Step Functions"
}
}
Asumsikan bahwa extra
node comment
dan dapat dibuang, tetapi Anda ingin menyertakan output dari fungsi Lambda, dan menyimpan informasi dalam node. data
Dalam mesin status yang diperbarui, status Task
diubah untuk memproses input ke tugas.
"InputPath": "$.lambda",
Baris ini dalam ketentuan mesin status membatasi input tugas untuk hanya simpul lambda
dari input status. Fungsi Lambda hanya menerima JSON objek {"who": "AWS Step Functions"}
sebagai input.
"ResultPath": "$.data.lambdaresult",
Ini ResultPath
memberitahu mesin status untuk memasukkan hasil dari fungsi Lambda ke simpul bernama lambdaresult
, sebagai anak dari simpul data
dalam input mesin status asli. Karena Anda tidak melakukan manipulasi lain pada input asli dan hasilnya menggunakanOutputPath
, output status sekarang menyertakan hasil fungsi Lambda dengan input asli.
{
"comment": "An input comment.",
"data": {
"val1": 23,
"val2": 17,
"lambdaresult": "Hello, AWS Step Functions!"
},
"extra": "foo",
"lambda": {
"who": "AWS Step Functions"
}
}
Tapi, tujuan kami adalah untuk melestarikan hanya data
node, dan menyertakan hasil dari fungsi Lambda. OutputPath
memfilter gabungan ini JSON sebelum meneruskannya ke output status.
"OutputPath": "$.data",
Ini hanya memilih simpul data
dari input asli (termasuk anak lambdaresult
yang disisipkan oleh ResultPath
) untuk diteruskan ke output. Output status difilter ke berikut ini.
{
"val1": 23,
"val2": 17,
"lambdaresult": "Hello, AWS Step Functions!"
}
Dalam status Task
ini:
-
InputPath
hanya mengirimkan simpullambda
dari input ke fungsi Lambda. -
ResultPath
menyisipkan hasilnya sebagai anak dari simpuldata
dalam input asli. -
OutputPath
memfilter input status (yang sekarang termasuk hasil dari fungsi Lambda) sehingga hanya meneruskan simpuldata
ke output status.
contoh untuk memanipulasi input mesin keadaan asli, hasil, dan output akhir menggunakan JsonPath
Pertimbangkan mesin negara berikut yang memverifikasi identitas dan alamat pemohon asuransi.
catatan
Untuk melihat contoh lengkapnya, lihat Cara menggunakan JSON Path di Step Functions
{ "Comment": "Sample state machine to verify an applicant's ID and address", "StartAt": "Verify info", "States": { "Verify info": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Verify identity", "States": { "Verify identity": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:
check-identity
:$LATEST" }, "End": true } } }, { "StartAt": "Verify address", "States": { "Verify address": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:check-address
:$LATEST" }, "End": true } } } ] } } }
Jika Anda menjalankan mesin status ini menggunakan input berikut, eksekusi gagal karena fungsi Lambda yang melakukan verifikasi hanya mengharapkan data yang perlu diverifikasi sebagai input. Oleh karena itu, Anda harus menentukan node yang berisi informasi yang akan diverifikasi menggunakan yang sesuai JsonPath.
{ "data": { "firstname": "Jane", "lastname": "Doe", "identity": { "email": "jdoe@example.com", "ssn": "123-45-6789" }, "address": { "street": "123 Main St", "city": "Columbus", "state": "OH", "zip": "43219" }, "interests": [ { "category": "home", "type": "own", "yearBuilt": 2004 }, { "category": "boat", "type": "snowmobile", "yearBuilt": 2020 }, { "category": "auto", "type": "RV", "yearBuilt": 2015 }, ] } }
Untuk menentukan node yang harus digunakan fungsi
Lambda, gunakan check-identity
InputPath
bidang sebagai berikut:
"InputPath": "$.data.identity"
Dan untuk menentukan node yang harus digunakan fungsi
Lambda, gunakan check-address
InputPath
bidang sebagai berikut:
"InputPath": "$.data.address"
Sekarang jika Anda ingin menyimpan hasil verifikasi dalam input mesin status asli, gunakan ResultPath
bidang sebagai berikut:
"ResultPath": "$.results"
Namun, jika Anda hanya membutuhkan identitas dan hasil verifikasi dan membuang input asli, gunakan OutputPath
bidang sebagai berikut:
"OutputPath": "$.results"
Untuk informasi selengkapnya, lihat Memproses input dan output di Step Functions.