You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CloudFormation模板中获取计算属性的值?

搞定CloudFormation里SES接收规则的SNS TopicArn输出问题

问题回顾

你在编写CloudFormation模板创建SES接收规则时,已经算出了要用于通知的SNS TopicArn,但卡在了怎么在Outputs里正确输出这个值——其他输出项都是直接引用模板参数,唯独这个拼接出来的ARN不知道该怎么写语法。

解决方案

关键是把计算好的ARN先做成一个可引用的变量,而不是直接在资源属性里临时拼接,这样输出的时候直接引用这个变量就行。

第一步:预计算SNS TopicArn

先把完整的SNS TopicArn计算出来,这里可以结合!FindInMap从映射表中获取主题名称,再用!Sub和!Join拼接成标准ARN格式:

RuleS3ActionObjectSNSTopic: !Join [ '', [ !Sub 'arn:aws:sns:${AWS::Region}:${AWS::AccountId}:', !FindInMap [ SourceMap, !Ref rr5 , snstopic ] ] ]

第二步:修改模板引用并输出

把SES接收规则里的TopicArn改成引用这个预计算的值,同时在Outputs里直接引用它,这样就解决了输出的语法问题:

Resources:
  ReceiptRule:
    Type: 'AWS::SES::ReceiptRule'
    Properties:
      RuleSetName: !Ref ReceiptRuleSetName
      Rule:
        Name: !Ref RuleName
        Enabled: !Ref RuleEnabled
        ScanEnabled: !Ref RuleScanEnabled
        TlsPolicy: !Ref RuleTLSPolicy
        Recipients:
          - !Ref RuleRecipients
        Actions:
          - S3Action:
              ObjectKeyPrefix: !Ref RuleS3ActionObjectKeyPrefix
              BucketName: !Ref RuleS3ActionObjectBucketName
              TopicArn: !Ref RuleS3ActionObjectSNSTopic
Outputs:
  Recipients:
    Value: !Sub ${RuleRecipients}
  S3Bucket:
    Value: !Sub ${RuleS3ActionObjectBucketName}
  S3Prefix:
    Value: !Sub ${RuleS3ActionObjectKeyPrefix}
  SNSTopicArn:
    Value: !Sub ${RuleS3ActionObjectSNSTopic}

原理说明

之前你是在S3Action里直接拼接ARN,这个值只在资源属性内部生效,没办法被Outputs直接引用。现在把ARN预计算成一个独立的可引用变量,不管是资源配置还是输出都用同一个引用,既保证了值的一致性,也完全符合CloudFormation的语法要求。

内容的提问来源于stack exchange,提问作者Simon Taylor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:09:52