Шаблон облачной информации - как получить значение вычисляемого свойства - PullRequest
0 голосов
/ 16 мая 2018

В следующем шаблоне 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 Ответ

0 голосов
/ 16 мая 2018

Учитывая, что тема передается в качестве параметра шаблона, вы можете:

  1. принять SNSTopicArn в качестве параметра, а не просто запросить имя темы

  2. Вы можете построить ARN в разделе Outputs, как вы сделали в ReceiptRule.Ну, не совсем, потому что есть лучший способ.На самом деле вы были почти там.Вот как это может выглядеть:

-

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

-

Обратите внимание, что использование встроенной функции Fn::GetAtt не будетработали, так как ресурс SNS не был создан в том же шаблоне.

...