

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

 **Description** 

`AWSSupport-StartEC2RescueWorkflow` Runbook 會在為救援執行個體而建立的協助程式執行個體上執行提供的 base64 編碼指令碼 (Bash 或 Powershell)。執行個體的根磁碟區會連接並掛載至協助程式執行個體，也稱為 EC2Rescue 執行個體。如果您的執行個體是 Windows，請提供 Powershell 指令碼。否則，請使用 Bash。Runbook 會設定一些可在指令碼中使用的環境變數。環境變數包含您提供之輸入的資訊，以及離線根磁碟區的資訊。離線磁碟區已掛載並可使用。例如，您可以將 Desired State Configuration 檔案儲存至離線的 Windows 根磁碟區，或者 chroot 至離線的 Linux 根磁碟區並執行離線修復。

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

**重要**  
此自動化不支援從 Marketplace Amazon Machine Image (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：


****  

| 變數 | Description | 範例值 | 
| --- | --- | --- | 
| $env:EC2RESCUE\_ACCOUNT\_ID | {{ global:ACCOUNT\_ID }} | 123456789012 | 
| $env:EC2RESCUE\_DATE | {{ global:DATE }} | 2018-09-07 | 
| $env:EC2RESCUE\_DATE\_TIME | {{ global:DATE\_TIME }} | 2018-09-07\_18.09.59 | 
| $env:EC2RESCUE\_EC2RW\_DIR | 適用於 Windows 安裝路徑的 EC2Rescue | C:\\Program Files\\Amazon\\EC2Rescue | 
| $env:EC2RESCUE\_EC2RW\_DIR | 適用於 Windows 安裝路徑的 EC2Rescue | C:\\Program Files\\Amazon\\EC2Rescue | 
| $env:EC2RESCUE\_EXECUTION\_ID | {{ automation:EXECUTION\_ID }} | 7ef8008e-219b-4aca-8bb5-65e2e898e20b | 
| $env:EC2RESCUE\_OFFLINE\_CURRENT\_CONTROL\_SET | 離線 Windows 目前控制集路徑 | `HKLM:\AWSTempSystem\ControlSet001` | 
| $env:EC2RESCUE\_OFFLINE\_DRIVE | 離線 Windows 磁碟機字母 | D:\\ | 
| $env:EC2RESCUE\_OFFLINE\_EBS\_DEVICE | 離線根磁碟區 EBS 裝置 | xvdf | 
| $env:EC2RESCUE\_OFFLINE\_KERNEL\_VER | 離線 Windows 核心版本 | 6.1.7601.24214 | 
| $env:EC2RESCUE\_OFFLINE\_OS\_ARCHITECTURE | 離線 Windows 架構 | AMD64 | 
| $env:EC2RESCUE\_OFFLINE\_OS\_CAPTION | 離線 Windows 字幕 | Windows Server 2008 R2 Datacenter | 
| $env:EC2RESCUE\_OFFLINE\_OS\_TYPE | 離線 Windows 作業系統類型 | Server | 
| $env:EC2RESCUE\_OFFLINE\_PROGRAM\_FILES\_DIR | 離線 Windows 程式檔案目錄路徑 | D:\\Program Files | 
| $env:EC2RESCUE\_OFFLINE\_PROGRAM\_FILES\_X86\_DIR | 離線 Windows 程式檔案 x86 目錄路徑 | D:\\Program Files (x86) | 
| $env:EC2RESCUE\_OFFLINE\_REGISTRY\_DIR | 離線 Windows 登錄檔目錄路徑 | D:\\Windows\\System32\\config | 
| $env:EC2RESCUE\_OFFLINE\_SYSTEM\_ROOT | 離線 Windows 系統根目錄路徑 | D:\\Windows | 
| $env:EC2RESCUE\_REGION | {{ global:REGION }} | us-west-1 | 
| $env:EC2RESCUE\_S3\_BUCKET | {{ S3BucketName }} | amzn-s3-demo-bucket | 
| $env:EC2RESCUE\_S3\_PREFIX | {{ S3Prefix }} | myprefix/ | 
| $env:EC2RESCUE\_SOURCE\_INSTANCE | {{ InstanceId }} | i-abcdefgh123456789 | 
| $script:EC2RESCUE\_OFFLINE\_WINDOWS\_INSTALL | 離線 Windows 安裝中繼資料 | 客戶 Powershell 物件 | 

Linux︰


****  

| 變數 | Description | 範例值 | 
| --- | --- | --- | 
| EC2RESCUE\_ACCOUNT\_ID | {{ global:ACCOUNT\_ID }} | 123456789012 | 
| EC2RESCUE\_DATE | {{ global:DATE }} | 2018-09-07 | 
| EC2RESCUE\_DATE\_TIME | {{ global:DATE\_TIME }} | 2018-09-07\_18.09.59 | 
| EC2RESCUE\_EC2RL\_DIR | 適用於 Linux 安裝路徑的 EC2Rescue | /usr/local/ec2rl-1.1.3 | 
| EC2RESCUE\_EXECUTION\_ID | {{ automation:EXECUTION\_ID }} | 7ef8008e-219b-4aca-8bb5-65e2e898e20b | 
| EC2RESCUE\_OFFLINE\_DEVICE | 離線裝置名稱 | /dev/xvdf1 | 
| EC2RESCUE\_OFFLINE\_EBS\_DEVICE | 離線根磁碟區 EBS 裝置 | /dev/sdf | 
| EC2RESCUE\_OFFLINE\_SYSTEM\_ROOT | 離線根磁碟區掛載點 | /mnt/mount | 
| EC2RESCUE\_PYTHON | Python 版本 | python2.7 | 
| EC2RESCUE\_REGION | {{ global:REGION }} | us-west-1 | 
| EC2RESCUE\_S3\_BUCKET | {{ S3BucketName }} | amzn-s3-demo-bucket | 
| EC2RESCUE\_S3\_PREFIX | {{ S3Prefix }} | myprefix/ | 
| EC2RESCUE\_SOURCE\_INSTANCE | {{ InstanceId }} | i-abcdefgh123456789 | 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

Linux、macOS、 Windows

**參數**
+ AMIPrefix

  類型：字串

  預設：`AWSSupport-EC2Rescue`

  描述：(選用) 備份 AMI 名稱的字首。
+ AutomationAssumeRole

  類型：字串

  描述：（選用） 允許 Systems Manager Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
+ CreatePostEC2RescueBackup

  類型：字串

  有效值：true \| false

  預設：false

  描述：（選用） 將其設定為 `true`以在執行指令碼後建立 InstanceId 的 AMI，然後再啟動指令碼。自動化完成之後，AMI 會持續存在。您有責任保護對 AMI 的存取，或是將其刪除。
+ CreatePreEC2RescueBackup

  類型：字串

  有效值：true \| false

  預設：false

  描述：（選用） 將其設定為 `true`以在執行指令碼之前建立 InstanceId 的 AMI。自動化完成之後，AMI 會持續存在。您有責任保護對 AMI 的存取，或是將其刪除。
+ EC2RescueInstanceType

  類型：字串

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

  預設：t3.medium

  描述：(選用) EC2Rescue 執行個體的 EC2 執行個體類型。
+ InstanceId

  類型：字串

  描述：(必要) EC2 執行個體的 ID。重要： AWS Systems Manager 自動化會停止此執行個體。存放在執行個體存放磁碟區的資料會遺失。如果您不是使用彈性 IP，則公有 IP 位址會變更。
+ OfflineScript

  類型：字串

  描述：(必要) 對協助程式執行個體執行的 Base64 編碼指令碼。如果您的來源執行個體是 Linux 則使用 Bash，如果是 Windows 則使用 PowerShell。
+ S3BucketName

  類型：字串

  描述：(選用) 您想要上傳疑難排解日誌之帳戶中的 S3 儲存貯體名稱。請確認儲存貯體政策不會授予不必要的讀取/寫入許可給不需要存取所收集日誌的單位。
+ S3Prefix

  類型：字串

  預設：`AWSSupport-EC2Rescue`

  描述：(選用) S3 日誌的字首。
+ SubnetId

  類型：字串

  預設：SelectedInstanceSubnet

  描述：(選用) EC2Rescue 執行個體的子網路 ID。根據預設，會使用與提供的執行個體所在相同的子網路。重要：如果您提供自訂子網路，則子網路必須與 InstanceId 位於相同的可用區域，且必須允許存取 SSM 端點。
+ UniqueId

  類型：字串

  預設：{{ automation:EXECUTION\_ID }}

  描述：（選用） 自動化的唯一識別符。

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。

建議執行自動化的使用者連接 **AmazonSSMAutomationRole (AmazonSSMAutomationRole)** IAM 受管政策。除了該政策，使用者必須擁有：

------
#### [ 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`以部署 EC2Rescue CloudFormation 堆疊

   1. （建立新的 VPC) - 如果 \*SubnetId = CreateNewVPC\*，則執行 `aws:createStack`以部署 EC2Rescue CloudFormation 堆疊

   1. (使用自訂子網路) - 所有其他情況：

      `aws:assertAwsResourceProperty` - 檢查提供的子網路與提供的執行個體位於相同的可用區域

      `aws:createStack` - 部署 EC2Rescue CloudFormation 堆疊

