Amazon web services 在jinja模板中获取CloudFormation内在函数的值
我使用jinja和CloudFormation YAML模板的组合来定义我的基础架构堆栈。我正在尝试为DynamoDB全局表创建CloudWatch警报。正在复制的度量名称ReplicationLatency。我在看这个维基作为参考开始- 现在,在查看了CloudWatch控制台中的度量之后,我意识到接收区域总是所有其他区域,除了源区域本身。i、 例如,如果您在us-east-2(俄亥俄州)打开CW控制台,则除us-east-2外,其他每个地区都会显示ReplicationLatency度量。我通过在多个地区查看相同的指标来验证这一假设 现在,为了在us-east-2中为DDB表创建报警,我需要全局表所在的所有其他区域的列表。我试图了解如何在CF模板/jinja模板中获得该零件 我最初认为我会有一个类似这样的jinja宏:Amazon web services 在jinja模板中获取CloudFormation内在函数的值,amazon-web-services,jinja2,amazon-cloudformation,Amazon Web Services,Jinja2,Amazon Cloudformation,我使用jinja和CloudFormation YAML模板的组合来定义我的基础架构堆栈。我正在尝试为DynamoDB全局表创建CloudWatch警报。正在复制的度量名称ReplicationLatency。我在看这个维基作为参考开始- 现在,在查看了CloudWatch控制台中的度量之后,我意识到接收区域总是所有其他区域,除了源区域本身。i、 例如,如果您在us-east-2(俄亥俄州)打开CW控制台,则除us-east-2外,其他每个地区都会显示ReplicationLatency度量。我
{% 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 %}
但是这里出现的问题是,我没有办法用当前的_region变量正确地调用这个宏。例如,我认为无论如何都没有必要做以下事情:
set my_variable_region = Ref 'AWS::Region'
我想知道是否还有其他方法可以替代?有人遇到过这个问题吗 您可以为每个区域定义一个条件,如果它是当前区域,则该条件仅为false。区域名称可以在条件名称中。然后,您可以在适当的资源中使用这些条件中的每一个。这样,将定义当前区域的资源,但由于该条件而禁用 比如:
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 %}
您可以为每个区域定义一个条件,如果它是当前区域,则该条件仅为false。区域名称可以在条件名称中。然后,您可以在适当的资源中使用这些条件中的每一个。这样,将定义当前区域的资源,但由于该条件而禁用 比如:
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 %}