如何使用当前步函数的 url 更新 AWS 步函数输入
How to update AWS step function input with url of current step function
我想捕获当前步函数的 url 并更新此 json 输入:
{
"log_telemetry": {
"eventType": "telemetry",
"operation": "start",
"data": {
"correlation_id": "69974248-7673-42fb-8d1d-e4e2bd3e0946",
"start_time": "01/05/2022, 16:00:31",
"environment": "stg",
"step_function_url": "i want to update this string with the url"
}
}
我将通过连接 https://console.aws.amazon.com/states/home?region=us-east-1#/executions/details/
和 $$.Execution.Id
来派生 url 字符串
我可以使用 Pass 步骤获取执行 ID,例如
{
"States": {
"Set Up Config": {
"Type": "Pass",
"ResultPath": "$.log_telemetry.data.step_function_url",
"InputPath": "$$.Execution.Id",
"Next": "Log Telemetry Start"
},
...
}
但我不清楚如何使用字符串作为前缀。 States.Format
如果我在 Parameters 字段中使用它,则将它们连接起来,但在 Pass 步骤中将其设置为结果,它只是将其视为文字,例如
{
"States": {
"Set Up Config": {
"Type": "Pass",
"ResultPath": "$.log_telemetry.data.step_function_url",
"Result": "States.Format('https://console.aws.amazon.com/states/home?region=us-east-1#/executions/details/{}', $$.Execution.Id)",
"Next": "Log Telemetry Start"
},
...
}
json 输入中的“数据”元素可以包含任意数量的字段
感谢您的帮助
我们可以在 Pass
任务中添加 step_function_url
作为原始有效负载的兄弟。 Parameters 将执行 ID 添加到输入中。输入默认作为输出传递,这就是我们想要的。
状态定义:
"PassTask": {
"Type": "Pass",
"Parameters": {
"step_function_url.$": "States.Format('https://console.aws.amazon.com/states/home?region=us-east-1#/executions/details/{}', $$.Execution.Id)",
"log_telemetry.$": "$.log_telemetry"
},
"Next": "MySuperNextTask"
},
步进输出url,使用OP输入:
{
"step_function_url": "https://console.aws.amazon.com/states/home?region=us-east-1#/executions/details/arn:aws:states:us-east-1:xxxxxxx:execution:StateMachineXXXXX-twWleHeOy2pw:ebbf738e-a2df-c6a0-f626-xxxxxxxxxx",
"log_telemetry": {
"eventType": "telemetry",
"operation": "start",
"data": {
"correlation_id": "69974248-7673-42fb-8d1d-e4e2bd3e0946",
"start_time": "01/05/2022, 16:00:31",
"environment": "stg"
}
}
}
编辑:添加执行url而不改变输入形状
将执行 url 添加到原始负载的 data
映射需要额外的步骤。问题是 data
具有任意键值对。状态语言没有语法 将 data.step_function_url
的值设置为 x
,但传递数据的其他键值不变 。它不能做第二部分。
很容易解决:在 Pass
之后添加一个 Lambda 任务,将 url 值合并到原始形状中。
exports.handler = async (event) => {
event.log_telemetry.data.step_function_url = event.step_function_url;
return event.log_telemetry;
}
输出现在与 OP 的输入具有相同的形状。
如果其他人觉得它有用,我最终使用了 2 个传递任务来实现这个
"States": {
"Determine Url": {
"Type": "Pass",
"Parameters": {
"value.$": "States.Format('${step_function_url_prefix}/{}', $$.Execution.Id)"
},
"ResultPath": "$.determine_url",
"Next": "Update Url"
},
"Update Url": {
"Type": "Pass",
"InputPath": "$.determine_url.value",
"ResultPath": "$.log_telemetry.data.step_function_url",
"Next": "Log Telemetry Start"
}
}
我想捕获当前步函数的 url 并更新此 json 输入:
{
"log_telemetry": {
"eventType": "telemetry",
"operation": "start",
"data": {
"correlation_id": "69974248-7673-42fb-8d1d-e4e2bd3e0946",
"start_time": "01/05/2022, 16:00:31",
"environment": "stg",
"step_function_url": "i want to update this string with the url"
}
}
我将通过连接 https://console.aws.amazon.com/states/home?region=us-east-1#/executions/details/
和 $$.Execution.Id
我可以使用 Pass 步骤获取执行 ID,例如
{
"States": {
"Set Up Config": {
"Type": "Pass",
"ResultPath": "$.log_telemetry.data.step_function_url",
"InputPath": "$$.Execution.Id",
"Next": "Log Telemetry Start"
},
...
}
但我不清楚如何使用字符串作为前缀。 States.Format
如果我在 Parameters 字段中使用它,则将它们连接起来,但在 Pass 步骤中将其设置为结果,它只是将其视为文字,例如
{
"States": {
"Set Up Config": {
"Type": "Pass",
"ResultPath": "$.log_telemetry.data.step_function_url",
"Result": "States.Format('https://console.aws.amazon.com/states/home?region=us-east-1#/executions/details/{}', $$.Execution.Id)",
"Next": "Log Telemetry Start"
},
...
}
json 输入中的“数据”元素可以包含任意数量的字段
感谢您的帮助
我们可以在 Pass
任务中添加 step_function_url
作为原始有效负载的兄弟。 Parameters 将执行 ID 添加到输入中。输入默认作为输出传递,这就是我们想要的。
状态定义:
"PassTask": {
"Type": "Pass",
"Parameters": {
"step_function_url.$": "States.Format('https://console.aws.amazon.com/states/home?region=us-east-1#/executions/details/{}', $$.Execution.Id)",
"log_telemetry.$": "$.log_telemetry"
},
"Next": "MySuperNextTask"
},
步进输出url,使用OP输入:
{
"step_function_url": "https://console.aws.amazon.com/states/home?region=us-east-1#/executions/details/arn:aws:states:us-east-1:xxxxxxx:execution:StateMachineXXXXX-twWleHeOy2pw:ebbf738e-a2df-c6a0-f626-xxxxxxxxxx",
"log_telemetry": {
"eventType": "telemetry",
"operation": "start",
"data": {
"correlation_id": "69974248-7673-42fb-8d1d-e4e2bd3e0946",
"start_time": "01/05/2022, 16:00:31",
"environment": "stg"
}
}
}
编辑:添加执行url而不改变输入形状
将执行 url 添加到原始负载的 data
映射需要额外的步骤。问题是 data
具有任意键值对。状态语言没有语法 将 data.step_function_url
的值设置为 x
,但传递数据的其他键值不变 。它不能做第二部分。
很容易解决:在 Pass
之后添加一个 Lambda 任务,将 url 值合并到原始形状中。
exports.handler = async (event) => {
event.log_telemetry.data.step_function_url = event.step_function_url;
return event.log_telemetry;
}
输出现在与 OP 的输入具有相同的形状。
如果其他人觉得它有用,我最终使用了 2 个传递任务来实现这个
"States": {
"Determine Url": {
"Type": "Pass",
"Parameters": {
"value.$": "States.Format('${step_function_url_prefix}/{}', $$.Execution.Id)"
},
"ResultPath": "$.determine_url",
"Next": "Update Url"
},
"Update Url": {
"Type": "Pass",
"InputPath": "$.determine_url.value",
"ResultPath": "$.log_telemetry.data.step_function_url",
"Next": "Log Telemetry Start"
}
}