如何创建可以休眠的 ec2 实例?
How can I create an ec2 instance which can be hibernated?
我卡在存储阶段了。它说:To use hibernation, encrypt the root volume.
。但是我无法单击加密复选框,也没有找到任何加密根卷的方法。
更新 2020-03
自从下面的 post 以来发生了很多变化,休眠现在是小菜一碟。加密可以在 AWS 控制台中的正常 ec2 创建流程中完成,Amazon Linux 2 也受支持。
所有你需要知道的:
- 并非所有实例类型都受支持,请参阅 here 以获取最新列表
- 不支持 RAM > 150GB
- 您的磁盘 space 需要比您的 RAM 大(因为休眠时 RAM 将写入磁盘)
原版post:
最后我被困在了很多阶段,官方文档不知何故缺乏所以我想我会记录我的发现:
为了使实例休眠,它需要是类型 C3、C4、C5、M3、M4、M5、R3、R4 或 R5。此外,它还需要是 Amazon Linux 1 AMI(这可能已过时,请参阅 here 以获取最新列表)。我从 Linux 2 AMI 开始,直到最后它不起作用(仅在 /var/log/messages 中显示 Suspend key pressed.
、Requested operation not supported, ignoring.
)才收到任何警告,甚至 他们建议的启用休眠的步骤 也没有用,因为 ec2-hibinit-agent
在亚马逊上没有可用的数据包 Linux 2.
休眠需要对启动卷进行加密。为了实现这一点,您需要在启动启动向导之前加密 AWS Linux 1 AMI :
- 使用 AWS 控制台创建 KMS 密钥
- 如果您所在地区的 AWS Linux 1(不是 2!),请查找 ami id,例如使用 ec2 启动向导。就我而言 (eu-central-1) 这是
ami-0cfbf4f6db41068ac
- 创建您自己的加密 ami(将
eu-central-1
、ami
和 kms
密钥替换为您自己的
aws ec2 copy-image --source-region eu-central-1 --source-image-id ami-0cfbf4f6db41068ac \
--region eu-central-1 --name "LinuxAMIEncrypted" --encrypted \
--kms-key-id arn:aws:kms:eu-central-1:123412341234:key/aaaaaaaa-1234-abce-abcd-1234abcdef01
等待几分钟,直到您看到新的 AMI 出现在 EC2 -> AMI 中
- 从
AMIs
(在 EC2 AWS 控制台中)启动您的新 AMI
- 选择 C3、C4、C5、M3、M4、M5、R3、R4 或 R5
- 点击
Enable hibernation as an additional stop behavior
测试一下:
- 运行
tail -f /var/log/messages
在 ec2 实例上检查错误
- 运行
aws ec2 stop-instances --instance-ids "i-…" --hibernate
通过终端休眠,或者通过 aws 控制台休眠
此外,我在 /var/log/messages
中看到了这个错误:
Agent hibernate - AccessDeniedException: User: arn:… is not authorized to perform: ssm:UpdateInstanceInformation on resource: ssm:UpdateInstanceInformation
。我需要附加 AmazonEC2RoleforSSM
和 AmazonSSMAutomationRole
来消除这些错误。
我卡在存储阶段了。它说:To use hibernation, encrypt the root volume.
。但是我无法单击加密复选框,也没有找到任何加密根卷的方法。
更新 2020-03
自从下面的 post 以来发生了很多变化,休眠现在是小菜一碟。加密可以在 AWS 控制台中的正常 ec2 创建流程中完成,Amazon Linux 2 也受支持。
所有你需要知道的:
- 并非所有实例类型都受支持,请参阅 here 以获取最新列表
- 不支持 RAM > 150GB
- 您的磁盘 space 需要比您的 RAM 大(因为休眠时 RAM 将写入磁盘)
原版post:
最后我被困在了很多阶段,官方文档不知何故缺乏所以我想我会记录我的发现:
为了使实例休眠,它需要是类型 C3、C4、C5、M3、M4、M5、R3、R4 或 R5。此外,它还需要是 Amazon Linux 1 AMI(这可能已过时,请参阅 here 以获取最新列表)。我从 Linux 2 AMI 开始,直到最后它不起作用(仅在 /var/log/messages 中显示 Suspend key pressed.
、Requested operation not supported, ignoring.
)才收到任何警告,甚至 他们建议的启用休眠的步骤 也没有用,因为 ec2-hibinit-agent
在亚马逊上没有可用的数据包 Linux 2.
休眠需要对启动卷进行加密。为了实现这一点,您需要在启动启动向导之前加密 AWS Linux 1 AMI :
- 使用 AWS 控制台创建 KMS 密钥
- 如果您所在地区的 AWS Linux 1(不是 2!),请查找 ami id,例如使用 ec2 启动向导。就我而言 (eu-central-1) 这是
ami-0cfbf4f6db41068ac
- 创建您自己的加密 ami(将
eu-central-1
、ami
和kms
密钥替换为您自己的
aws ec2 copy-image --source-region eu-central-1 --source-image-id ami-0cfbf4f6db41068ac \
--region eu-central-1 --name "LinuxAMIEncrypted" --encrypted \
--kms-key-id arn:aws:kms:eu-central-1:123412341234:key/aaaaaaaa-1234-abce-abcd-1234abcdef01
等待几分钟,直到您看到新的 AMI 出现在 EC2 -> AMI 中
- 从
AMIs
(在 EC2 AWS 控制台中)启动您的新 AMI - 选择 C3、C4、C5、M3、M4、M5、R3、R4 或 R5
- 点击
Enable hibernation as an additional stop behavior
测试一下:
- 运行
tail -f /var/log/messages
在 ec2 实例上检查错误 - 运行
aws ec2 stop-instances --instance-ids "i-…" --hibernate
通过终端休眠,或者通过 aws 控制台休眠
此外,我在 /var/log/messages
中看到了这个错误:
Agent hibernate - AccessDeniedException: User: arn:… is not authorized to perform: ssm:UpdateInstanceInformation on resource: ssm:UpdateInstanceInformation
。我需要附加 AmazonEC2RoleforSSM
和 AmazonSSMAutomationRole
来消除这些错误。