我们有一个ElastiCache复制组(AWS::ElastiCache::ReplicationGroup
),其中NumCacheClusters
目前在CloudFormation模板中设置为2,并希望为CloudFormation为我们创建的每个CacheClusterId设置一组CloudWatch警报,作为复制组。
我面临两个障碍:
AWS::CloudWatch::Alarm
,其中N == NumCacheClusters
)CacheClusterId
属性中的Dimensions
,如何为CloudFormation为我们创建的每个缓存群集获取该值。顺便说一下,我对CloudFormation很新,所以关于该主题的任何资源都会有所帮助。
感谢。
答案 0 :(得分:1)
遗憾的是,您无法在CloudFormation中设置真正可变数量的资源。您可以做的最好的事情是支持固定数量的条件资源(例如,编写可以创建具有1-3个节点的缓存集群的模板)。如果您有一个缓存集群数NumCacheClusters
的参数,您可以编写如下条件:
Conditions:
TwoCacheClusters:
Fn::Or:
- Fn::Equals:
- Ref: NumCacheClusters
- 2
- Fn::Equals:
- Ref: NumCacheClusters
- 3
ThreeCacheClusters:
Fn::Equals:
- Ref: NumCacheClusters
- 3
然后您将有条件地创建CloudWatch警报:
Resources:
...
SecondCloudWatchAlarm:
Type: AWS::CloudWatch::Alarm
Condition: TwoCacheClusters
Properties:
...
ThirdCloudWatchAlarm:
Type: AWS::CloudWatch::Alarm
Condition: ThreeCacheClusters
Properties:
...
请参阅CloudFormation条件文档:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html
您可以使用Ref
内在函数引用您在模板中其他位置创建的资源。我相信Ref
默认会为AWS::ElastiCache::ReplicationGroup
返回群集ID,因此您应该使用以下所有内容:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html
如果Ref
默认情况下没有返回您想要的资源值,请查看使用Fn::GetAtt
来返回特定属性。可用的备用值取决于资源类型,并且它们全部列在文档中:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html