我正在尝试为使用ansible脚本启动的每个新实例定义一个警报。 使用时很容易实现:
- name: Create CPU utilization metric alarm
ec2_metric_alarm:
state: present
name: "cpu-low"
metric: "CPUUtilization"
statistic: Average
comparison: ">="
threshold: 80.0
unit: "Percent"
period: 300
evaluation_periods: 1
description: "It will be triggered when CPU utilization is more than 80% for 5 minutes"
请注意,我使用 cpu-low 作为警报名称。这不是我想要的,因为我可以有多个实例触发该警报。因此,我想使用我不知道如何访问的ec2标记'Name'
。
我试图使用:
- name: List resource tags
local_action: ec2_tag resource=XYZ state=list
tags: [metric-alarms]
但是这需要我也没有的resourceID。 是否可以在ansible脚本上获取ec2标签?
答案 0 :(得分:5)
这是我提出的在警报名称上使用实例名称的任务:
- name: Get instance ec2 facts
action: ec2_facts
register: ec2_facts
- name: Get resource tags from ec2 facts
sudo: false
local_action: ec2_tag
resource={{ec2_facts.ansible_facts.ansible_ec2_instance_id}}
region=us-east-1 state=list
register: result
- name: Create CPU utilization metric alarm
sudo: false
local_action: ec2_metric_alarm
state=present
region=us-east-1
name="{{result.Name}}-cpu-utilization"
metric="CPUUtilization"
statistic=Average comparison=">="
threshold=80.0
unit="Percent"
period=300
evaluation_periods=1
description="It will be triggered when CPU utilization is more than 80% for 5 minutes"
dimensions="InstanceId"="{{ec2_facts.ansible_facts.ansible_ec2_instance_id}}"
alarm_actions=arn:aws:sns:us-east-1:123412341234:My_SNS_Notification
ok_actions=arn:aws:sns:us-east-1:123412341234:My_SNS_Notification
答案 1 :(得分:1)
the EC2 inventory plugin标签比所有register
杂耍更方便,但它也有一些注意事项。使用插件,标记被指定为具有ec2_tag
命名空间的主变量。您的警报定义可能如下所示:
- name: Set up metric alerts
hosts: 127.0.0.1
connection: local
tasks:
- name: Create CPU utilization metric alarm
ec2_metric_alarm:
args:
state: present
name: '{{ hostvars[item].ec_tag_Name }}'
metric: CPUUtilization
statistic: Average
comparison: ">="
threshold: 80.0
unit: Percent
period: 300
evaluation_periods: 1
description: >
Triggered when CPU utilization is more than
80% for 5 minutes
with_items: groups['your_targets']
当您执行普通的远程播放(而不是local_action
)时更加容易,因为您通常不需要hostvars[item]
循环播放,您只需参考当前正在配置的主机为ec2_tag_Name
。
现在的缺点:作为库存插件,AFAIK在单个Ansible运行期间无法刷新内存中的数据。这意味着当使用Ansible进行配置时,如果您通过播放启动新的EC2实例,ec2_tag_Foo
变量将无法在后续播放中使用,直到您再次运行ansible-playbook
,并且可能执行ec2.py --refresh-cache
更新本地缓存的数据。这很不幸。我希望库存插件和ec2_facts
模块更加内聚。