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

Amazon sns 从StepFunction发布SNS消息时,如何将JSONPath传递给MessageAttribute?,amazon-sns,aws-step-functions,Amazon Sns,Aws Step Functions,在从Step函数执行SNS发布时,我尝试将值动态传递给MessageAttribute参数 参考: 根据文档中提供的示例,如果要从Step函数发布到SNS: { "StartAt": "Publish to SNS", "States": { "Publish to SNS": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "Topi

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

参考:

根据文档中提供的示例,如果要从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”的值转换为“某个其他值”


提前感谢。

您可以通过将
$
附加到
StringValue
属性名称来执行此操作:这将指示引擎将属性值作为JSON路径进行评估

给定此输入有效载荷:

{
  "input": {
    "message": "Hello world"
  },
  "SNSDetails": {
    "attribute1": "some value",
    "attribute2": "some other value",
  }
}
…此步骤的功能代码为:

{
 "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详细信息)中轻松检查结果