4

当我启动某种类型的实例时,userdata-script 通过 Boto 创建一个指标 + 警报。该指标正确地将其数据传送到 CloudWatch。如果基于度量的某些条件匹配,则警报应将实例作为操作终止。在 CloudWatch 中,警报似乎已正确创建,并根据需要切换警报状态。

但是:当涉及到执行操作时,它会失败并显示以下“历史”条目:警报更新自

  • 可以报​​警。原因:超过阈值:5 个数据点大于阈值 (200.0)。最新数据点:999.0、999.0。
  • arn:aws:automate:eu-west-1:ec2:terminate 正在进行中。
  • 终止 EC2 实例“i-xxx”操作失败。AWS 无法验证提供的访问凭证。

报警历史截图

我已经将策略“AdministratorAccess”授予附加到实例的“userdata”-Role。

有什么提示吗?

问候汤姆

4

2 回答 2

2

我相信这是问题所在。来自开发者指南

如果您使用 IAM 角色(例如,Amazon EC2 实例配置文件),则无法使用警报操作停止或终止实例。但是,您仍然可以查看警报状态并执行任何其他操作,例如 Amazon SNS 通知或 Auto Scaling 策略。

我最近在 AWS 论坛上发布了关于这个问题的帖子: https ://forums.aws.amazon.com/message.jspa?messageID=601951

于 2015-02-13T18:38:45.917 回答
0

我刚刚出现了这个问题,似乎我已经解决了。
CloudWatch 警报的服务相关 IAM 角色是 AWSServiceRoleForCloudWatchEvents。我发现它的受信任实体是 events.amazonaws.com。及其在信任关系标签 中的政策文件,

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

以及信任关系标签 中我的 ec2 实例的角色策略文档

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

然后将 Trusted entity,events.amazonaws.com 内容添加到 ec2 实例的角色策略文档中,如下:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

它将events.amazonaws.com的可信实体添加到角色。
那么,CloudWatch 报警停止实例功能就OK了!

于 2019-01-17T10:13:04.217 回答