Objek konteks - AWS Step Functions

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

Objek konteks

Objek konteks adalah struktur JSON internal yang tersedia selama eksekusi, dan berisi informasi tentang mesin dan eksekusi status Anda. Hal ini mengizinkan alur kerja Anda mengakses informasi tentang eksekusi spesifiknya. Anda dapat mengakses objek konteks dari bidang-bidang berikut:

  • InputPath

  • OutputPath

  • ItemsPath (di status Peta)

  • Variable (di status Pilihan)

  • ResultSelector

  • Parameters

  • Operator perbandingan variabel ke variabel

Format Objek Konteks

Objek konteks mencakup informasi tentang mesin status, status, eksekusi, dan tugas. Objek JSON ini mencakup simpul untuk setiap tipe data, dan dalam format berikut.

{ "Execution": { "Id": "String", "Input": {}, "Name": "String", "RoleArn": "String", "StartTime": "Format: ISO 8601", "RedriveCount": Number, "RedriveTime": "Format: ISO 8601" }, "State": { "EnteredTime": "Format: ISO 8601", "Name": "String", "RetryCount": Number }, "StateMachine": { "Id": "String", "Name": "String" }, "Task": { "Token": "String" } }

Selama eksekusi, objek konteks diisi dengan data yang relevan untuk bidang Parameters dari asalnya diakses. Nilai untuk bidang Task adalah null jika bidang Parameters di luar status tugas.

Nilai objek RedriveCount konteks adalah 0, jika Anda belum redriveneksekusi. Selanjutnya, objek RedriveTime konteks hanya tersedia jika Anda redriven memiliki eksekusi. Jika sudah redriven a Map Run, objek RedriveTime konteks hanya tersedia untuk alur kerja anak dari tipe Standard. Untuk redriven Map Run dengan alur kerja turunan tipe Express, RedriveTime tidak tersedia.

Konten dari eksekusi yang berjalan termasuk spesifik dalam format berikut.

{ "Execution": { "Id": "arn:aws:states:us-east-1:123456789012:execution:stateMachineName:executionName", "Input": { "key": "value" }, "Name": "executionName", "RoleArn": "arn:aws:iam::123456789012:role...", "StartTime": "2019-03-26T20:14:13.192Z" }, "State": { "EnteredTime": "2019-03-26T20:14:13.192Z", "Name": "Test", "RetryCount": 3 }, "StateMachine": { "Id": "arn:aws:states:us-east-1:123456789012:stateMachine:stateMachineName", "Name": "stateMachineName" }, "Task": { "Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W" } }
catatan

Untuk data objek konteks yang terkait dengan status Map, lihat Data Objek Konteks untuk Status Peta.

Mengakses Obyek Konteks

Untuk mengakses objek konteks, pertama tentukan nama parameter dengan menambahkan .$ sampai akhir, seperti yang Anda lakukan saat memilih input status dengan jalur. Kemudian, untuk mengakses data objek konteks bukan input, tambahkan jalur dengan $$.. Ini memberitahu AWS Step Functions untuk menggunakan jalur untuk memilih node dalam objek konteks.

Contoh berikut menunjukkan bagaimana Anda dapat mengakses objek konteks, seperti ID eksekusi, nama, waktu mulai, dan redrive hitungan.

Mengambil dan meneruskan eksekusi ARN ke layanan hilir

Contoh status Tugas ini menggunakan jalur untuk mengambil dan meneruskan eksekusi Amazon Resource Name (ARN) ke Amazon Simple Queue Service (Amazon SQS) pesan.

{ "Order Flight Ticket Queue": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage", "Parameters": { "QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/flight-purchase", "MessageBody": { "From": "YVR", "To": "SEA", "Execution.$": "$$.Execution.Id" } }, "Next": "NEXT_STATE" } }

Untuk informasi selengkapnya tentang menggunakan token tugas saat memanggil layanan terpadu, lihat Tunggu Panggilan Balik dengan Token Tugas.

Akses waktu mulai eksekusi dan nama dalam status Pass

{ "Comment": "Accessing context object in a state machine", "StartAt": "Get execution context data", "States": { "Get execution context data": { "Type": "Pass", "Parameters": { "startTime.$": "$$.Execution.StartTime", "execName.$": "$$.Execution.Name" }, "ResultPath": "$.executionContext", "End": true } } }

Akses redrive hitungan eksekusi

Contoh definisi status Tugas berikut menunjukkan bagaimana Anda dapat mengakses redrivehitungan eksekusi.

{ "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload": { "Number.$": "$$.Execution.RedriveCount" }, "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:functionName" }, "End": true }

Data Objek Konteks untuk Status Peta

Ada dua item tambahan yang tersedia dalam objek konteks ketika memproses status Map: Index dan Value. Untuk setiap iterasi Map status, Index berisi nomor indeks untuk item array yang sedang diproses, sementara Value berisi item array yang sedang diproses. Dalam Map keadaan, objek konteks mencakup data berikut:

"Map": { "Item": { "Index": Number, "Value": "String" } }

Ini hanya tersedia di Map negara bagian, dan dapat ditentukan di ItemSelector lapangan.

catatan

Anda harus menentukan parameter dari objek konteks di blok ItemSelector dari status Map utama, tidak dalam status yang termasuk dalam bagian ItemProcessor.

Mengingat mesin status dengan status Map sederhana, kita dapat menyuntikkan informasi dari objek konteks sebagai berikut.

{ "StartAt": "ExampleMapState", "States": { "ExampleMapState": { "Type": "Map", "ItemSelector": { "ContextIndex.$": "$$.Map.Item.Index", "ContextValue.$": "$$.Map.Item.Value" }, "ItemProcessor": { "ProcessorConfig": { "Mode": "INLINE" }, "StartAt": "TestPass", "States": { "TestPass": { "Type": "Pass", "End": true } } }, "End": true } } }

Jika Anda mengeksekusi mesin status sebelumnya dengan input berikut, Index dan Value dimasukkan dalam output.

[ { "who": "bob" }, { "who": "meg" }, { "who": "joe" } ]

Output untuk eksekusi mengembalikan nilai Index dan Value item untuk masing-masing dari tiga iterasi sebagai berikut:

[ { "ContextIndex": 0, "ContextValue": { "who": "bob" } }, { "ContextIndex": 1, "ContextValue": { "who": "meg" } }, { "ContextIndex": 2, "ContextValue": { "who": "joe" } } ]