如何在状态机中定制发出的SNS消息?

0

【以下的问题经过翻译处理】 我有以下这个Step function状态机的step:

    "Step Name": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "TopicArn": "${TopicARN}",
        "Message.$": "States.JsonToString($)",
        "MessageAttributes": {
          "type": {
            "DataType": "String",
            "StringValue": "$.type"
          },
          "id": {
            "DataType": "String",
            "StringValue": "$.id"
          }
        }
      },
      "End": true
    }

这个是可以正常运行的,但我想自定义SNS消息的正文,像这样:

"Step Name": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "TopicArn": "${TopicARN}",
        "Message.$": {
          "id": "$.id",
          "param1": "$.param1",
          "param2": "$.param2",
          "metadata": "$"
        },
        "MessageAttributes": {
          "type": {
            "DataType": "String",
            "StringValue": "$.type"
          },
          "id": {
            "DataType": "String",
            "StringValue": "$.id"
          }
        }
      },
      "End": true
    }

但是却不行,因为“Message”必须是一个“String”。我希望使用“States.JsonToString”来包我的对象,但似乎也不行。

有没有办法实现这个,还是我必须使用Lambda代替SNS集成?

profile picture
专家
已提问 5 个月前13 查看次数
1 回答
0

【以下的回答经过翻译处理】 要指定一个参数使用路径来引用输入中的JSON节点,请在参数名称末尾加上 .$(来自[文档](https://docs.aws.amazon.com/step-functions/latest/dg/connect-parameters.html))。

在你的场景下,可以参考如下范例:

    "Step Name": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "TopicArn": "${TopicARN}",
        "Message": {
          "id.$": "$.id",
          "param1.$": "$.param1",
          "param2.$": "$.param2",
          "metadata.$": "$"
        },
        "MessageAttributes": {
          "type": {
            "DataType": "String",
            "StringValue.$": "$.type"
          },
          "id": {
            "DataType": "String",
            "StringValue.$": "$.id"
          }
        }
      },
      "End": true
    }

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则