Amazon EC2 Systems Manager
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

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

EC2Rescue 可以帮助您诊断并解决有关 Amazon EC2 Windows Server 实例的问题。您可以手动运行该工具 (如将 EC2Rescue 用于 Windows Server 中所述),您也可以使用 Systems Manager Automation 和 AWSSupport-ExecuteEC2Rescue 文档自动运行该工具。AWSSupport-ExecuteEC2Rescue 文档旨在执行 Systems Manager 操作、AWS CloudFormation 操作和 Lambda 函数的组合,从而将使用 EC2Rescue 通常所需的步骤自动化。

注意

AWSSupport-ExecuteEC2Rescue 文档目前不受 Linux 实例支持。如果您对某个 Linux 实例执行自动化,自动化将会失败,但不会对您的实例进行更改。

您可以通过 AWSSupport-ExecuteEC2Rescue 使用自动化,对以下问题进行故障排除和潜在修复:

  • 错误配置的网络适配器 (例如,不正确的静态 IP、DHCP 禁用和 DHCP 客户端禁用)

  • 远程桌面协议 (RDP) 服务问题 (例如,禁用服务或使用非默认配置来配置服务时)

  • Windows 防火墙问题 (例如,防火墙阻止 RDP 流量)

如何使用

使用自动化和 AWSSupport-ExecuteEC2Rescue 文档对实例进行故障排除的工作原理如下:

  • 您为无法访问的实例指定 ID 并执行自动化工作流程。

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

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

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

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

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

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

开始前的准备工作

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

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

  • 验证您的 AWS 账户是否至少有一个可用 VPC。默认情况下,一个区域中可以创建 5 个 VPC。如果您已在该区域中创建 5 个 VPC,则自动化将会失败,但不会对您的实例进行更改。有关更多信息,请参阅 VPC 和子网

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

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

使用 IAM 策略授予权限

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

注意

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

适用于 AWSSupport-EC2Rescue 的 IAM 策略

Copy
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lambda:InvokeFunction", "lambda:DeleteFunction", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:*:An-AWS-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::An-AWS-Account-ID:role/AWSSupport-EC2Rescue-*", "arn:aws:iam::An-AWS-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 Automation 创建所需的 IAM 角色和策略。

为 EC2Rescue 创建所需的 IAM 角色和策略

  1. 选择 Launch Stack 按钮。该按钮会打开 AWS CloudFormation 控制台并用 EC2Rescue 模板的 URL 填充 Specify an Amazon S3 template URL 字段。

    注意

    选择 View 以查看模板。

    查看 启动

    查看

  2. 选择 Next

  3. Specify Details 页面上的 Stack Name 字段中,选择保留默认值或指定您自己的值。选择 Next

  4. Options 页面上,您无需进行任何选择。选择 Next

  5. Review 页面上,向下滚动并选择 I acknowledge that AWS CloudFormation might create IAM resources 选项。

  6. 选择 Create

    大约三分钟左右,AWS CloudFormation 会显示 CREATE_IN_PROGRESS 状态。创建堆栈后,状态将变为 CREATE_COMPLETE

  7. 在堆栈列表中,选择您刚刚创建的堆栈旁边的选项,然后选择 Outputs 选项卡。

  8. 复制 Value。这是 AssumeRole 的 ARN。在执行自动化时,您将指定此 ARN。

执行自动化

以下过程介绍如何使用 Amazon EC2 控制台执行 AWSSupport-ExecuteEC2Rescue 文档。

重要

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

