

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# `AWSSupport-StartEC2RescueWorkflow`
<a name="automation-awssupport-startec2rescueworkflow"></a>

 **描述** 

`AWSSupport-StartEC2RescueWorkflow` 运行手册在创建的帮助程序实例上运行提供 base64 编码脚本（Bash 或 Powershell）以修复实例。您的实例的根卷已连接并挂载到辅助实例，也称为 R EC2 escue 实例。如果实例是 Windows，请提供 Powershell 脚本。否则，请使用 Bash。运行手册会设置一些可供脚本使用的环境变量。环境变量包含有关您提供的输入的信息，以及有关离线根卷的信息。离线卷已挂载，可供使用。例如，您可以将 Desired State Configuration 文件保存到离线 Windows 根卷，或 chroot 到一个离线 Linux 根卷并执行离线修复。

[运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-StartEC2RescueWorkflow)

**重要**  
此自动化不支持从 Marketplace Amazon 系统映像 (AMIs) 创建的 Amazon EC2 实例。

 **附加信息** 

要对脚本进行 base64 编码，可以使用 Powershell 或 Bash。Powershell：

```
[System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes([System.IO.File]::ReadAllText('PATH_TO_FILE')))
```

Bash：

```
base64 PATH_TO_FILE
```

下面是您可以在离线脚本中使用的环境变量列表，具体视目标操作系统而定

Windows：


****  

| 变量 | 说明 | 示例值 | 
| --- | --- | --- | 
|  \$1env：救援账户\$1ID EC2  |  \$1\$1 global:ACCOUNT\$1ID \$1\$1  |  123456789012  | 
|  \$1env：救援日期 EC2  |  \$1\$1 global:DATE \$1\$1  |  2018-09-07  | 
|  \$1env：救援\$1日期\$1时间 EC2  |  \$1\$1 global:DATE\$1TIME \$1\$1  |  2018-09-07\$118.09.59  | 
|  \$1env：EC2RESCUE\$1 RW\$1DIR EC2  |  EC2Windows 版 Rescue 安装路径  |  C:\$1Program Files\$1 Amazon\$1 R EC2 escue  | 
|  \$1env：EC2RESCUE\$1 RW\$1DIR EC2  |  EC2Windows 版 Rescue 安装路径  |  C:\$1Program Files\$1 Amazon\$1 R EC2 escue  | 
|  \$1env：RESCUE\$1EXECUTION\$1ID EC2  |  \$1\$1 automation:EXECUTION\$1ID \$1\$1  |  7ef8008e-219b-4aca-8bb5-65e2e898e20b  | 
|  \$1env：救援\$1OFFLINE\$1CURRENT\$1CONTROL\$1SET EC2  |  离线 Windows 目前控制设置路径  |  `HKLM:\AWSTempSystem\ControlSet001`  | 
|  \$1env：救援\$1OFFLINE\$1DRIVE EC2  |  离线 Windows 驱动器号  |  D:\$1  | 
|  \$1env：RESCUE\$1OFLINE\$1EBS\$1DEVICE EC2  |  离线根卷 EBS 设备  |  xvdf  | 
|  \$1env：RESCUE\$1OFFLINE\$1KERNEL\$1VER EC2  |  离线 Windows 内核版本  |  6.1.7601.24214  | 
|  \$1env：RESCUE\$1OFLINE\$1OS\$1ARCHITECTUR EC2  |  离线 Windows 架构  |  AMD64  | 
|  \$1env：RESCUE\$1OFFLINE\$1OS\$1CAPTION EC2  |  离线 Windows 标题  |  Windows Server 2008 R2（数据中心版）  | 
|  \$1env：RESCUE\$1OFFLINE\$1OS\$1TYPE EC2  |  离线 Windows 操作系统类型  |  服务器  | 
|  \$1env：RESCUE\$1OFLINE\$1PROGRAM\$1FILES\$1DIR EC2  |  离线 Windows 程序文件目录路径  |  D:\$1Program Files  | 
|  \$1env：RESCUE\$1OFFLINE\$1PROGRAM\$1FILES\$1X86\$1DIR EC2  |  离线 Windows 程序文件 x86 目录路径  |  D:\$1Program Files (x86)  | 
|  \$1env：救援\$1OFFLINE\$1REGISTRY\$1DIR EC2  |  离线 Windows 注册表目录路径  |  D:\$1Windows\$1System32\$1config  | 
|  \$1env：RESCUE\$1OFFLINE\$1SYSTEM\$1ROOT EC2  |  离线 Windows 系统根目录路径  |  D:\$1Windows  | 
|  \$1env：RESCUE\$1REGION EC2  |  \$1\$1 global:REGION \$1\$1  |  us-west-1  | 
|  \$1env：RESCUE\$1S3\$1BUCKET EC2  |  \$1\$1S3BucketName \$1\$1  |  amzn-s3 demo-bucket  | 
|  \$1env：RESCUE\$1S3\$1PREFIX EC2  |  \$1\$1 S3Prefix \$1\$1  |  myprefix/  | 
|  \$1env：救援\$1SOURCE\$1INSTANCE EC2  |  \$1\$1 InstanceId \$1\$1  |  i-abcdefgh123456789  | 
|  \$1script：EC2救援\$1离线\$1WINDOWS\$1INSTALL  |  离线 Windows 安装元数据  |  客户 Powershell 对象  | 

