Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS Stepfunctions结果路径-附加到JSON而不是嵌套_Amazon Web Services_Aws Lambda_Aws Step Functions - Fatal编程技术网

Amazon web services AWS Stepfunctions结果路径-附加到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": {

目前,我正在尝试创建一系列lambda,这些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
。我想让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
        }
      }
    }