为什么我的 Amazon EC2 Linux 实例会自动终止?

2 分钟阅读
0

我想解决为什么我的 Amazon Elastic Compute Cloud(EC2)Linux 实例会自动终止的问题。

解决方法

Amazon EC2 Linux 实例会因加密的 Amazon Block Store(Amazon EBS)卷或者审计进程守护程序配置的磁盘空间不足而终止。

该实例因加密的 EBS 卷而终止

要查看卷是否已加密,请打开 Amazon EC2 控制台,然后选择。使用 AWS Key Management Service(AWS KMS)密钥加密的卷在加密列中显示已加密标签。

查看系统日志,检查实例是否开始启动操作系统 (OS)。如果实例未启动操作系统且卷已加密,则 AWS Identity and Access Management(IAM)角色没有 AWS KMS 密钥访问权限。

**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

要查看 IAM 权限,请完成以下步骤:

  1. 运行 describe-instances 命令以验证 StateReason 错误消息和错误代码:

    $ aws ec2 describe-instances --instance-id i-example-id --region example-region --query "Reservations[].Instances[].{StateReason:StateReason}" --output json

    **注意:**将 i-example-ID 替换为您的实例 ID。将 example-region 替换为您的 AWS 区域
    如果附加到该实例的加密卷存在权限或策略问题,那么您会收到客户端错误。您会看到类似于以下消息的输出结果:

    [
     [
       {
     "StateReason": {
     "Code": "Client.InternalError",
     "Message": "Client.InternalError: Client error on launch"
       }
     }
     ]
    ]
  2. 验证 IAM 角色是否具有正确的 IAM 权限

    {
        "Version": "2012-10-17",
        "Statement": {
            "Effect": "Allow",
            "Action": [
                "kms:CreateGrant",
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:GenerateDataKeyWithoutPlainText",
                "kms:ReEncrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
                "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"
            ]
        }
    }
    

如果您通过其他服务(例如 Amazon EC2 Auto Scaling)间接启动了实例,则要使用正确的权限配置密钥策略

审计进程守护程序配置由于磁盘已满错误而终止实例

如果实例已开始启动,则在实例屏幕截图或系统日志中访问启动日志。您会看到类似于以下消息的输出结果:

Aug 19 04:11:02 ip-10-0-202-230 auditd[4300]: Audit daemon is low on disk space for logging
Aug 19 04:11:02 ip-10-0-202-230 auditd[4300]: The audit daemon is now halting the system
Aug 19 04:11:02 ip-10-0-202-230 systemd: Stopping Session 29 of user splunk.
Aug 19 04:11:02 ip-10-0-202-230 systemd: Stopped target Timers.

要解决磁盘已满错误,请完成以下步骤:

  1. 打开 Amazon EC2 控制台

  2. 在导航窗格中,选择实例,然后选择实例。

  3. 停止该实例,然后将 EBS 根卷(Linux 为 ** /dev/xvda**)与该实例分离。

  4. 使用您的可用区域中的 Linux 实例。或者,启动一个新实例用作救援实例。

  5. 将 EBS 根卷附加到救援实例作为辅助设备,例如 /dev/xvdf

  6. 使用 SSH 连接到您的救援实例

  7. 为您附加到救援实例的新根卷创建挂载点目录。以下 sudo 命令仅适用于 Linux 环境:

     sudo mkdir /mnt/rescue
     sudo mount /dev/xvdf /mnt/rescue

    **注意:**将 /dev/xvdf 替换为辅助设备名称,将 /mnt/rescue 替换为挂载点目录的名称。

  8. 增加根卷大小扩展分区

  9. 运行 umount 命令来卸载卷:

    sudo umount /mnt/rescue
  10. 将卷与救援实例分离,然后使用设备名称(例如 Linux 为 /dev/xvda将该卷附加到原始实例。然后,启动该实例以确认其成功启动。

  11. 查看审计服务配置,以确保其没有在空间不足时终止计算机的选项。对于 Amazon Linux、Amazon Linux 2 和 Amazon Linux 2023,确保审计服务配置在 /etc/audit/auditd.conf 中包含以下选项:

max_log_file_action = ROTATE
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND

相关信息

排查 Amazon EC2 实例启动问题

为什么我无法启动我的 EC2 实例?

AWS 官方
AWS 官方已更新 2 个月前