1. `aws:invokeLambdaFunction` - 執行額外的輸入驗證

1. `aws:executeAwsApi` - 更新 EC2Rescue CloudFormation 堆疊以建立 EC2Rescue 協助程式執行個體

1. `aws:waitForAwsResourceProperty` - 等待 EC2Rescue CloudFormation 堆疊更新完成

1. `aws:executeAwsApi` - 描述 EC2Rescue CloudFormation 堆疊輸出以取得 EC2Rescue 協助程式執行個體 ID

1. `aws:waitForAwsResourceProperty` - 等待 EC2Rescue 協助程式執行個體成為受管執行個體

1. `aws:changeInstanceState` - 停止提供的執行個體

1. `aws:changeInstanceState` - 停止提供的執行個體

1. `aws:changeInstanceState` - 強制停止提供的執行個體

1. `aws:assertAwsResourceProperty` - 檢查 CreatePreEC2RescueBackup 輸入值

   1. （建立 pre-EC2Rescue 備份） - 如果 \*CreatePreEC2RescueBackup = true\*

   1. `aws:executeAwsApi` - 建立所提供執行個體的 AMI 備份

   1. `aws:createTags` - 標記 AMI 備份

1. `aws:runCommand` - 在 EC2Rescue 協助程式執行個體上安裝 EC2Rescue 

