我正在尝试在 Amazon Elastic Compute Cloud (Amazon EC2) 控制台中创建 Amazon CloudWatch 警报。如果 EC2 实例由于底层硬件故障而受损,我希望恢复它,并在警报触发时发送通知。但是,在创建警报页面上,执行操作: 下的恢复此实例选项将灰显(禁用)。警报通知选项(主题名称和“收件人”)也被禁用。如何重新启用这些选项?

如果 CloudWatch 确定 EC2 实例使用实例存储卷,则会禁用恢复此实例选项。使用实例存储卷的 EC2 实例(包括使用实例存储卷的块储存设备映射启动的实例)不支持恢复操作。CloudWatch 读取与每个 EC2 实例关联的元数据,以确保在启用恢复操作之前它不使用实例存储卷。

注意:仅在某些实例类型上支持恢复操作。请确保您启动的是支持的实例类型。有关更多信息,请参阅恢复您的实例来了解当前详细信息。EC2 恢复警报操作也仅对 StatusCheckFailed_System 指标有效。

在继续之前,请参阅创建停止、终止、重启或恢复实例的警报。确保您满足创建 CloudWatch 警报的所有先决条件。

在 EC2 Linux 实例中查找临时实例存储卷

1.     连接到您的 Linux 实例​。

2.     使用以下命令从您的实例检查元数据​

curl http://169.254.169.254/latest/meta-data/block-device-mapping/

3.     使用输出确定映射到实例的实例存储卷(名称以 ephemeral 开头)。例如,此输出中有两个实例存储卷(ephemeral0 和 ephemeral2):

[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/
ami
ephemeral0
ephemeral2
root

在 EC2 Windows 实例中查找临时实例存储卷

如果您更喜欢使用浏览器,请执行以下操作:

1.     连接到您的 Windows 实例

2.     打开浏览器并连接到:

http://169.254.169.254/latest/meta-data/block-device-mapping/

3.     使用返回的信息确定映射到实例的实例存储卷(名称以 ephemeral 开头)。

如果您更喜欢使用 Windows PowerShell,请执行以下操作:

1.     在 PowerShell 中​连接到您的 Windows 实例

2.     运行以下命令:

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/block-device-mapping/

3.     使用输出确定映射到实例的实例存储卷(名称以 ephemeral 开头)。例如,此输出中有一个实例存储卷 (ephemeral0):

ami
ephemeral0
root
swap

有关更多信息,请参阅查看实例存储卷的实例块储存设备映射

在用于 EC2 实例的 AMI 中查找临时实例存储卷

您还可以检查 EC2 实例的 Amazon 系统映像 (AMI)块储存设备映射是否适用于任何块储存设备实例存储卷(其块储存设备字段包含 =ephemeral#,其中 # 是 0-23 的整数)。

注意:当您使用 AWS CLI、SDK 或 AWS CloudFormation 等服务启动 EC2 实例(Windows 或 Linux)时,即使实例类型未正式支持实例存储卷,也可能会发生块储存设备映射。当您使用 Amazon EC2 控制台启动不支持实例存储卷的实例类型时,EC2 将直接忽略已修改的块储存设备映射。

请参阅查看 AMI 块储存设备映射中的 EBS 卷,了解如何使用 Amazon EC2 控制台或 AWS 命令行界面 (AWS CLI)枚举 AMI 块储存设备映射中的 EBS 卷。

例如,以下 AWS CLI 命令 describe-images 为 AMI 返回 BlockDeviceMapping

aws ec2 describe-images --image-ids ami-xxxxxxxx

VirtualNameephemeral 开头的实例存储卷的示例输出:

aws ec2 describe-images --image-ids ami-11112222

"BlockDeviceMappings": [
   {
      "DeviceName": "/dev/xvda",
      "Ebs": {
         "DeleteOnTermination": true,
         "SnapshotId": "snap-        ",
         "VolumeSize": 8,
         "VolumeType": "gp2",
         "Encrypted": false
      }
   },
   {
      "DeviceName": "/dev/sdb",
      "VirtualName": "ep0hemeral0"
   },
   {
      "DeviceName": "/dev/sdc",
      "VirtualName": "ephemeral2"
   }
],

删除或覆盖对 AMI 中实例存储卷的任何引用

在确认 EC2 实例使用实例存储卷之后,必须删除或覆盖对 AMI 中实例存储卷的任何引用。然后,您必须重新启动实例,因为无法在现有 EC2 实例中添加或删除实例存储卷。

使用以下方法之一删除或覆盖对实例存储卷的引用:

  • 从 AMI 中删除对实例存储卷的引用。然后,重新启动实例。
  • EC2 控制台启动 EC2 实例,以覆盖不支持实例卷存储的实例类型的 AMI。
  • 从 AWS CLI 启动 EC2 实例,并手动覆盖 AMI 中引用实例存储卷的每个设备。例如,如果您有设备 /dev/sdb 和 /dev/sdc 映射到实例存储卷,请使用 run-instances 命令启动 EC2 实例:
aws ec2 run-instances --image-id ami-11112222 --subnet-id subnet-11112222 --instance-type t2.medium
 --key-name my_key --associate-public-ip-address --block-device-mappings 
 '[{"DeviceName": "/dev/sdb","NoDevice": ""},{"DeviceName": "/dev/sdc","NoDevice": ""}]'
  • 对于 CloudFormation 启动的 EC2 实例,请创建 CloudFormation 模板以覆盖任何设备到实例存储卷的映射。例如:
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Resources": {
   "I4EY8I": {
    "Type": "AWS::EC2::Instance",
    "Properties": {
     "ImageId" : "ami-11112222",
     "InstanceType" : "t2.medium",
     "SubnetId" : "subnet-11112222",
     "KeyName" : "my_key",
   "BlockDeviceMappings" : [
     {
       "DeviceName":"/dev/sdb",
       "NoDevice": {}
     },
     {
       "DeviceName":"/dev/sdc",
       "NoDevice": {}
     }
  ]
   }
  }
 }
}
  • 对于开发工具包启动的 EC2 实例,请查看相关开发工具包文档,了解如何覆盖设备到实例存储卷的映射。

此页内容对您是否有帮助? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间:2016 年 2 月 29 日

更新时间:2018 年 12 月 12 日