Linux：


****  

| 变量 | 说明 | 示例值 | 
| --- | --- | --- | 
|  EC2救援账号  |  \$1\$1 global:ACCOUNT\$1ID \$1\$1  |  123456789012  | 
|  EC2救援日期  |  \$1\$1 global:DATE \$1\$1  |  2018-09-07  | 
|  EC2救援日期\$1时间  |  \$1\$1 global:DATE\$1TIME \$1\$1  |  2018-09-07\$118.09.59  | 
|  EC2RESCUE\$1 rl\$1DIR EC2  |  EC2Linux 版的救援安装路径  |  /usr/local/ec2rl-1.1.3  | 
|  EC2救援\$1执行\$1ID  |  \$1\$1 automation:EXECUTION\$1ID \$1\$1  |  7ef8008e-219b-4aca-8bb5-65e2e898e20b  | 
|  EC2离线救援设备  |  离线设备名称  |  /dev/xvdf1  | 
|  EC2离线救援\$1EBS\$1设备  |  离线根卷 EBS 设备  |  /dev/sdf  | 
|  EC2救援离线系统根目录  |  离线根卷挂载点  |  /mnt/mount  | 
|  EC2救援\$1蟒蛇  |  Python 版本  |  python2.7  | 
|  EC2救援区域  |  \$1\$1 global:REGION \$1\$1  |  us-west-1  | 
|  EC2救援\$1S3\$1BUCKET  |  \$1\$1S3BucketName \$1\$1  |  amzn-s3 demo-bucket  | 
|  EC2RESCUE\$1S3\$1PREFIX  |  \$1\$1 S3Prefix \$1\$1  |  myprefix/  | 
|  EC2救援源实例  |  \$1\$1 InstanceId \$1\$1  |  i-abcdefgh123456789  | 

**文档类型**

自动化

**所有者**

Amazon

**平台**

Linux、macOS、Windows

**参数**
+ AMIPrefix

  类型：字符串

  默认：`AWSSupport-EC2Rescue`

  描述：（可选）备份 AMI 名称的前缀。
+ AutomationAssumeRole

  类型：字符串

  描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
+ CreatePostEC2RescueBackup

  类型：字符串

  有效值：true \$1 false

  默认：false

  描述：（可选）将其设置为，`true`以便 InstanceId在运行脚本之后、启动脚本之前创建 AMI。Automation 完成后，AMI 仍将存在。对此 AMI 的安全访问由您负责；或者，您也可以将其删除。
+ CreatePreEC2RescueBackup

  类型：字符串

  有效值：true \$1 false

  默认：false

  描述：（可选）将其设置为`true`，以便 InstanceId在运行脚本之前创建的 AMI。Automation 完成后，AMI 仍将存在。对此 AMI 的安全访问由您负责；或者，您也可以将其删除。
+ EC2RescueInstanceType

  类型：字符串

  有效值：t2.small \$1 t2.medium \$1 t2.large \$1 t3.small \$1 t3.medium \$1 t3.large \$1 i3.large \$1 i3.large

  默认：t3.medium

  描述：（可选） EC2救援实例的 EC2 实例类型。
+ InstanceId

  类型：字符串

  描述：（必需）您的 EC2 实例的 ID。重要： AWS Systems Manager 自动化会停止此实例。存储在实例存储卷中的数据将丢失。如果不使用弹性 IP，则公有 IP 地址将发生更改。
+ OfflineScript

  类型：字符串

  描述：（必需）将对帮助程序实例运行的 Base64 编码的脚本。如果你的源实例是 Linux，如果是 Windows， PowerShell 则使用 Bash。
+ S3 BucketName

  类型：字符串

  描述：（可选）您账户中用于上传故障排除日志的 S3 存储桶的名称。确保存储桶策略不会向不需要访问所收集日志的各方授予不必要的 read/write 权限。
+ S3Prefix

  类型：字符串

  默认：`AWSSupport-EC2Rescue`

  描述：（可选）S3 日志的前缀。
+ SubnetId

  类型：字符串

  默认： SelectedInstanceSubnet

  描述：（可选） EC2救援实例的子网 ID。默认情况下，使用提供的实例所在的同一子网。重要：如果您提供自定义子网，则该子网必须与位于同一个可用区中 InstanceId，并且必须允许访问 SSM 终端节点。
