在无法访问的实例上运行 EC2Rescue 工具 - AWS Systems Manager

在无法访问的实例上运行 EC2Rescue 工具

EC2Rescue 可以帮助您诊断有关 Linux 和 Windows Server 的 Amazon Elastic Compute Cloud (Amazon EC2) 实例的问题并进行故障排除。您可以手动运行工具,如使用适用于 Linux Server 的 EC2Rescue使用适用于 Windows Server 的 EC2Rescue。或者,您也可以使用 Systems Manager 自动化和 AWSSupport-ExecuteEC2Rescue 运行手册。自动化是 AWS Systems Manager 的一项功能。AWSSupport-ExecuteEC2Rescue 运行手册旨在全面执行 Systems Manager 的操作、AWS CloudFormation 的操作和 Lambda 功能,从而将使用 EC2Rescue 通常所需的步骤自动化。

您可以使用 AWSSupport-ExecuteEC2Rescue 运行手册,对不同类型的操作系统 (OS) 问题进行故障排除和潜在修复。不支持带有加密根卷的实例。有关完整列表,请参阅以下主题:

Windows:请参阅将适用于 Windows Server 的 EC2Rescue 与命令行配合使用中的抢救操作

LinuxmacOS:一些适用于 Linux 的 EC2Rescue 模块会检测并尝试修复问题。有关更多信息,请参阅 GitHub 上各个模块的 aws-ec2rescue-linux 文档。

工作方式

如下文所示,使用自动化和 AWSSupport-ExecuteEC2Rescue 运行手册对实例进行故障排除:

  • 您为无法访问的实例指定 ID 并启动运行手册。

  • 系统创建一个临时 VPC,然后运行一系列 Lambda 函数以配置该 VPC。

  • 系统在与您的原始实例相同的可用区内为您的临时 VPC 标识一个子网。

  • 系统启动一个临时的启用了 SSM 的 帮助程序实例。

  • 系统停止您的原始实例并创建备份。然后,它将原始根卷附加到帮助程序实例。

  • 系统使用 Run Command 在帮助程序实例上运行 EC2Rescue。EC2Rescue 识别并尝试修复有关已附加的原始根卷的问题。完成后,EC2Rescue 重新将根卷附加回原始实例。

  • 系统重启您的原始实例,并终止临时实例。系统也将终止临时 VPC 和在自动化开始时创建的 Lambda 函数。

开始前的准备工作

运行以下自动化之前,请执行以下操作:

  • 复制无法访问的实例的实例 ID。您将在过程中指定此 ID。

  • (可选) 收集无法访问实例所在可用区中子网的 ID。EC2Rescue 实例将在此子网中创建。如果不指定子网,自动化会在您的 AWS 账户中创建新建一个临时 VPC。验证您的 AWS 账户是否至少有一个可用 VPC。默认情况下,一个区域中可以创建 5 个 VPC。如果您已在该区域中创建 5 个 VPC,自动化将会失败,但不会对您的实例进行更改。有关 Amazon VPC 配额的更多信息,请参阅 Amazon VPC 用户指南中的 VPC 和子网

  • 或者,您可以为自动化创建并指定一个 AWS Identity and Access Management (IAM) 角色。如果您不指定此角色,自动化将在运行自动化的用户的环境中运行。

AWSSupport-EC2Rescue 授予在您的实例上执行操作的权限

在自动化执行期间,EC2Rescue 需要权限才能在您的实例上执行一系列操作。这些操作调用 AWS Lambda、IAM 和 Amazon EC2 服务,安全地尝试修复实例的问题。如果您在 AWS 账户 和/或 VPC 中具有管理员级权限,您可能能够在不按照本部分中所述配置权限的情况下运行自动化。如果您没有管理员级权限,则您或管理员必须使用以下选项之一配置权限。

使用 IAM policy 授予权限

您可以将以下 IAM policy 作为内联策略附加到您的用户、组或角色;也可以创建新的 IAM 托管策略,并将其附加到您的用户、组或角色。有关将内联策略添加到您的用户、组或角色的更多信息,请参阅使用内联策略。有关创建新的托管策略的更多信息,请参阅使用托管策略

注意

如果创建新的 IAM 托管式策略,则还必须将 AmazonSSMAutomationRole 托管式策略附加到该策略,以便实例与 Systems Manager API 通信。

适用于 AWSSupport-EC2Rescue 的 IAM policy

account ID 替换为您自己的信息。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lambda:InvokeFunction", "lambda:DeleteFunction", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:*:account ID:function:AWSSupport-EC2Rescue-*", "Effect": "Allow" }, { "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::awssupport-ssm.*/*.template", "arn:aws:s3:::awssupport-ssm.*/*.zip" ], "Effect": "Allow" }, { "Action": [ "iam:CreateRole", "iam:CreateInstanceProfile", "iam:GetRole", "iam:GetInstanceProfile", "iam:PutRolePolicy", "iam:DetachRolePolicy", "iam:AttachRolePolicy", "iam:PassRole", "iam:AddRoleToInstanceProfile", "iam:RemoveRoleFromInstanceProfile", "iam:DeleteRole", "iam:DeleteRolePolicy", "iam:DeleteInstanceProfile" ], "Resource": [ "arn:aws:iam::account ID:role/AWSSupport-EC2Rescue-*", "arn:aws:iam::account ID:instance-profile/AWSSupport-EC2Rescue-*" ], "Effect": "Allow" }, { "Action": [ "lambda:CreateFunction", "ec2:CreateVpc", "ec2:ModifyVpcAttribute", "ec2:DeleteVpc", "ec2:CreateInternetGateway", "ec2:AttachInternetGateway", "ec2:DetachInternetGateway", "ec2:DeleteInternetGateway", "ec2:CreateSubnet", "ec2:DeleteSubnet", "ec2:CreateRoute", "ec2:DeleteRoute", "ec2:CreateRouteTable", "ec2:AssociateRouteTable", "ec2:DisassociateRouteTable", "ec2:DeleteRouteTable", "ec2:CreateVpcEndpoint", "ec2:DeleteVpcEndpoints", "ec2:ModifyVpcEndpoint", "ec2:Describe*" ], "Resource": "*", "Effect": "Allow" } ] }

