Cloudformation 模板 - 我如何获得计算值 属性
Cloudformation template - how do i get the value of a computed property
在以下 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}
考虑到主题是作为模板参数传递的,您可以:
接受 SNSTopicArn 作为参数,而不是仅仅询问主题名称
您可以像在 ReceiptRule 中那样在输出部分构建 ARN。嗯,不完全是,因为有更好的方法。事实上,你几乎就在那里。它可能是这样的:
--
Outputs:
SNSTopicArn:
Value: !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${RuleS3ActionObjectSNSTopic}"
--
请注意,使用内部函数 Fn::GetAtt
不会起作用,因为 SNS 资源不是在同一模板中创建的。
在以下 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}
考虑到主题是作为模板参数传递的,您可以:
接受 SNSTopicArn 作为参数,而不是仅仅询问主题名称
您可以像在 ReceiptRule 中那样在输出部分构建 ARN。嗯,不完全是,因为有更好的方法。事实上,你几乎就在那里。它可能是这样的:
--
Outputs:
SNSTopicArn:
Value: !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${RuleS3ActionObjectSNSTopic}"
--
请注意,使用内部函数 Fn::GetAtt
不会起作用,因为 SNS 资源不是在同一模板中创建的。