Memanipulasi data status menggunakan parameter dalam alur kerja 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.

Memanipulasi data status menggunakan parameter dalam alur kerja Step Functions

ResultSelectorBidangInputPath, Parameters dan menyediakan cara untuk memanipulasi JSON saat bergerak melalui alur kerja Anda. InputPathdapat membatasi input yang diteruskan 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.

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 input sebelumnya dan Parameters bidang, ini adalah JSON yang dilewatkan.

{ "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 itu. 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:

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": { "ClusterId": "AKIAIOSFODNN7EXAMPLE" "ResourceType": "elasticmapreduce", } }

Meratakan array array

Jika Memetakan status alur kerja 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 [*] di ResultSelector bidang seperti yang ditunjukkan pada contoh berikut.

"ResultSelector": { "flattenArray.$": "$[*][*]" }

Untuk contoh yang menunjukkan cara meratakan array, lihat Langkah 3 dalam tutorial berikut: