从StepFunction发布SNS消息时如何将JSONPath传递给MessageAttribute?

时间:2019-08-23 02:37:52

标签: amazon-sns aws-step-functions

在尝试从Step函数发布SNS时,我试图将值动态传递给MessageAttribute参数。

参考:https://docs.aws.amazon.com/step-functions/latest/dg/connect-sns.html

如果要从Step函数发布到SNS,请按照文档中提供的示例进行操作:

{
 "StartAt": "Publish to SNS",
 "States": {
   "Publish to SNS": {
     "Type": "Task",
     "Resource": "arn:aws:states:::sns:publish",
     "Parameters": {
       "TopicArn": "arn:aws:sns:us-east-1:111222333444:myTopic",
       "Message.$": "$.input.message",
       "MessageAttributes": {
         "my attribute no 1": {
           "DataType": "String",
           "StringValue": "value of my attribute no 1"
         },
         "my attribute no 2": {
           "DataType": "String",
           "StringValue": "value of my attribute no 2"
         }
       }
     },
     "End": true
    }
  }
}

现在假设我对状态机的输入如下:

"SNSDetails": {
    "attribute1": "some value",
    "attribute2": "some other value",
  }

如何动态地访问“我的属性1”的“ StringValue”中的$ .SNSDetails.attribute1,并类似地访问“我的属性2”的StringValue中的$ .SNSDetails.attribute2,而不是对其进行硬编码?

最终,我希望状态机将“我的1号属性”的值转换为“某些值”,并将“我的2号属性”的值转换为“其他值”

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以通过在.$属性名称后附加StringValue来做到这一点:这将指示引擎将属性值评估为JSON路径。

给出此输入有效载荷:

{
  "input": {
    "message": "Hello world"
  },
  "SNSDetails": {
    "attribute1": "some value",
    "attribute2": "some other value",
  }
}

...以及此StepFunction代码:

{
 "StartAt": "Publish to SNS",
 "States": {
   "Publish to SNS": {
     "Type": "Task",
     "Resource": "arn:aws:states:::sns:publish",
     "Parameters": {
       "TopicArn": "arn:aws:sns:us-east-1:111222333444:myTopic",
       "Message.$": "$.input.message",
       "MessageAttributes": {
         "my attribute no 1": {
           "DataType": "String",
           "StringValue.$": "$.SNSDetails.attribute1"
         },
         "my attribute no 2": {
           "DataType": "String",
           "StringValue.$": "$.SNSDetails.attribute2"
         }
       }
     },
     "End": true
    }
  }
}

...它将正确解决。

您可以在AWS控制台(步骤功能)上的执行事件历史记录 TaskScheduled 详细信息)中轻松检查结果。