xbe*_*eta 7 amazon-web-services aws-step-functions
我们如何使用Parameters
,ResultPath
和ResultSelector
将 a 的结果Task
与同一 JSON 级别中的原始输入结合起来?
我检查了AWS 上的文档,但似乎ResultSelector
总是创建一个新字典,将其置于结果的下方 1 级。
输入示例
{
"status": "PENDING",
"uuid": "00000000-0000-0000-0000-000000000000",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@email.com",
"orders": [
{
"item_uuid": "11111111-1111-1111-1111-111111111111",
"quantities": 2,
"price": 2.38,
"created_at": 16049331038000
}
]
}
Run Code Online (Sandbox Code Playgroud)
状态机定义
"Review": {
"Type": "Task",
"Resource": "arn:aws:states:us-east-1:123456789012:activity:Review",
"ResultPath": null,
"Next": "Processing",
"Parameters": {
"task_name": "REVIEW_REQUIRED",
"uuid.$": "$.uuid"
}
},
Run Code Online (Sandbox Code Playgroud)
Review
活动的输出示例
{
"review_status": "APPROVED"
}
Run Code Online (Sandbox Code Playgroud)
问题
如何更新状态机定义以将Review
活动的结果和原始输入合并为如下所示?
{
"status": "PENDING",
"uuid": "00000000-0000-0000-0000-000000000000",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@email.com",
"orders": [
{
"item_uuid": "11111111-1111-1111-1111-111111111111",
"quantities": 2,
"price": 2.38,
"created_at": 16049331038000
}
],
"review_status": "APPROVED"
}
Run Code Online (Sandbox Code Playgroud)
注意 我无权访问活动代码,只能访问定义文件。
小智 6
虽然 Step Function 不允许您这样做,但您可以创建一个 Pass 状态来扁平化输入作为解决方法。
输入示例:
{
"name": "John Doe",
"lambdaResult": {
"age": "35",
"location": "Eastern Europe"
}
}
Run Code Online (Sandbox Code Playgroud)
亚马逊国家语言:
"Flatten": {
"State": "Pass",
"Parameters": {
"name.$" : "$.name",
"age.$" : "$.lambdaResult.age",
"location.$": "$.lambdaResult.location"
},
"Next": "MyNextState"
}
Run Code Online (Sandbox Code Playgroud)
输出:
{
"name": "John Doe",
"age": "35",
"location": "Eastern Europe"
}
Run Code Online (Sandbox Code Playgroud)
这很乏味,但它可以完成工作。
小智 5
我建议不要按照上面建议的方式进行操作,因为您将删除所有不包含的数据。这不是一个长期的方法,您可以更轻松地这样做:
步进输入
{
"a": "a_value",
"b": "b_value",
"c": {
"c": "c_value"
}
}
Run Code Online (Sandbox Code Playgroud)
在你的 state-machine.json 中
"Flatten And Keep All Other Keys": {
"Type": "Pass",
"InputPath": "$.c.c",
"ResultPath": "$.c",
"Next": "Some Other State"
}
Run Code Online (Sandbox Code Playgroud)
步进输出
{
"a": "a_value",
"b": "b_value",
"c": "c_value"
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3978 次 |
最近记录: |