执行 AWSSupport-ExecuteEC2Rescue 自动化

  1. 打开 Amazon EC2 控制台,展开导航窗格中的 Systems Manager Services,然后选择 Automation

  2. 选择 Run Automation

  3. Document name 部分中,选择列表中的 Owned by Me or Amazon

  4. 在文档列表中,选择 AWSSupport-ExecuteEC2Rescue。文档所有者是 Amazon。

  5. Input parameters 部分中,为 UnreachableInstanceId 参数指定一个实例 ID。

    如果您使用本主题前面介绍的 CloudFormation 过程为此自动化创建角色,则指定您从 CloudFormation 控制台复制到 AssumeRole 参数中的 AssumeRole ARN。

  6. 选择 Run Automation

  7. 要监控执行过程,请选择正在运行的自动化,然后选择 Steps 选项卡。完成执行后,选择 Descriptions 选项卡,然后选择 View output 以查看结果。要查看单个步骤的输出,请选择 Steps 选项卡,然后选择步骤旁的 View Outputs

其他技术详细信息

本部分包括有关执行 AWSSupport-ExecuteEC2Rescue 文档时执行的步骤的其他技术详细信息。本部分还包括有关执行期间创建的资源的信息。如果自动化执行失败,此信息可以帮助您找到问题的来源。

Automation 步骤

AWSSupport-ExecuteEC2Rescue 文档的默认版本包括以下自动化步骤。

步骤 1:stageEC2RescueAutomation (aws:createStack action):自动化使用 AWS CloudFormation 堆栈创建完成自动化执行中的剩余步骤所需的 EC2Rescue VPC、AWS Lambda 函数和 IAM 角色。完成执行后,堆栈将被删除。在堆栈存在时,AWSSupport-ExecuteEC2Rescue 的其他执行将无法创建堆栈,因为它已存在。这是预期行为。如果您怀疑创建堆栈有问题,请查看 CloudFormation 控制台以获取更多详细信息。

Sign in to the AWS Management Console and open the AWS CloudFormation console at https://console.amazonaws.cn/cloudformation.

步骤 2:updateEC2RescueAutomation (aws:invokeFunction action):Lambda 函数将检查更新后的 EC2Rescue 模板,并更新堆栈 (如有必要)。

步骤 3:describeUnreachableInstance (aws:invokeFunction action):Lambda 函数将验证您提供的实例 ID 是否映射到支持的操作系统 (OS)。目前,您只能在 Windows 上运行 AWSSupport-ExecuteEC2Rescue。

步骤 4:getLatestImage (aws:invokeFunction action):Lambda 函数将在无法访问的实例所在的区域中确定最新 Windows Server AMI。

步骤 5:getEC2RescueSubnet (aws:invokeFunction action):Lambda 函数将确定无法访问的实例的可用区 (AZ)。该函数还将从 EC2Rescue VPC 中找到相应的 EC2Rescue 子网。

步骤 6:launchEC2RescueInstance (aws:runInstances action):利用之前的步骤中收集的信息,自动化将启动承载 EC2Rescue 的实例并对无法访问的实例执行恢复任务。

步骤 7:stopUnreachableInstance (aws:changeInstanceState action):自动化将在准备备份和恢复时停止无法访问的实例。

重要

执行将停止无法访问的实例。停止实例可能导致挂载的实例存储卷 (如果存在) 上的数据丢失。如果未关联弹性 IP,停止实例也可能导致公有 IP 更改。

步骤 8:createBackup (aws:createImage action):自动化将创建无法访问的实例的 AMI。尚未执行恢复操作。

注意

配置此步骤以快速返回 并继续下一步,以便自动化可以在创建 AMI 时继续。

步骤 9:tagEC2RescueResources (aws:createTags action):自动化会将以下标签分配到 EC2Rescue 实例和之前创建的备份 AMI。

名称

AWSSupport-EC2Rescue: {{UnreachableInstanceId}}

AWSSupport-EC2Rescue-AutomationExecution

{{automation:EXECUTION_ID}}

步骤 10:detachUnreachableInstanceRootVolume (aws:invokeFunction action):自动化会将根卷从无法访问的实例中分离。

步骤 11:attachUnreachableInstanceRootVolumeToEC2RescueInstance (aws:invokeFunction action):自动化会将根卷作为辅助卷 (xvdf) 挂载到 EC2Rescue 实例。

