為您的狀態配置輸入和輸出 - AWS Step Functions

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

為您的狀態配置輸入和輸出

每個狀態都會根據收到的輸入做出決定或執行動作。在大多數情況下,它然後將輸出傳遞給其他狀態。在 Workflow Studio 中,您可以在Inspector面板的「輸入」和「輸出」索引標籤中設定狀態篩選和操作其輸入和輸資料的方式。在設定輸入和輸出時,使用「資訊」連結來存取關聯式說明。


        輸入、輸出和說明面板

如需「Step Functions」如何處理輸入和輸出的詳細資訊,請參閱Step Functions 中的輸入和輸出處理

設定狀態的輸入

每個狀態都會以 JSON 形式接收先前狀態的輸入。如果要過濾輸入,可以使用Inspector面板中「輸入」選項卡下的InputPath過濾器。這InputPath是一個字符串,開頭為$,標識特定的 JSON 節點。這些被稱為參考路徑,它們遵循 JsonPath 語法。


          輸入選項

若要篩選輸入:

  • 選擇篩選輸入方式 InputPath。

  • 輸入一個有效JsonPath的過InputPath濾器。例如 $.data

您的InputPath篩選器將新增至您的工作流程。

範例 1:在工作流程工作室中使用 InputPath 篩選

假設輸入到您的狀態包含以下 JSON 數據。

{ "comment": "Example for InputPath", "dataset1": { "val1": 1, "val2": 2, "val3": 3 }, "dataset2": { "val1": "a", "val2": "b", "val3": "c" } }

若要套用InputPath濾鏡,請選擇「篩選輸入方式」 InputPath,然後輸入適當的參考路徑。如果您輸入$.dataset2.val1,則會將下列 JSON 做為狀態的輸入傳遞。

{"a"}

參考路徑也可以選取值。如果您參照的資料是,{ "a": [1, 2, 3, 4] }且您套用參照路徑$.a[0:2]作為InputPath篩選器,則結果如下。

[ 1, 2 ]

平行Map、和Pass流量狀態在其「輸入」索引標籤Parameters下有一個額外的輸入篩選選項。此篩選器會在 InputPath 篩選器之後生效,並可用來建構由一或多個索引鍵值配對組成的自訂 JSON 物件。每個配對的值可以是靜態值,可以從輸入中選取,也可以內容物件使用路徑從中選取。

注意

若要指定參數使用參考路徑來指向輸入中的 JSON 節點,參數名稱必須以結尾.$

範例 2:為平行狀態建立自訂 JSON 輸入

假設下面的 JSON 數據是並行狀態的輸入。

{ "comment": "Example for Parameters", "product": { "details": { "color": "blue", "size": "small", "material": "cotton" }, "availability": "in stock", "sku": "2317", "cost": "$23" } }

若要選取此輸入的一部分並傳遞具有靜態值的其他鍵值配對,您可以在「平行」狀態的「輸入」標籤下的「參數」欄位中指定下列項目。

{ "comment": "Selecting what I care about.", "MyDetails": { "size.$": "$.product.details.size", "exists.$": "$.product.availability", "StaticValue": "foo" } }

下面的 JSON 數據將是結果。

{ "comment": "Selecting what I care about.", "MyDetails": { "size": "small", "exists": "in stock", "StaticValue": "foo" } }

設定狀態的輸出

每個狀態都會產生 JSON 輸出,這些輸出可以在傳遞到下一個狀態之前進行篩選。有多個濾鏡可用,每個濾鏡都會以不同的方式影響輸出。每個狀態可用的輸出濾鏡會列在「Inspector 器」面板的「輸出」索引標籤下。對於任務狀態,您選取的任何輸出篩選器都會以下列順序處理:

  1. ResultSelector:使用此篩選器來操作狀態的結果。您可以使用部分結果構建一個新的 JSON 對象。

  2. ResultPath:使用此篩選器可選取要傳遞至輸出的狀態輸入和作業結果的組合。

  3. OutputPath:使用此篩選器篩選 JSON 輸出,以選擇將結果中的哪些資訊傳遞至下一個狀態。


          輸出選項

使用 ResultSelector

ResultSelector是下列狀態的選用輸出篩選器:

  • 任務狀態,這些狀態是列在的「動作」標籤中的所有狀態狀態瀏覽器

  • Map狀態,在「狀態」瀏覽器的「流量」索引標籤中。

  • 平行狀態,在「狀態」瀏覽器的「流量」索引標籤中。

ResultSelector可用來建構由一或多個索引鍵值配對組成的自訂 JSON 物件。每個配對的值可以是靜態值,也可以是從狀態的結果中選取路徑。

注意

若要指定參數使用路徑來參照結果中的 JSON 節點,參數名稱必須以結尾.$

範例 使用 ResultSelector 過濾器的示例

在此範例中,您可ResultSelector以使用來操作來自 Amazon EMR 狀態之 Amazon EMR CreateCluster API 呼叫的回應。CreateCluster以下是 Amazon EMR CreateCluster API 調用的結果。

{ "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" } }

若要選取部分此資訊,並傳遞含有靜態值的其他鍵值組,請在狀態的「輸出」(Output) 標籤下的ResultSelector欄位中指定下列內容。

{ "result": "found", "ClusterId.$": "$.output.ClusterId", "ResourceType.$": "$.resourceType" }

使用ResultSelector產生以下結果。

{ "result": "found", "ClusterId": "AKIAIOSFODNN7EXAMPLE", "ResourceType": "elasticmapreduce" }

使用 ResultPath

狀態的輸出可以是其輸入的副本,它產生的結果,或者它的輸入和結果的組合。使用 ResultPath 以控制哪些組合會傳遞至狀態輸出。如需的更多使用案例ResultPath,請參閱ResultPath

ResultPath是下列狀態的選用輸出篩選器:

  • 任務狀態,這些狀態是列在「狀態」瀏覽器的「動作」標籤中的所有狀態。

  • Map狀態,在「狀態」瀏覽器的「流量」索引標籤中。

  • 平行狀態,在「狀態」瀏覽器的「流量」索引標籤中。

  • Pass狀態,在「狀態」瀏覽器的「流量」索引標籤中。

ResultPath可用於將結果添加到原始狀態輸入中。指定的路徑指示在何處添加結果。

範例 使用 ResultPath 過濾器的示例

假設以下是任務狀態的輸入。

{ "details": "Default example", "who": "AWS Step Functions" }

「工作」狀態的結果如下。

Hello, AWS Step Functions

您可以套用ResultPath並輸入指出要新增結果位置的參考路徑,將此結果新增至狀態的輸入中,例如$.taskresult

這樣ResultPath,以下是作為狀態輸出傳遞的 JSON。

{ "details": "Default example", "who": "AWS Step Functions", "taskresult": "Hello, AWS Step Functions!" }

使用 OutputPath

OutputPath過濾器可以讓您過濾掉不需要的信息,並僅傳遞您關心的 JSON 部分。這OutputPath是一個字符串$,用於標識 JSON 文本中的節點。

範例 使用 OutputPath 過濾器的示例

除了有效負載之外,Lambda 叫用 API 呼叫還會傳回中繼資料,也就是 Lambda 函數的結果。此 API 呼叫的回應範例會顯示在狀態的 [輸出] 索引標籤下。


              輸出面板

您可以使用OutputPath來篩選出其他中繼資料。根據預設,透過工作流程 Studio 建立的 Lambda 叫用狀態的OutputPath篩選器值為$.Payload。此預設值會移除其他中繼資料,並傳回等同於直接執行 Lambda 函數的輸出。

Lambda 叫用工作結果範例和輸出篩選器的$.Payload值會傳遞下列 JSON 資料做為輸出。

{ "foo": "bar", "colors": [ "red", "blue", "green" ], "car": { "year": 2008, "make": "Toyota", "model": "Matrix" } }
注意

由於OutputPath濾鏡是最後一個生效的輸出濾鏡,因此如果您使用其他輸出濾鏡 (例如ResultSelector或)ResultPath,您應該相應地修改OutputPath濾鏡的$.Payload預設值。