Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mengelola status dan mengubah data
Pelajari tentang Melewati data antar status dengan variabel dan Mengubah data dengan JSONata.
Bidang InputPath
, Parameters
dan ResultSelector
menyediakan cara untuk memanipulasi JSON saat bergerak melalui alur kerja Anda. InputPath
dapat membatasi input yang diteruskan dengan memfilter notasi JSON dengan menggunakan jalur (lihat Menggunakan JSONPath jalur). Dengan Parameters
bidang ini, Anda dapat meneruskan kumpulan pasangan kunci-nilai, menggunakan nilai statis atau pilihan 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.
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 InputPath
sebelumnya, berikut ini adalah JSON yang diteruskan 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 berupa nilai statis yang Anda sertakan dalam definisi mesin status Anda, atau dipilih 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 input dan bidang Parameters
sebelumnya, ini adalah JSON yang dilewatkan.
{
"comment": "Selecting what I care about.",
"MyDetails": {
"size": "small",
"exists": "in stock",
"StaticValue": "foo"
}
},
Selain input, Anda dapat mengakses objek JSON khusus, yang dikenal sebagai objek Context. Objek Context menyertakan informasi tentang eksekusi mesin state Anda. Lihat Mengakses data eksekusi dari objek Context di Step Functions .
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 parameter API yang relevan secara langsung ke tindakan API 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, kami ingin memilih hanya resourceType
dan ClusterId
, 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": {
"ClusterId": "AKIAIOSFODNN7EXAMPLE",
"ResourceType": "elasticmapreduce",
}
}
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 sintaks: [*]
di ResultSelector
bidang seperti yang ditunjukkan pada contoh berikut.
"ResultSelector": {
"flattenArray.$": "$[*][*]"
}
Untuk contoh yang menunjukkan cara meratakan array, lihat Langkah 3 dalam tutorial berikut: