我在为 SNS 部署 AWS CloudFormation 堆栈时遇到问题。我收到的错误消息是:
Model validation failed (#/Subscription: expected type: JSONArray, found: JSONObject)
我有以下 CloudFormation 模板代码片段,其中我定义了一个 SNS 主题并设置了订阅属性。目的是从可以包含电子邮件地址的参数动态创建订阅数组。
Parameters:
Endpoint1:
Type: String
Endpoint2:
Type: String
EnvironmentName:
Description: "The environment name (e.g., dev, prod)"
Type: String
Resources:
Topic1:
Type: AWS::SNS::Topic
Properties:
DisplayName: !Sub ${EnvironmentName} notification1
TopicName: !Sub ${EnvironmentName}-notification1
Subscription:
Endpoint: ${Endpoint1}
Protocol: "email"
StuckedObjectsSNSTopic:
Type: AWS::SNS::Topic
Properties:
DisplayName: !Sub ${EnvironmentName} Notification2
TopicName: !Sub ${EnvironmentName}-notification2
Subscription:
Endpoint: ${Endpoint2}
Protocol: "email"
我从 python 的字典中传递了 Endpoint1 和 Endpoint2。
ENDPOINT1 = "[email protected]"
ENDPOINT2 = "[email protected]"
context["Endpoint1"] = ENDPOINT1
context["Endpoint2"] = ENDPOINT2
Subscription 属性应该是一个数组,但是模板给出一个错误,表明它收到的是一个对象。
如何正确格式化 Subscription 属性以使其始终为 CloudFormation 中的有效 JSON 数组,尤其是在动态处理单个和多个电子邮件地址时?有没有更可靠的方法来实现这一点?
正如所提到的,它需要是一个数组。
您有:
它必须是:
请参阅https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-topic.html#aws-resource-sns-topic--examples中的示例