使用 JSON 输入替换 AWS Step Function 中的 'Variable'
Use JSON Input to Replace 'Variable' in AWS Step Function
我有一个 AWS Step Function,我想通过开始执行时包含的 JSON 输入向其传递一个值。 Step 函数启动 ETL 作业并通过调用执行所述任务的 Lambda 函数检查其状态。 StartGlueJob Lambda 函数通过 JobName JSON 输入启动。我想传入的值是名为 'regionalCenters' 的胶水作业的参数,在这种情况下所需的值将是 'LA'。
我已经尝试,如下所示,使用 $.value 语法从 JSON 输入传递,但这没有按预期运行,我不确定为什么。
Lambda 代码片段:
let jobInfo = await glue.startJobRun({ JobName: jobName, Arguments: arguments }).promise();
JSON 输入
{
"value": "LA"
}
步进函数
{
"StartAt": "InitStartEtl",
"States": {
"InitStartEtl": {
"Type": "Pass",
"Result": {
"jobName": "name-of-my-etl-job",
"arguments": {"regionalCenters": "$.value"}
}
},
"StartEtl": {
"Type": "Task",
"Resource": "arn:aws:lambda:<redacted>",
"Next": "WaitForForEtlCheck"
},
"WaitForForEtlCheck": {
"Type": "Wait",
"Seconds": 10,
"Next": "GetEtlState"
},
"GetEtlState": {
"Type": "Task",
"Resource": "arn:aws:lambda:<redacted>",
"Next": "IsEtlFinished"
},
"IsEtlFinished": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.state",
"StringEquals": "READY",
"Next": "EtlDone"
}
],
"Default": "WaitForForEtlCheck"
},
"EtlDone": {
"Type": "Pass",
"End": true
}
}
}
我能够通过更改结果并添加一个 ResultPath 来解决我自己的问题,a la:
{
"StartAt": "InitStartEtl",
"States": {
"InitStartEtl": {
"Type": "Pass",
"Result": "name-of-my-etl-job",
"ResultPath": "$.jobName",
"Next": "StartEtl"
},
更改结果允许我通过 ResultPath 将字符串添加到 .jobName 节点,同时将 {"value": "LA"} 的输入附加到输出
你最后错过了 .$ regionalCenters
应该是
"arguments": {"regionalCenters.$": "$.value"}
看这里
https://docs.aws.amazon.com/step-functions/latest/dg/connect-parameters.html
我有一个 AWS Step Function,我想通过开始执行时包含的 JSON 输入向其传递一个值。 Step 函数启动 ETL 作业并通过调用执行所述任务的 Lambda 函数检查其状态。 StartGlueJob Lambda 函数通过 JobName JSON 输入启动。我想传入的值是名为 'regionalCenters' 的胶水作业的参数,在这种情况下所需的值将是 'LA'。
我已经尝试,如下所示,使用 $.value 语法从 JSON 输入传递,但这没有按预期运行,我不确定为什么。
Lambda 代码片段:
let jobInfo = await glue.startJobRun({ JobName: jobName, Arguments: arguments }).promise();
JSON 输入
{
"value": "LA"
}
步进函数
{
"StartAt": "InitStartEtl",
"States": {
"InitStartEtl": {
"Type": "Pass",
"Result": {
"jobName": "name-of-my-etl-job",
"arguments": {"regionalCenters": "$.value"}
}
},
"StartEtl": {
"Type": "Task",
"Resource": "arn:aws:lambda:<redacted>",
"Next": "WaitForForEtlCheck"
},
"WaitForForEtlCheck": {
"Type": "Wait",
"Seconds": 10,
"Next": "GetEtlState"
},
"GetEtlState": {
"Type": "Task",
"Resource": "arn:aws:lambda:<redacted>",
"Next": "IsEtlFinished"
},
"IsEtlFinished": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.state",
"StringEquals": "READY",
"Next": "EtlDone"
}
],
"Default": "WaitForForEtlCheck"
},
"EtlDone": {
"Type": "Pass",
"End": true
}
}
}
我能够通过更改结果并添加一个 ResultPath 来解决我自己的问题,a la:
{
"StartAt": "InitStartEtl",
"States": {
"InitStartEtl": {
"Type": "Pass",
"Result": "name-of-my-etl-job",
"ResultPath": "$.jobName",
"Next": "StartEtl"
},
更改结果允许我通过 ResultPath 将字符串添加到 .jobName 节点,同时将 {"value": "LA"} 的输入附加到输出
你最后错过了 .$ regionalCenters
应该是 "arguments": {"regionalCenters.$": "$.value"}
看这里 https://docs.aws.amazon.com/step-functions/latest/dg/connect-parameters.html