Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memanipulasi data status menggunakan parameter dalam alur kerja Step Functions
ResultSelector
BidangInputPath
, Parameters
dan menyediakan cara untuk memanipulasi JSON saat bergerak melalui alur kerja Anda. InputPath
dapat membatasi input yang dilewatkan dengan memfilter JSON notasi dengan menggunakan jalur (lihatMenggunakan jalur untuk mengakses input untuk alur kerja Step Functions). Bidang Parameters
mengaktifkan Anda untuk meneruskan kumpulan pasangan kunci-nilai, yang mana nilai-nilai yang baik nilai-nilai statis yang Anda tetapkan dalam ketetapan mesin negara Anda, atau yang dipilih dari input menggunakan jalur. Bidang ResultSelector
menyediakan cara untuk memanipulasi hasil status sebelum ResultPath
diterapkan.
AWS Step Functions menerapkan InputPath
bidang terlebih dahulu, dan kemudian Parameters
bidang. Pertama-tama Anda dapat memfilter input mentah Anda ke pilihan yang ingin Anda gunakan InputPath
, lalu menerapkan Parameters
untuk memanipulasi input itu lebih lanjut, atau menambahkan nilai-nilai baru. Kemudian Anda dapat menggunakan bidang ResultSelector
untuk memanipulasi output status sebelum ResultPath
diterapkan.
Tip
Gunakan simulator aliran data di konsol Step Functions
InputPath
Gunakan InputPath
untuk memilih sebagian dari input status.
Misalnya, anggap input ke status Anda meliputi berikut ini.
{
"comment": "Example for InputPath.",
"dataset1": {
"val1": 1,
"val2": 2,
"val3": 3
},
"dataset2": {
"val1": "a",
"val2": "b",
"val3": "c"
}
}
Anda dapat menerapkan InputPath
.
"InputPath": "$.dataset2",
Dengan sebelumnyaInputPath
, berikut ini adalah JSON yang dilewatkan sebagai input.
{
"val1": "a",
"val2": "b",
"val3": "c"
}
catatan
Sebuah jalur dapat menghasilkan pilihan nilai. Pertimbangkan contoh berikut.
{ "a": [1, 2, 3, 4] }
Jika Anda menerapkan jalur $.a[0:2]
, berikut ini adalah hasilnya.
[ 1, 2 ]
Parameter
Bagian ini menjelaskan berbagai cara Anda dapat menggunakan bidang Parameter.
Pasangan kunci/nilai
Gunakan bidang Parameters
untuk membuat kumpulan pasangan kunci-nilai yang diteruskan sebagai input. Nilai masing-masing dapat menjadi berupa nilai-nilai statis yang Anda masukkan dalam ketentuan mesin status Anda, atau dipilih baik dari input atau objek konteks dengan jalur. Untuk pasangan kunci-nilai tempat nilai yang dipilih menggunakan jalur, nama kunci harus diakhiri .$
.
Misalnya, anggap Anda memberikan input berikut.
{
"comment": "Example for Parameters.",
"product": {
"details": {
"color": "blue",
"size": "small",
"material": "cotton"
},
"availability": "in stock",
"sku": "2317",
"cost": "$23"
}
}
Untuk memilih beberapa informasi, Anda dapat menentukan parameter ini dalam ketentuan mesin status Anda.
"Parameters": {
"comment": "Selecting what I care about.",
"MyDetails": {
"size.$": "$.product.details.size",
"exists.$": "$.product.availability",
"StaticValue": "foo"
}
},
Mengingat masukan sebelumnya dan Parameters
bidang, ini adalah JSON yang diteruskan.
{
"comment": "Selecting what I care about.",
"MyDetails": {
"size": "small",
"exists": "in stock",
"StaticValue": "foo"
}
},
Selain input, Anda dapat mengakses JSON objek khusus, yang dikenal sebagai objek konteks. Objek konteks mencakup informasi tentang eksekusi mesin status Anda. Lihat Objek konteks.
Sumber daya terhubung
Bidang Parameters
juga dapat meneruskan informasi ke sumber daya yang terhubung. Misalnya, jika status tugas Anda mengatur AWS Batch pekerjaan, Anda dapat meneruskan API parameter yang relevan langsung ke API tindakan layanan tersebut. Untuk informasi selengkapnya, lihat:
Amazon S3
Jika data fungsi Lambda yang Anda lewati antar status mungkin bertambah menjadi lebih dari 262.144 byte, sebaiknya gunakan Amazon S3 untuk menyimpan data, dan menerapkan salah satu metode berikut:
Gunakan status Peta Terdistribusi di alur kerja Anda sehingga
Map
status dapat membaca input langsung dari sumber data Amazon S3. Untuk informasi selengkapnya, lihat Mode terdistribusi.Parse Amazon Resource Name (ARN) bucket dalam
Payload
parameter untuk mendapatkan nama bucket dan nilai kunci. Untuk informasi selengkapnya, lihat Menggunakan Amazon S3 ARNs alih-alih melewatkan muatan besar di Step Functions.
Atau, Anda dapat menyesuaikan implementasi untuk meneruskan muatan yang lebih kecil dalam eksekusi Anda.
ResultSelector
Gunakan bidang ResultSelector
untuk memanipulasi hasil status sebelum ResultPath
diterapkan. Bidang ResultSelector
memungkinkan Anda membuat koleksi pasangan nilai kunci, yang mana nilai-nilainya statis atau dipilih dari hasil status. Dengan menggunakan ResultSelector
bidang, Anda dapat memilih bagian mana dari hasil status yang ingin Anda lewatkan ke ResultPath
bidang tersebut.
catatan
Dengan ResultPath
bidang tersebut, Anda dapat menambahkan output ResultSelector
bidang ke input asli.
ResultSelector
adalah bidang opsional dalam status berikut:
Misalnya, integrasi layanan Step Functions mengembalikan metadata selain muatan dalam hasil. ResultSelector
dapat memilih bagian dari hasil dan menggabungkannya dengan input status dengan ResultPath
. Dalam contoh ini, kita ingin memilih hanya resourceType
danClusterId
, dan menggabungkannya dengan input status dari Amazon EMR createCluster .sync. Diberikan sebagai berikut:
{
"resourceType": "elasticmapreduce",
"resource": "createCluster.sync",
"output": {
"SdkHttpMetadata": {
"HttpHeaders": {
"Content-Length": "1112",
"Content-Type": "application/x-amz-JSON-1.1",
"Date": "Mon, 25 Nov 2019 19:41:29 GMT",
"x-amzn-RequestId": "1234-5678-9012"
},
"HttpStatusCode": 200
},
"SdkResponseMetadata": {
"RequestId": "1234-5678-9012"
},
"ClusterId": "AKIAIOSFODNN7EXAMPLE"
}
}
Anda kemudian dapat memilih resourceType
dan ClusterId
menggunakan ResultSelector
:
"Create Cluster": {
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync",
"Parameters": {
<some parameters>
},
"ResultSelector": {
"ClusterId.$": "$.output.ClusterId",
"ResourceType.$": "$.resourceType"
},
"ResultPath": "$.EMROutput",
"Next": "Next Step"
}
Dengan input yang diberikan, menggunakan ResultSelector
menghasilkan:
{
"OtherDataFromInput": {},
"EMROutput": {
"ResourceType": "elasticmapreduce",
"ClusterId": "AKIAIOSFODNN7EXAMPLE"
}
}
Meratakan array array
Jika Status alur kerja peta status Status alur kerja paralel atau di mesin status Anda mengembalikan array array, Anda dapat mengubahnya menjadi array datar dengan ResultSelector bidang. Anda dapat menyertakan bidang ini di dalam definisi status Paralel atau Peta untuk memanipulasi hasil status ini.
Untuk meratakan array, gunakan JMESPathsintaks [*]
ResultSelector
bidang seperti yang ditunjukkan pada contoh berikut.
"ResultSelector": { "flattenArray.$": "$[*][*]" }
Untuk contoh yang menunjukkan cara meratakan array, lihat Langkah 3 dalam tutorial berikut: