AWS Step Functions:如何使用“传递”步骤“重命名”输入参数

Har*_*tty 2 aws-lambda aws-step-functions

我有一个状态机,其中包含以下相关状态:

States:
  'Analyze Report':
    Type: Task
    Resource: 'arn:aws:states:::lambda:invoke'
    Parameters:
      FunctionName: '(redacted)'
    OutputPath: '$.Payload'
    Next: 'Setup Email'
  'Setup Email':
    Type: Pass
    Result:
      recipients: '$.accounts'
      subject: 'some email subject'
      body: 'some email body'
    ResultPath: '$'
    Next: 'Send Email'
  'Send Email':
    Type: Task
    Resource: 'arn:aws:states:::lambda:invoke'
    Parameters:
      FunctionName: '(redacted)'
    OutputPath: '$.Payload'
    Next: '(some downstream task)'
Run Code Online (Sandbox Code Playgroud)

与该步骤关联的 lambda 函数的输出Analyze Report具有以下形式:

{
  "accounts": ["foo", "bar", "baz"],
  "error_message": null,
  "success": true
}
Run Code Online (Sandbox Code Playgroud)

与步骤关联的 lambda 函数Send Email需要以下形式的输入:

{
  "recipients": ["foo", "bar", "baz"],
  "subject": "some email subject",
  "body": "some email body"
}
Run Code Online (Sandbox Code Playgroud)

当查看状态函数的测试执行时,该步骤似乎Setup Email没有成功地将$.accounts字符串插入到accounts该步骤的数组输出中Analyze Report。相反,该Send Email步骤会看到以下输入:

{
  "recipients": "$.accounts",
  "subject": "some email subject",
  "body": "some email body"
}
Run Code Online (Sandbox Code Playgroud)

我尝试过各种组合,例如设置:

# (within the `Setup Email` step)
Result:
  'recipients.$': '$.accounts'
Run Code Online (Sandbox Code Playgroud)

但它不想看起来插值。AWS提供的文档在这方面似乎有点缺乏。

TL;DR: 如何使用类型为 step 的步骤函数有效地“重命名”输入参数(带有数组值)Pass

Jas*_*rth 6

您需要Parameters在您所在的Pass州使用。这是一个例子:

{
  "Comment": "A Hello World example of the Amazon States Language using Pass states",
  "StartAt": "Hello",
  "States": {
    "Hello": {
      "Type": "Pass",
      "Parameters": {
        "newName.$": "$.oldName"
      },
      "Next": "World"
    },
    "World": {
      "Type": "Pass",
      "Result": "World",
      "End": true
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

{ "oldName": "some value" }当我使用第二个状态的输入有效负载运行上面的代码时{ "newName": "some value" }