使用 AWS CloudFormation 模板授予权限

AWS CloudFormation 使用预配置模板自动化创建 IAM 角色和策略的过程。使用 AWS CloudFormation,通过以下过程为 EC2Rescue 自动化创建所需的 IAM 角色和策略。

为 EC2Rescue 创建所需的 IAM 角色和策略
  1. 下载 AWSSupport-EC2RescueRole.zip 文件并将 AWSSupport-EC2RescueRole.json 解压到本地计算机上的目录。

  2. 如果您的 AWS 账户是一个特殊分区,请编辑模板以将 ARN 值更改为您的分区的值。

    例如,对于中国地区,将出现的所有 arn:aws 更改为 arn:aws-cn

  3. 登录到 AWS Management Console 并打开 AWS CloudFormation 控制台 https://console.aws.amazon.com/cloudformation

  4. 依次选择创建堆栈使用新资源(标准)

  5. 创建堆栈页面上,对于先决条件 - 准备模板,选择模板已就绪

  6. 对于指定模板,选择上传模板文件

  7. 选择选择文件,然后进行浏览并从您解压缩 AWSSupport-EC2RescueRole.json 文件的目录中选择此文件。

  8. 选择下一步

  9. 指定堆栈详细信息页上,对于堆栈名称字段,输入用于标识此堆栈的名称,然后选择下一步

  10. (可选)在标签 区域,将一个或多个标签键名称/值对应用到堆栈。

    标签是您分配给资源的可选元数据。标签可让您按各种标准(如用途、所有者或环境)对资源进行分类。例如,您可能需要对堆栈进行标记,以确定其运行的任务类型、涉及的目标或其他资源的类型以及其运行的环境。

  11. 选择 Next(下一步)

  12. 审核页面上,审核堆栈详细信息,然后向下滚动并选择我确认 AWS CloudFormation 可能创建 IAM 资源选项。

  13. 选择创建堆栈

    AWS CloudFormation 将持续几分钟显示 CREATE_IN_PROGRESS 状态。创建堆栈后,状态将变为 CREATE_COMPLETE。您还可以选择刷新图标来检查创建过程的状态。

  14. 堆栈列表中,选择您刚刚创建的堆栈的选项按钮,然后选择输出选项卡。

  15. 记下。这是 AssumeRole 的 ARN。在下一个过程 运行自动化 中运行自动化时指定此 ARN。

运行自动化

重要

以下自动化将停止无法访问的实例。停止实例可能导致附加的实例存储卷(如果存在)上的数据丢失。如果未关联弹性 IP,停止实例也可能导致公有 IP 更改。

运行 AWSSupport-ExecuteEC2Rescue 自动化
  1. 访问 https://console.aws.amazon.com/systems-manager/,打开 AWS Systems Manager 控制台。

  2. 在导航窗格中,选择 自动化

  3. 选择执行自动化

  4. 自动化文档部分中,从列表中选择 Amazon 所拥有

  5. 在运行手册列表中,选择卡片中的 AWSSupport-ExecuteEC2Rescue,然后选择下一步

  6. 执行自动化文档页面上,选择简单执行

  7. 文档详细信息部分中,验证文档版本 是否设置为最高默认版本。例如,$DEFAULT3 (默认值))

  8. 输入参数部分中,指定以下参数:

    1. 对于 UnreachableInstanceId,指定无法访问实例的 ID。

    2. (可选)对于 EC2RescueInstanceType,为 EC2Rescue 实例指定实例类型。默认的实例类型为 t2.medium

    3. 对于 AutomationAssumeRole,如果您通过使用本主题前面介绍的 AWS CloudFormation 过程为此自动化创建了角色,则选择您在 AWS CloudFormation 控制台中创建的 AssumeRole 的 ARN。

    4. (可选)如果在排查实例故障时需要收集操作系统级别的日志,请为 LogDestination 指定 S3 存储桶。日志会自动上传到此指定存储桶。

    5. 对于 SubnetId,指定无法访问实例所在可用区中某个现有 VPC 的子网。默认情况下,Systems Manager 会新建一个 VPC,但您可以根据需要指定现有 VPC 中的某个子网。

      注意

      如果未看到指定存储桶或子网 ID 的选项,请确认使用的是不是运行手册的最新默认版本。

  9. (可选)在标签区域,应用一个或多个标签键名称/值对以帮助识别自动化,例如 Key=Purpose,Value=EC2Rescue

  10. 选择执行

运行手册创建一个备份 AMI,作为自动化的一部分。自动化创建的所有其他资源都会自动删除,但此 AMI 将保留在您的账户中。此 AMI 遵从以下命名约定:

备份 AMI:AWSSupport-EC2Rescue:UnreachableInstanceId

在 Amazon EC2 控制台中,可以通过搜索自动化执行 ID 查找此 AMI。