我结合使用Jinja和CloudFormation YAML模板来定义我的基础架构堆栈。我正在尝试为DynamoDB全局表创建CloudWatch警报。度量标准名称为ReplicationLatency。我一直在看这个维基,以供参考-https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables_monitoring.html
现在,在查看CloudWatch控制台中的指标之后,我意识到,ReceivingRegion始终是所有其他区域,除了源区域本身。也就是说,例如,如果您在us-east-2(俄亥俄州)中打开CW控制台,则除了us-east-2之外,每个其他区域都会显示ReplicationLatency指标。我通过在多个区域中查看相同的指标来验证了这一假设。
现在,为了在us-east-2中为DDB表创建警报,我需要列出存在全局表的所有其他区域的列表。我试图了解如何在CF模板/ jinja模板中获得该部分。
最初,我以为我会有一个类似于以下内容的jinja宏:
{% macro cw_alarms(current_region) %}
{% set global_table_all_regions = ['us-east-1', 'us-east-2', 'us-west-1', 'us-west-2', 'eu-west-1', 'eu-west-2', 'eu-central-1', 'ap-northeast-1', 'ap-northeast-2', 'ap-southeast-1', 'ap-southeast-2']
{% set alarm_region_suffix_list = ddb_global_table_regions | reject(current_region %}
{% for alarm_region_suffix in alarm_region_suffix_list %}
SomeAlarmName:
Type: AWS::CloudWatch::Alarm
Properties:
Namespace: "AWS/DynamoDB"
MetricName: "ReplicationLatency"
Dimensions:
- Name: TableName
Value: Ref TableName
- Name: Receiving-Region
Value: alarm_region
Statistic: p90
Period: '300'
EvaluationPeriods: '1'
Threshold: 5000
ComparisonOperator: GreaterThanThreshold
{% endmacro %}
但是这里出现的问题是,我没有办法在正确设置current_region变量的情况下调用此宏。例如,我不认为可以做类似的事情:
set my_variable_region = Ref 'AWS::Region'
我正在尝试了解是否还有其他替代方法?有人遇到过这个问题吗?
答案 0 :(得分:0)
您可以为每个仅在当前区域为假的区域定义条件。区域名称可以在条件名称中。然后,您可以在适当的资源中使用所有这些条件。这样,将定义当前区域的资源,但由于条件而将其禁用。
类似的东西:
Conditions:
{% for region in global_table_all_regions %}
IsNot{{ region }}: !Not [!Equals [ !Ref AWS::Region, {{ region }} ]]
{% endfor %}
Resources:
{% for region in global_table_all_regions %}
Alaram{{ region }}:
Type: AWS::CloudWatch::Alarm
Condition: IsNot{{ region }}
Properties:
Namespace: "AWS/DynamoDB"
MetricName: "ReplicationLatency"
# ... insert props here
{% endfor %}