微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为 AWS Step Functions 状态机传递混合参数

如何解决如何为 AWS Step Functions 状态机传递混合参数

我在 json 文件中定义了一个 AWS Step Functions 状态机,在 step1一个 lambda 任务)中,我在 ResultPath 中保存了三个参数:

   "NeededParameters": {
      "year": "2021","month": "04","day": "27"
    },

step2(也是一个 lambda 任务)中,我知道如果我执行以下操作:

"Step 2" : {
         "Type": "Task","Resource": "arn:aws:states:::lambda:invoke","Parameters": {
             "FunctionName":"${lambda_name}","Payload":{
               "year.$": "$.NeededParameters.year"
             }
         },"ResultPath": "$.Step2",

"year.$": "$.NeededParameters.year" 会将 2021 传递给负载 Year

但我想要实现的是定义一个包含三个参数的 Amazon S3 路径,例如:

 "Step 2" : {
          "Type": "Task","Parameters": {
              "FunctionName":"${lambda_name}","Payload":{
                "s3path.$":"${s3_bucket_name}/$.NeededParameters.year/$.NeededParameters.month/$.NeededParameters.day"
              }
          },

s3_bucket_nameterraform resource "aws_sfn_state_machine" "sfn_state_machine" 中定义并传递给上面的状态机定义 json 文件,但是当我应用 terraform 时它会抱怨:

InvalidDeFinition: Invalid State Machine DeFinition: 'SCHEMA_VALIDATION_Failed: The value for the field 's3path.$' must be a valid JSONPath at /States/Process scores/Parameters'

如果我将 s3path.$ 更改为 s3path 仍然无法正常工作,有人知道如何解决吗?谢谢。

解决方法

  1. 正如错误消息所暗示的,您传递给 s3path.$ 的字符串不是有效的 JSONPath。如果你想传递一些静态值,你需要在末尾不带 .$ 的情况下命名它(只是 s3path),否则,就像你的情况一样,它将被视为和验证为 JSONPath。

  2. 据我所知,静态参数不支持任何类型的字符串扩展,尤其是涉及 JSONPath。除了年、月和日之外,我建议传递名为 s3BucketName 的参数,然后在 lambda 函数本身内部构建 S3 URL。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。