1. `aws:executeAwsApi` - 從提供的執行個體分離根磁碟區

1. `aws:assertAwsResourceProperty` - 檢查提供的執行個體平台

   1. (執行個體為 Windows)：

      `aws:executeAwsApi` - 將根磁碟區連接至 EC2Rescue 協助程式執行個體，做為 \*xvdf\*

      `aws:sleep` - 休眠 10 秒

      `aws:runCommand` - 在 Powershell 中執行提供的離線指令碼

   1. (執行個體為 Linux)：

      `aws:executeAwsApi` - 將根磁碟區以 \*/dev/sdf\* 的形式連接至 EC2Rescue 協助程式執行個體

      `aws:sleep` - 休眠 10 秒

      `aws:runCommand` - 在 Bash 中執行提供的離線指令碼

1. `aws:changeInstanceState` - 停止 EC2Rescue 協助程式執行個體

1. `aws:changeInstanceState` - 強制停止 EC2Rescue 協助程式執行個體

1. `aws:executeAwsApi` - 從 EC2Rescue 協助程式執行個體分離根磁碟區

1. `aws:executeAwsApi` - 將根磁碟區連接至提供的執行個體

1. `aws:assertAwsResourceProperty` - 檢查 CreatePostEC2RescueBackup 輸入值

   1. （建立 post-EC2Rescue 備份） - 如果 \*CreatePostEC2RescueBackup = true\*

   1. `aws:executeAwsApi` - 建立所提供執行個體的 AMI 備份

   1. `aws:createTags` - 標記 AMI 備份

1. `aws:executeAwsApi` - 還原所提供執行個體根磁碟區的終止時初始刪除狀態

1. `aws:changeInstanceState` - 還原所提供執行個體的初始狀態 （執行中/已停止）

1. `aws:deleteStack` - 刪除 EC2Rescue CloudFormation 堆疊

 **輸出** 

runScriptForLinux.Output

runScriptForWindows.Output

preScriptBackup.ImageId

postScriptBackup.ImageId