

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

# `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：


****  

| 变量 | 说明 | 示例值 | 
| --- | --- | --- | 
| $env：救援账户\_ID EC2 | {{ global:ACCOUNT\_ID }} | 123456789012 | 
| $env：救援日期 EC2 | {{ global:DATE }} | 2018-09-07 | 
| $env：救援\_日期\_时间 EC2 | {{ global:DATE\_TIME }} | 2018-09-07\_18.09.59 | 
| $env：EC2RESCUE\_ RW\_DIR EC2 | EC2Windows 版 Rescue 安装路径 | C:\\Program Files\\ Amazon\\ R EC2 escue | 
| $env：EC2RESCUE\_ RW\_DIR EC2 | EC2Windows 版 Rescue 安装路径 | C:\\Program Files\\ Amazon\\ R EC2 escue | 
| $env：RESCUE\_EXECUTION\_ID EC2 | {{ automation:EXECUTION\_ID }} | 7ef8008e-219b-4aca-8bb5-65e2e898e20b | 
| $env：救援\_OFFLINE\_CURRENT\_CONTROL\_SET EC2 | 离线 Windows 目前控制设置路径 | `HKLM:\AWSTempSystem\ControlSet001` | 
| $env：救援\_OFFLINE\_DRIVE EC2 | 离线 Windows 驱动器号 | D:\\ | 
| $env：RESCUE\_OFLINE\_EBS\_DEVICE EC2 | 离线根卷 EBS 设备 | xvdf | 
| $env：RESCUE\_OFFLINE\_KERNEL\_VER EC2 | 离线 Windows 内核版本 | 6.1.7601.24214 | 
| $env：RESCUE\_OFLINE\_OS\_ARCHITECTUR EC2 | 离线 Windows 架构 | AMD64 | 
| $env：RESCUE\_OFFLINE\_OS\_CAPTION EC2 | 离线 Windows 标题 | Windows Server 2008 R2（数据中心版） | 
| $env：RESCUE\_OFFLINE\_OS\_TYPE EC2 | 离线 Windows 操作系统类型 | 服务器 | 
| $env：RESCUE\_OFLINE\_PROGRAM\_FILES\_DIR EC2 | 离线 Windows 程序文件目录路径 | D:\\Program Files | 
| $env：RESCUE\_OFFLINE\_PROGRAM\_FILES\_X86\_DIR EC2 | 离线 Windows 程序文件 x86 目录路径 | D:\\Program Files (x86) | 
| $env：救援\_OFFLINE\_REGISTRY\_DIR EC2 | 离线 Windows 注册表目录路径 | D:\\Windows\\System32\\config | 
| $env：RESCUE\_OFFLINE\_SYSTEM\_ROOT EC2 | 离线 Windows 系统根目录路径 | D:\\Windows | 
| $env：RESCUE\_REGION EC2 | {{ global:REGION }} | us-west-1 | 
| $env：RESCUE\_S3\_BUCKET EC2 | {{S3BucketName }} | amzn-s3 demo-bucket | 
| $env：RESCUE\_S3\_PREFIX EC2 | {{ S3Prefix }} | myprefix/ | 
| $env：救援\_SOURCE\_INSTANCE EC2 | {{ InstanceId }} | i-abcdefgh123456789 | 
| $script：EC2救援\_离线\_WINDOWS\_INSTALL | 离线 Windows 安装元数据 | 客户 Powershell 对象 | 

Linux：


****  

| 变量 | 说明 | 示例值 | 
| --- | --- | --- | 
| EC2救援账号 | {{ global:ACCOUNT\_ID }} | 123456789012 | 
| EC2救援日期 | {{ global:DATE }} | 2018-09-07 | 
| EC2救援日期\_时间 | {{ global:DATE\_TIME }} | 2018-09-07\_18.09.59 | 
| EC2RESCUE\_ rl\_DIR EC2 | EC2Linux 版的救援安装路径 | /usr/local/ec2rl-1.1.3 | 
| EC2救援\_执行\_ID | {{ automation:EXECUTION\_ID }} | 7ef8008e-219b-4aca-8bb5-65e2e898e20b | 
| EC2离线救援设备 | 离线设备名称 | /dev/xvdf1 | 
| EC2离线救援\_EBS\_设备 | 离线根卷 EBS 设备 | /dev/sdf | 
| EC2救援离线系统根目录 | 离线根卷挂载点 | /mnt/mount | 
| EC2救援\_蟒蛇 | Python 版本 | python2.7 | 
| EC2救援区域 | {{ global:REGION }} | us-west-1 | 
| EC2救援\_S3\_BUCKET | {{S3BucketName }} | amzn-s3 demo-bucket | 
| EC2RESCUE\_S3\_PREFIX | {{ S3Prefix }} | myprefix/ | 
| EC2救援源实例 | {{ InstanceId }} | 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 \| false

  默认：false

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

  类型：字符串

  有效值：true \| false

  默认：false

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

  类型：字符串

  有效值：t2.small \| t2.medium \| t2.large \| t3.small \| t3.medium \| t3.large \| i3.large \| 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

  类型：字符串

  默认值：{{ automation:EXECUTION\_ID }}

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

**所需的 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. （使用当前实例子网）-如果 \* SubnetId = SelectedInstanceSubnet \* 则运行`aws:createStack`部署 EC2救援 CloudFormation 堆栈

   1. （创建新 VPC）-如果 \* SubnetId = CreateNew VPC\* 则运行部署`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救援前备份）-如果\* CreatePre EC2 RescueBackup = true\*

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

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

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

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

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

   1. （实例为 Windows）：

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

      `aws:sleep` - 休眠 10 秒

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

   1. （实例为 Linux）：

      `aws:executeAwsApi`-将根卷作为 \*/dev/sdf\* 连接到 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救援后备份）-如果\* CreatePost EC2 RescueBackup = true\*

   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