如何解决AWS SAM模板中出现Fn :: GetAtt错误
我已经在我的AWS无服务器应用程序模型模板中声明了SNS主题和订阅,如下所示:-
MyTopic:
Type: AWS::SNS::Topic
Properties:
displayName: !Sub 'test-${Environment}-${AWS::AccountId}-${AWS::Region}'
Tags:
- Key: Environment
Value: !FindInMap [Environment,FullForm,!Ref Environment]
TopicName: !Sub 'test-${Environment}-${AWS::AccountId}-${AWS::Region}'
MySubscription:
Type: AWS::SNS::Subscription
Properties:
Endpoint: !Ref SubscriptionEndPoint
Protocol: !Ref SubscriptionProtocol
Region: !Ref 'AWS::Region'
TopicArn: !Ref MyTopic
然后在同一个模板文件中,在我的Lambda函数的环境中使用SNS主题ARN:-
MyLambda:
Type: AWS::Serverless::Function
Properties:
Environment:
Variables:
RUNTIME_SNS_TOPIC_ARN: !GetAtt MyTopic.Arn
输出(在SAM模板中):-
MyTopic:
Description: SNS Topic for the Ingest to send notification to
Export:
Name: !Sub
- ${ExportPrefix_}:${AWS::Region}:MyTopic
- ExportPrefix_: !If
- HasExportPrefix
- !Join ['-',[!Ref ExportPrefix,!Ref Environment]]
- !Join ['-',[!Select [0,!Split ["-",!Ref "AWS::StackName"]],!Ref Environment]]
Value: !Sub "${MyTopic.Arn}:${MyTopic.Version.Version}"
MySubscription:
Description: Subscription to get messages from a topic
Export:
Name: !Sub
- ${ExportPrefix_}:${AWS::Region}:MySubscription
- ExportPrefix_: !If
- HasExportPrefix
- !Join ['-',!Ref Environment]]
Value: !Sub "${MySubscription.Arn}:${MySubscription.Version.Version}"
但是,我收到以下错误消息:-
13:30:30错误:无法为堆栈创建变更集:my-stack,例如:Waiter ChangeSetCreateComplete失败:Waiter遇到终端故障状态:Failed。原因:模板错误:资源MyTopic不支持Fn :: GetAtt中的属性类型Arn
解决方法
使用AWS::SNS:Topic
时,Ref
返回ARN
检查返回值上的Docs。
尝试
MyLambda:
Type: AWS::Serverless::Function
Properties:
Environment:
Variables:
RUNTIME_SNS_TOPIC_ARN: !Ref MyTopic # Using !Ref
,
建议在创作模板时尝试在CloudFormation Linter中的VSCode内联查看其中一些错误:
[cfn-lint] E1010: Invalid GetAtt MyTopic.Arn for resource MyLambda
[cfn-lint] E1019: Parameter MyTopic.Arn for Fn::Sub not found at Outputs/MyTopic/Value/Fn::Sub
[cfn-lint] E1019: Parameter MyTopic.Version.Version for Fn::Sub not found at Outputs/MyTopic/Value/Fn::Sub
[cfn-lint] E1019: Parameter MySubscription.Arn for Fn::Sub not found at Outputs/MySubscription/Value/Fn::Sub
[cfn-lint] E1019: Parameter MySubscription.Version.Version for Fn::Sub not found at Outputs/MySubscription/Value/Fn::Sub
还要指出,Value
在Outputs
中应减少缩进量
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。