ansible ec2_metric_alarm不会附加到自动缩放策略

时间:2016-04-14 01:05:35

标签: amazon-web-services ansible boto

因此,我尝试使用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"}

1 个答案:

答案 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"] }}']