步骤 12:runEC2Rescue (aws:runCommand action):自动化将调用 AWSSupport-RunEC2RescueForWindowsTool 文档以诊断并解决有关 EC2Rescue 实例的 xvdf 卷的常见问题。

步骤 13:terminateEC2RescueInstance (aws:changeInstanceState action):自动化将终止 EC2Rescue 实例。

步骤 14:attachFixedRootVolumeToUnreachableInstance (aws:invokeFunction action):自动化会将该卷作为根卷 (/dev/sda1) 重新挂载到原始 EC2 实例。

步骤 15:startUnreachableInstance (aws:changeInstanceState action):自动化将在恢复任务完成后重新启动原始实例。

步骤 16:unstageEC2RescueAutomation (aws:deleteStack action):自动化将删除步骤 1 中创建的堆栈。

输出

执行完成后,自动化将返回以下输出。

输出名称 描述

createBackup.ImageId

备份 AMI 的 ID。

describeUnreachableInstance.Payload

EC2 实例 ID 检查的结果。

runEC2Rescue.Output

EC2Rescue 报告。

updateEC2RescueAutomation.Payload

自动自行更新检查的结果。

AWSSupport-ExecuteEC2Rescue 创建的资源

AWSSupport-ExecuteEC2Rescue 运行时将在您的账户中创建以下资源。创建的所有资源均使用以 AWSSupport-EC2Rescue 开头的名称标记 (例如,AWSSupport-EC2Rescue-VPC)。除了备份 AMI,所有其他资源均将在执行完成后被删除。

步骤名称 已创建的资源 自动删除?

stageEC2RescueAutomation

CloudFormation 堆栈:AWSSupportEC2Rescue

IAM 角色:AWSSupport-EC2Rescue-EC2RescueUpdatesLookup-region、AWSSupport-EC2Rescue-SubnetLookup-region、AWSSupport-EC2Rescue-AmiLookup-region、AWSSupport-EC2Rescue-DescribeInstance-region、AWSSupport-EC2Rescue-EBSHelper-region、AWSSupport-EC2Rescue-EC2Role-region

Lambda 函数:AWSSupport-EC2Rescue-EC2RescueUpdatesLookup、AWSSupport-EC2Rescue-SubnetLookup、AWSSupport-EC2Rescue-AmiLookup、AWSSupport-EC2Rescue-DescribeInstance、AWSSupport-EC2Rescue-EBSHelper

IAM 实例配置文件:AWSSupport-EC2Rescue-InstanceProfile-region

VPC、子网、路由表和 Internet 网关:AWSSupport-EC2Rescue-VPC、AWSSupport-EC2Rescue-Subnet、AWSSupport-EC2Rescue-RT、AWSSupport-EC2Rescue-IGW

updateEC2RescueAutomation

CloudFormation 更改集:AWSSupport-EC2Rescue-automation_execution_id

describeUnreachableInstance

getLatestImage

getEC2RescueSubnet

launchEC2RescueInstance

EC2 实例:EC2Rescue:instance-id

stopUnreachableInstance

createBackup

EC2 AMI:AWSSupport-EC2Rescue-Backup_instance-id_creation-date-and-time

否 - 您必须手动删除此备份实例。如果不这样做,可能会产生 EC2 费用。

tagEC2RescueResources

detachUnreachableInstanceRootVolume

attachUnreachableInstanceRootVolumeToEC2RescueInstance

runEC2Rescue

terminateEC2RescueInstance

attachEC2RescuedRootVolumeToUnreachableInstance

startUnreachableInstance

unstageEC2RescueAutomation

有关如何通过 Run Command 使用 AWSSupport-ExecuteEC2Rescue 文档的信息,请参阅通过 Systems Manager Run Command 将 EC2Rescue 用于 Windows Server