+ UniqueId

  类型：字符串

  默认值：\$1\$1 automation:EXECUTION\$1ID \$1\$1

  描述：（可选）用于自动化的唯一标识符。

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。

建议运行自动化的用户附加 A **mazon Role SSMAutomation I** AM 托管策略。除了此策略以外，用户还必须：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "lambda:InvokeFunction",
                "lambda:DeleteFunction",
                "lambda:GetFunction"
            ],
            "Resource": "arn:aws:lambda:*:111122223333: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::111122223333:role/AWSSupport-EC2Rescue-*",
                "arn:aws:iam::111122223333: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"
        }
    ]
}
```

------

 **文档步骤** 

1. `aws:executeAwsApi` - 描述提供的实例

1. `aws:executeAwsApi` - 描述提供的实例的根卷

1. `aws:assertAwsResourceProperty` - 检查根卷设备类型是否为 EBS

1. `aws:assertAwsResourceProperty` - 检查根卷是否未加密

1. `aws:assertAwsResourceProperty` - 检查提供的子网 ID

   1. （使用当前实例子网）-如果 \$1 SubnetId = SelectedInstanceSubnet \$1 则运行`aws:createStack`部署 EC2救援 CloudFormation 堆栈

   1. （创建新 VPC）-如果 \$1 SubnetId = CreateNew VPC\$1 则运行部署`aws:createStack`救援堆栈 EC2 CloudFormation 

   1. （使用自定义子网）- 在所有其他情况下：

      `aws:assertAwsResourceProperty` - 检查提供的子网是否与提供的实例位于同一可用区中

      `aws:createStack`-部署 EC2救援 CloudFormation 堆栈

1. `aws:invokeLambdaFunction` - 执行额外输入验证

1. `aws:executeAwsApi`-更新 EC2救援 CloudFormation 堆栈以创建 EC2救援助手实例

1. `aws:waitForAwsResourceProperty`-等待 EC2救援 CloudFormation 堆栈更新完成

1. `aws:executeAwsApi`-描述用于获取 EC2 Rescue 助手实例 ID 的 EC2救援 CloudFormation 堆栈输出

1. `aws:waitForAwsResourceProperty`-等待 R EC2 escue 助手实例变为托管实例

1. `aws:changeInstanceState` - 停止提供的实例

1. `aws:changeInstanceState` - 停止提供的实例

1. `aws:changeInstanceState` - 强制停止提供的实例

1. `aws:assertAwsResourceProperty`-检查 CreatePreEC2RescueBackup输入值

   1. （创建EC2救援前备份）-如果\$1 CreatePre EC2 RescueBackup = true\$1

   1. `aws:executeAwsApi` - 创建提供的实例的 AMI 备份

   1. `aws:createTags` - 标记 AMI 备份

1. `aws:runCommand`-在 EC2救援助手实例上安装 EC2 Rescue

1. `aws:executeAwsApi` - 从提供的实例分离根卷

1. `aws:assertAwsResourceProperty` - 检查提供的实例平台

   1. （实例为 Windows）：

      `aws:executeAwsApi`-将根卷作为 \$1xvdf\$1 连接到 R EC2 escue 助手实例

      `aws:sleep` - 休眠 10 秒

      `aws:runCommand` - 在 Powershell 中运行提供的离线脚本

   1. （实例为 Linux）：

      `aws:executeAwsApi`-将根卷作为 \$1/dev/sdf\$1 连接到 R EC2 escue 助手实例

      `aws:sleep` - 休眠 10 秒

      `aws:runCommand` - 在 Bash 中运行提供的离线脚本

1. `aws:changeInstanceState`-停止 EC2救援助手实例

1. `aws:changeInstanceState`-强制停止 EC2救援助手实例

1. `aws:executeAwsApi`-将根卷与 R EC2 escue 助手实例分离

1. `aws:executeAwsApi` - 将根卷附加回提供的实例

1. `aws:assertAwsResourceProperty`-检查 CreatePostEC2RescueBackup输入值

   1. （创建EC2救援后备份）-如果\$1 CreatePost EC2 RescueBackup = true\$1

   1. `aws:executeAwsApi` - 创建提供的实例的 AMI 备份

   1. `aws:createTags` - 标记 AMI 备份

1. `aws:executeAwsApi` - 为提供的实例的根卷恢复初始的终止时删除状态

1. `aws:changeInstanceState` - 将提供的实例恢复为初始状态（运行/停止）

1. `aws:deleteStack`-删除 EC2救援 CloudFormation 堆栈

 **输出** 

runScriptForLinux.Outp

runScriptForWindows. Output

preScriptBackup.ImageId

postScriptBackup.ImageId