gpt4 book ai didi

amazon-web-services - AWS cloudformation 错误:模板验证错误:模板错误:资源NotificationsTopic 不支持 Fn::GetAtt 中的属性类型 Arn

转载 作者:行者123 更新时间:2023-12-02 02:33:00 24 4
gpt4 key购买 nike

我正在尝试使用 yaml 模板创建 AWS cloudformation 堆栈。目标是为某些通知创建一个 sns 主题。我想输出主题 arn,以便能够通过指定主题 arn 来订阅该主题的多个函数。

但是,当我尝试从 aws 控制台创建堆栈时遇到错误:

“模板验证错误:模板错误:资源NotificationsTopic不支持Fn::GetAtt中的属性类型Arn”

我对 s3 存储桶、dynamodb 表执行了完全相同的操作,一切正常,但由于某种原因,我无法通过 SNS 主题获取 ARN。

我想避免在订阅的所有函数中对主题 arn 进行硬编码。因为如果有一天 ARN 主题发生变化,我将需要更改所有函数,而是想在所有函数中导入主题 arn 并使用它。这样,如果将来出于任何原因我有一个新的 arn 主题,我将不需要修改任何内容。

这是模板:

    Parameters:
stage:
Type: String
Default: dev
AllowedValues:
- dev
- int
- uat
- prod

Resources:
NotificationsTopic:
Type: AWS::SNS::Topic
Properties:
DisplayName: !Sub 'notifications-${stage}'
Subscription:
- SNS Subscription
TopicName: !Sub 'notifications-${stage}'
Outputs:
NotificationsTopicArn:
Description: The notifications topic Arn.
Value: !GetAtt NotificationsTopic.Arn
Export:
Name: !Sub '${AWS::StackName}-NotificationsTopicArn'
NotificationsTopicName:
Description: Notifications topic name.
Value: !Sub 'notifications-${stage}'
Export:
Name: !Sub '${AWS::StackName}-NotificationsTopicName'

最佳答案

并非所有资源都是相同的。请务必检查特定资源的文档。它具有“返回值”部分,您可以轻松验证 SNS 主题是否将 ARN 作为 Ref 值,因此您不必使用 GetAtt 函数

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html

编辑:感谢您的评论,它指出并非每个资源都提供其 ARN。一个值得注意的例子是自动缩放组。当然,我的回答中的关键是“检查每个资源的文档”,这是一个并非每个资源都具有每个属性的示例。话虽如此,ASG 输出中缺少 ARN 确实是一件很奇怪的事情。它也不容易构造,因为 ARN 还包含 GroupId,它是一个随机哈希。至少对于 ECS 容量提供商的用例 https://github.com/aws-cloudformation/aws-cloudformation-coverage-roadmap/issues/548 可能需要做出一些努力来解决此问题和 https://github.com/aws/containers-roadmap/issues/631#issuecomment-648377011但我认为这是一个足够重要的问题,应该在这里提及。

关于amazon-web-services - AWS cloudformation 错误:模板验证错误:模板错误:资源NotificationsTopic 不支持 Fn::GetAtt 中的属性类型 Arn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53457474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com