因此,我尝试使用ansible ec2_metric_alarm任务来创建监视我的自动缩放组的云监视警报,并且如果ASG的CPU使用率高于或低于某个点,则会激活自动缩放策略。
- ec2_metric_alarm:
aws_access_key: '{{ ami_access }}'
aws_secret_key: '{{ ami_secret }}'
state: present
region: "{{regi}}"
name: "{{item.names}}"
metric: "CPUUtilization"
namespace: "AWS/EC2"
statistic: Average
comparison: "{{item.compare}}"
threshold: "{{item.limits}}"
period: 60
evaluation_periods: 1
unit: "Percent"
description: "{{item.desc}}"
dimensions: {'AutoScalingGroupName':'{{auto_sc}}'}
alarm_actions: "{{item.pol}}"
with_items:
- names: "cpuUP_{{auto_sc}}"
compare: ">="
limits: "20.0"
desc: "This will alarm when the average cpu usage of the ASG is greater than 20% for 1 minute"
pol: "cpuUP_{{auto_sc}}_policy"
- names: "cpuDown_{{auto_sc}}"
compare: "<="
limits: "10.0"
desc: "This will alarm when the average cpu usage of the ASG is less than 10% for 1 minute"
pol: "cpuDown_{{auto_sc}}_policy"
出于某种原因,我不能只使用我的自动缩放策略的文字名称(这将是&#34; cpuDown_test3_policy&#34;和&#34; cpuUP_test3_policy&#34;)我需要使用名为&#的东西34; arn语法&#34;因为我的错误消息一直在抱怨无效的Arn语法。
如何找到arn语法或将自动缩放策略名称转换为arn语法?
这里的参考是我尝试按原样运行我的剧本时收到的错误消息:
TASK [ec2_metric_alarm] ********************************************************
failed: [localhost] => (item={u'pol': u'cpuUP_test3_policy', u'desc': u'This wil
l alarm when the average cpu usage of the ASG is greater than 20% for 1 minute',
u'compare': u'>=', u'limits': u'20.0', u'names': u'cpuUP_test3'}) => {"failed":
true, "item": {"compare": ">=", "desc": "This will alarm when the average cpu u
sage of the ASG is greater than 20% for 1 minute", "limits": "20.0", "names": "c
puUP_test3", "pol": "cpuUP_test3_policy"}, "msg": "BotoServerError: 400 Bad Requ
est\n<ErrorResponse xmlns=\"http://monitoring.amazonaws.com/doc/2010-08- 01/\">\n
<Error>\n <Type>Sender</Type>\n <Code>ValidationError</Code>\n <Messa
ge>Invalid arn syntax: cpuUP_test3_policy</Message>\n </Error>\n <RequestId>d8
97c79a-01db-11e6-92d5-5fa534a149e9</RequestId>\n</ErrorResponse>\n"}
failed: [localhost] => (item={u'pol': u'cpuDown_test3_policy', u'desc': u'This w
ill alarm when the average cpu usage of the ASG is less than 10% for 1 minute',
u'compare': u'<=', u'limits': u'10.0', u'names': u'cpuDown_test3'}) => {"failed"
: true, "item": {"compare": "<=", "desc": "This will alarm when the average cpu
usage of the ASG is less than 10% for 1 minute", "limits": "10.0", "names": "cpu
Down_test3", "pol": "cpuDown_test3_policy"}, "msg": "BotoServerError: 400 Bad Re
quest\n<ErrorResponse xmlns=\"http://monitoring.amazonaws.com/doc/2010-08- 01/\">
\n <Error>\n <Type>Sender</Type>\n <Code>ValidationError</Code>\n <Mes
sage>Invalid arn syntax: cpuDown_test3_policy</Message>\n </Error>\n <RequestI
d>d8b33ea6-01db-11e6-82db-8bfc9e3af9a2</RequestId>\n</ErrorResponse>\n"}
答案 0 :(得分:4)
请阅读此链接,其中解释了Amazon Resource Name. 以下是所提供链接的摘录。
亚马逊资源名称(ARN)唯一标识AWS资源。当您需要在所有AWS中明确指定资源时,我们需要ARN,例如IAM策略,Amazon Relational Database Service(Amazon RDS)标记和API调用。
以下是alarm_actions:应该是什么样的示例..
alarm_actions: ["arn:aws:autoscaling:region:account-id:scalingPolicy:policyid:autoScalingGroupName/groupfriendlyname:policyname/policyfriendlyname"]
您应该首先创建一个Scaling Policy并使用已注册的输出来获取您要使用的扩展策略的arn。
这是一个例子..
- name: Scale Out policy
local_action:
module: ec2_scaling_policy
state: present
region: "{{ aws_region }}"
name: "Name-ScaleOutPolicy"
adjustment_type: "ChangeInCapacity"
asg_name: "name_of_autoscale_group"
scaling_adjustment: "-1"
min_adjustment_step: "1"
cooldown: "30"
register: so_result
现在,您可以将指标警报设置为使用扩展策略arn,如此。
alarm_actions: ['{{ so_result["arn"] }}']