在尝试从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号属性”的值转换为“其他值”
谢谢。
答案 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 详细信息)中轻松检查结果。