amazon-web-services - Cloudformation 模板 - 如何获取计算属性的值

标签 amazon-web-services aws-cloudformation amazon-ses

在以下 Cloudformation 模板中,我正在创建 SES 接收规则。 在其中我计算要通知的 SNS TopicArn。 我想输出该值,但我无法使用语法来获取它。 所有其他输出都是模板参数。

答案:- 在调用模板上设置它并将其作为参数传递:-

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: !Join [ '',
               [
               !Sub 'arn:aws:sns:${AWS::Region}:${AWS::AccountId}:',
               !Ref RuleS3ActionObjectSNSTopic
               ]
               ]
Outputs:
  Recipients:
    Value: !Sub ${RuleRecipients}
  S3Bucket:
    Value: !Sub ${RuleS3ActionObjectBucketName}
  S3Prefix:
    Value: !Sub ${RuleS3ActionObjectKeyPrefix}
  SNSTopicArn:
    Value: >--What do i put here<--

答案:-

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

模板就变成了

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}

最佳答案

考虑到主题作为模板参数传递,您可以:

  1. 接受 SNSTopicArn 作为参数,而不仅仅是询问主题名称

  2. 您可以像在 ReceiptRule 中一样在“输出”部分中构建 ARN。嗯,不完全是,因为有更好的方法。事实上你就快到了。它可能如下所示:

--

Outputs:
  SNSTopicArn:
    Value: !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${RuleS3ActionObjectSNSTopic}"

--

请注意,使用内部函数 Fn::GetAtt 不起作用,因为 SNS 资源不是在同一模板中创建的。

关于amazon-web-services - Cloudformation 模板 - 如何获取计算属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50378055/

相关文章:

amazon-web-services - AWS SES 电子邮件接收 - 找不到 550 邮箱

node.js - AWS Lambda 函数执行多次(无服务器)

amazon-web-services - 安装 AWS EFS 后无法访问 Drupal 站点

amazon-web-services - 在 CloudFormation 上使用 JdbcTargets 指定 Glue::Crawler

amazon-web-services - 有没有办法枚举在 AWS 账户中创建的所有 CloudFormation 宏?

vb.net - 使用 vb.net 通过 Amazon SES 发送电子邮件返回 "Received an unexpected EOF or 0 bytes from the transport stream"

amazon-web-services - 如何使用 aws ec2 describe-instances 获取服务器名称

amazon-web-services - AWS 云信息 : How to split a string on 'NewLine' character

amazon-web-services - 将 EC2 实例放置在特定子网中时出现 CloudFormation 模板错误

ruby-on-rails - Amazon SES/Rails:553无效的电子邮件地址