Amazon web services AWS Stepfunctions结果路径-附加到JSON而不是嵌套
目前,我正在尝试创建一系列lambda,这些lambda将从StepFunctions输入中执行给定的特定有效负载。我的一切都在运转;然而,这并不是我想要的 我终于掌握了InputPath、ResultPath和OutputPath之间的区别。我现在唯一的问题是允许ResultPath“附加”返回的JSON,而不是将其嵌套在有效负载中 这是状态机:Amazon web services AWS Stepfunctions结果路径-附加到JSON而不是嵌套,amazon-web-services,aws-lambda,aws-step-functions,Amazon Web Services,Aws Lambda,Aws Step Functions,目前,我正在尝试创建一系列lambda,这些lambda将从StepFunctions输入中执行给定的特定有效负载。我的一切都在运转;然而,这并不是我想要的 我终于掌握了InputPath、ResultPath和OutputPath之间的区别。我现在唯一的问题是允许ResultPath“附加”返回的JSON,而不是将其嵌套在有效负载中 这是状态机: { "StartAt": "GetDailyEmails", "States": { "GetDailyEmails": {
{
"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
。我想让lambda完全不可知它们是从测试负载执行还是从step函数执行
以下是我尝试接收的输出:
{
"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
嵌套字典,我需要在其中解释它
我可以用一种通用的方式编写它,它只是传递给它的
数据有效载荷;但是,如果可能的话,我正在尝试将所有内容都放在一个有效负载内而不嵌套。我可以看出,您正在尝试实现一个好的设计。虽然没有现成的解决方案来提供你所需要的,但是我有一个不同的建议,你可能需要考虑。
将GetDailyEmailsResults
以不同的方式放置,而不是放在您提供的输入中
根据需要从JSON中选取步骤函数数据,创建lambda的输入
这是我提议的状态机(它在语法上可能不完全正确,但你会有一个想法)
我希望这有帮助
干杯:)
{
"StartAt": "GetDailyEmails",
"States": {
"GetDailyEmails": {
"Type": "Task",
"Resource": "arn:aws:lambda:region:account:function:DailyEmailExtractor",
"InputPath": "$.GetDailyEmailsInputs",
"ResultPath": "$.GetDailyEmailsResults",
"Next": "TransformEmailsToCSV"
},
"TransformEmailsToCSV": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters":{
"FunctionName":"EmailTransform",
"Payload":{
"csv_output_file_name": "apex_errors",
"object_key.$": "$.GetDailyEmailsResults.object_key",
"bucket_name.$": "$.GetDailyEmailsResults.bucket_name"
}
},
"End": true
}
}
}