在CloudFormation模板中设置可变数量的CloudWatch警报

时间:2016-10-11 20:31:45

标签: amazon-web-services amazon-cloudformation amazon-cloudwatch amazon-elasticache

我们有一个ElastiCache复制组(AWS::ElastiCache::ReplicationGroup),其中NumCacheClusters目前在CloudFormation模板中设置为2,并希望为CloudFormation为我们创建的每个CacheClusterId设置一组CloudWatch警报,作为复制组。

我面临两个障碍:

  1. 如何在CloudFormation模板中设置可变数量的资源(想要N个AWS::CloudWatch::Alarm,其中N == NumCacheClusters
  2. CloudWatch警报需要CacheClusterId属性中的Dimensions,如何为CloudFormation为我们创建的每个缓存群集获取该值。
  3. 顺便说一下,我对CloudFormation很新,所以关于该主题的任何资源都会有所帮助。

    感谢。

1 个答案:

答案 0 :(得分:1)

  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

  2. 您可以使用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