【发布时间】:2019-07-12 14:05:21
【问题描述】:
目前,我正在尝试创建一系列 Lambda,它们将从 StepFunctions 输入中执行给定的特定负载。我一切正常;但是,这不是我想要的。
我终于掌握了 InputPath、ResultPath 和 OutputPath 之间的区别。我现在唯一的问题是允许 ResultPath “附加”返回的 JSON,而不是将其嵌套在有效负载中。
这是状态机:
{
"StartAt": "GetDailyEmails",
"States": {
"GetDailyEmails": {
"Type": "Task",
"Resource": "arn:aws:lambda:region:account:function:DailyEmailExtractor",
"InputPath": "$.GetDailyEmailsInputs",
"ResultPath": "$.TransformEmailsToCSVInputs.GetDailyEmailsResults",
"Next": "TransformEmailsToCSV"
},
"TransformEmailsToCSV": {
"Type": "Task",
"Resource": "arn:aws:lambda:region:account:function:EmailTransform",
"InputPath": "$.TransformEmailsToCSVInputs",
"End": true
}
}
}
这是我提供的输入:
{
"GetDailyEmailsInputs": {
"secret_name": "email_password",
"subject_contains": "stuff",
"json_output_file_name": "test_emails",
"bucket_name": "emails"
},
"TransformEmailsToCSVInputs": {
"csv_output_file_name": "email_errors"
}
}
这是我收到的输出:
{
"GetDailyEmailsInputs": {
"secret_name": "email_password",
"subject_contains": "stuff",
"json_output_file_name": "test_emails",
"bucket_name": "emails"
},
"TransformEmailsToCSVInputs": {
"csv_output_file_name": "apex_errors",
"GetDailyEmailsResults": {
"object_key": "raw_emails/test_emails.json",
"bucket_name": "emails"
}
}
}
虽然这确实有效,但我必须手动提取 TransformEmailsToCSV lambda 中的 GetDailyEmailsResults。我想让 lambdas 完全不知道它们是从测试有效负载还是从 stepfunctions 执行的。
这是我想要接收的输出:
{
"GetDailyEmailsInputs": {
"secret_name": "email_password",
"subject_contains": "stuff",
"json_output_file_name": "test_emails",
"bucket_name": "emails"
},
"TransformEmailsToCSVInputs": {
"csv_output_file_name": "apex_errors",
"object_key": "raw_emails/test_emails.json",
"bucket_name": "emails"
}
}
这样,我就不需要考虑到 GetDailyEmailsResults 嵌套字典。
我可以用一种通用的方式来写这个,它只是一个 data 有效载荷被传递给它;但是,如果可能的话,我试图将所有内容都包含在单个有效负载中而不进行嵌套。
【问题讨论】:
标签: amazon-web-services aws-lambda aws-step-functions