在 EC2 控制台中创建警报时,为什么“恢复此实例”选项处于禁用状态?
我正试图在 Amazon Elastic Compute Cloud (Amazon EC2) 控制台中创建 Amazon CloudWatch 警报。如果我的 EC2 实例因底层硬件故障而受损,我想要恢复它,然后在警报触发时发送通知。但是,在“创建警报”页面上,“采取操作”下的“恢复此实例”选项显示为灰色(禁用)。警报通知选项也被禁用。如何重新启用这些选项?
简短描述
如果 CloudWatch 确定 EC2 实例使用实例存储卷,则恢复此实例选项处于禁用状态。使用实例存储卷的 EC2 实例(包括通过实例存储卷的块设备映射启动的实例)不支持恢复操作。在启用恢复操作之前,CloudWatch 会读取与每个 EC2 实例相关的元数据,验证其是否未使用实例存储卷。
注意:仅某些实例类型支持恢复操作。请确保启动支持的实例类型。有关详细信息,请参阅恢复实例。EC2 恢复警报操作仅对 StatusCheckFailed_System 指标有效。
解决方法
**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本。
继续操作之前,请参阅创建停止、终止、重启或恢复实例的警报。请确保您满足创建 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
有关详细信息,请参阅查看实例存储卷的实例块设备映射。
在 AMI 中查找 EC2 实例的临时实例存储卷
查看您的 EC2 实例的亚马逊云机器镜像 (AMI)的块设备映射。检查其“块设备”字段包含“=ephemeral#”的块设备实例存储卷,其中“#”是介于 0-23 之间的整数。
即使实例类型不正式支持实例存储卷,也可以进行块设备映射。当您使用以下任一一项启动 EC2 实例(Windows 或 Linux)时,可能会发生此操作:
- AWS CLI
- SDK
- AWS CloudFormation 等服务
当您使用 Amazon EC2 控制台启动不支持实例存储卷的实例类型时,Amazon EC2 会忽略修改后的块设备映射。
您可以使用 Amazon EC2 控制台或 AWS CLI 在 AMI 的块设备映射中枚举 EBS 卷。
例如,以下 describe-images 命令返回 AMI 的 BlockDeviceMapping:
aws ec2 describe-images --image-ids ami-xxxxxxxx
“VirtualName”以“ephemeral”开头的实例存储卷的输出示例:
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 中删除对实例存储卷的引用。然后,重新启动实例。
- 从 Amazon 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": {} } ] } } } }
- 对于由 SDK 启动的 EC2 实例,请查看相关的 SDK 文档,了解如何将映射设备覆盖到实例存储卷。
相关信息
相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 5 个月前