在无法访问的实例上运行 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 与命令行配合使用中的抢救操作。
Linux 和 macOS:一些适用于 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 角色和策略
-
下载
AWSSupport-EC2RescueRole.zip
文件并将AWSSupport-EC2RescueRole.json
解压到本地计算机上的目录。 -
如果您的 AWS 账户是一个特殊分区,请编辑模板以将 ARN 值更改为您的分区的值。
例如,对于中国地区,将出现的所有
arn:aws
更改为arn:aws-cn
。 登录到 AWS Management Console 并打开 AWS CloudFormation 控制台 https://console.aws.amazon.com/cloudformation
。 -
依次选择创建堆栈和使用新资源(标准)。
-
在创建堆栈页面上,对于先决条件 - 准备模板,选择模板已就绪。
-
对于指定模板,选择上传模板文件。
-
选择选择文件,然后进行浏览并从您解压缩
AWSSupport-EC2RescueRole.json
文件的目录中选择此文件。 -
选择下一步。
-
在指定堆栈详细信息页上,对于堆栈名称字段,输入用于标识此堆栈的名称,然后选择下一步。
-
(可选)在标签 区域,将一个或多个标签键名称/值对应用到堆栈。
标签是您分配给资源的可选元数据。标签可让您按各种标准(如用途、所有者或环境)对资源进行分类。例如,您可能需要对堆栈进行标记,以确定其运行的任务类型、涉及的目标或其他资源的类型以及其运行的环境。
-
选择 Next(下一步)
-
在审核页面上,审核堆栈详细信息,然后向下滚动并选择我确认 AWS CloudFormation 可能创建 IAM 资源选项。
-
选择创建堆栈。
AWS CloudFormation 将持续几分钟显示 CREATE_IN_PROGRESS 状态。创建堆栈后,状态将变为 CREATE_COMPLETE。您还可以选择刷新图标来检查创建过程的状态。
-
在堆栈列表中,选择您刚刚创建的堆栈的选项按钮,然后选择输出选项卡。
-
记下值。这是 AssumeRole 的 ARN。在下一个过程 运行自动化 中运行自动化时指定此 ARN。
运行自动化
重要
以下自动化将停止无法访问的实例。停止实例可能导致附加的实例存储卷(如果存在)上的数据丢失。如果未关联弹性 IP,停止实例也可能导致公有 IP 更改。
运行 AWSSupport-ExecuteEC2Rescue
自动化
访问 https://console.aws.amazon.com/systems-manager/
,打开 AWS Systems Manager 控制台。 在导航窗格中,选择 自动化。
-
选择执行自动化。
-
在自动化文档部分中,从列表中选择 Amazon 所拥有。
-
在运行手册列表中,选择卡片中的
AWSSupport-ExecuteEC2Rescue
,然后选择下一步。 -
在执行自动化文档页面上,选择简单执行。
-
在文档详细信息部分中,验证文档版本 是否设置为最高默认版本。例如,$DEFAULT 或 3 (默认值))。
-
在输入参数部分中,指定以下参数:
-
对于 UnreachableInstanceId,指定无法访问实例的 ID。
-
(可选)对于 EC2RescueInstanceType,为 EC2Rescue 实例指定实例类型。默认的实例类型为
t2.medium
。 -
对于 AutomationAssumeRole,如果您通过使用本主题前面介绍的 AWS CloudFormation 过程为此自动化创建了角色,则选择您在 AWS CloudFormation 控制台中创建的 AssumeRole 的 ARN。
-
(可选)如果在排查实例故障时需要收集操作系统级别的日志,请为 LogDestination 指定 S3 存储桶。日志会自动上传到此指定存储桶。
-
对于 SubnetId,指定无法访问实例所在可用区中某个现有 VPC 的子网。默认情况下,Systems Manager 会新建一个 VPC,但您可以根据需要指定现有 VPC 中的某个子网。
注意
如果未看到指定存储桶或子网 ID 的选项,请确认使用的是不是运行手册的最新默认版本。
-
-
(可选)在标签区域,应用一个或多个标签键名称/值对以帮助识别自动化,例如
Key=Purpose,Value=EC2Rescue
。 -
选择执行。
运行手册创建一个备份 AMI,作为自动化的一部分。自动化创建的所有其他资源都会自动删除,但此 AMI 将保留在您的账户中。此 AMI 遵从以下命名约定:
备份 AMI:AWSSupport-EC2Rescue:UnreachableInstanceId
在 Amazon EC2 控制台中,可以通过搜索自动化执行 ID 查找此 AMI。