

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

# `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 | 範例值 | 
| --- | --- | --- | 
|  \$1env:EC2RESCUE\$1ACCOUNT\$1ID  |  \$1\$1 global:ACCOUNT\$1ID \$1\$1  |  123456789012  | 
|  \$1env:EC2RESCUE\$1DATE  |  \$1\$1 global:DATE \$1\$1  |  2018-09-07  | 
|  \$1env:EC2RESCUE\$1DATE\$1TIME  |  \$1\$1 global:DATE\$1TIME \$1\$1  |  2018-09-07\$118.09.59  | 
|  \$1env:EC2RESCUE\$1EC2RW\$1DIR  |  適用於 Windows 安裝路徑的 EC2Rescue  |  C:\$1Program Files\$1Amazon\$1EC2Rescue  | 
|  \$1env:EC2RESCUE\$1EC2RW\$1DIR  |  適用於 Windows 安裝路徑的 EC2Rescue  |  C:\$1Program Files\$1Amazon\$1EC2Rescue  | 
|  \$1env:EC2RESCUE\$1EXECUTION\$1ID  |  \$1\$1 automation:EXECUTION\$1ID \$1\$1  |  7ef8008e-219b-4aca-8bb5-65e2e898e20b  | 
|  \$1env:EC2RESCUE\$1OFFLINE\$1CURRENT\$1CONTROL\$1SET  |  離線 Windows 目前控制集路徑  |  `HKLM:\AWSTempSystem\ControlSet001`  | 
|  \$1env:EC2RESCUE\$1OFFLINE\$1DRIVE  |  離線 Windows 磁碟機字母  |  D:\$1  | 
|  \$1env:EC2RESCUE\$1OFFLINE\$1EBS\$1DEVICE  |  離線根磁碟區 EBS 裝置  |  xvdf  | 
|  \$1env:EC2RESCUE\$1OFFLINE\$1KERNEL\$1VER  |  離線 Windows 核心版本  |  6.1.7601.24214  | 
|  \$1env:EC2RESCUE\$1OFFLINE\$1OS\$1ARCHITECTURE  |  離線 Windows 架構  |  AMD64  | 
|  \$1env:EC2RESCUE\$1OFFLINE\$1OS\$1CAPTION  |  離線 Windows 字幕  |  Windows Server 2008 R2 Datacenter  | 
|  \$1env:EC2RESCUE\$1OFFLINE\$1OS\$1TYPE  |  離線 Windows 作業系統類型  |  Server  | 
|  \$1env:EC2RESCUE\$1OFFLINE\$1PROGRAM\$1FILES\$1DIR  |  離線 Windows 程式檔案目錄路徑  |  D:\$1Program Files  | 
|  \$1env:EC2RESCUE\$1OFFLINE\$1PROGRAM\$1FILES\$1X86\$1DIR  |  離線 Windows 程式檔案 x86 目錄路徑  |  D:\$1Program Files (x86)  | 
|  \$1env:EC2RESCUE\$1OFFLINE\$1REGISTRY\$1DIR  |  離線 Windows 登錄檔目錄路徑  |  D:\$1Windows\$1System32\$1config  | 
|  \$1env:EC2RESCUE\$1OFFLINE\$1SYSTEM\$1ROOT  |  離線 Windows 系統根目錄路徑  |  D:\$1Windows  | 
|  \$1env:EC2RESCUE\$1REGION  |  \$1\$1 global:REGION \$1\$1  |  us-west-1  | 
|  \$1env:EC2RESCUE\$1S3\$1BUCKET  |  \$1\$1 S3BucketName \$1\$1  |  amzn-s3-demo-bucket  | 
|  \$1env:EC2RESCUE\$1S3\$1PREFIX  |  \$1\$1 S3Prefix \$1\$1  |  myprefix/  | 
|  \$1env:EC2RESCUE\$1SOURCE\$1INSTANCE  |  \$1\$1 InstanceId \$1\$1  |  i-abcdefgh123456789  | 
|  \$1script:EC2RESCUE\$1OFFLINE\$1WINDOWS\$1INSTALL  |  離線 Windows 安裝中繼資料  |  客戶 Powershell 物件  | 

Linux︰


****  

| 變數 | Description | 範例值 | 
| --- | --- | --- | 
|  EC2RESCUE\$1ACCOUNT\$1ID  |  \$1\$1 global:ACCOUNT\$1ID \$1\$1  |  123456789012  | 
|  EC2RESCUE\$1DATE  |  \$1\$1 global:DATE \$1\$1  |  2018-09-07  | 
|  EC2RESCUE\$1DATE\$1TIME  |  \$1\$1 global:DATE\$1TIME \$1\$1  |  2018-09-07\$118.09.59  | 
|  EC2RESCUE\$1EC2RL\$1DIR  |  適用於 Linux 安裝路徑的 EC2Rescue  |  /usr/local/ec2rl-1.1.3  | 
|  EC2RESCUE\$1EXECUTION\$1ID  |  \$1\$1 automation:EXECUTION\$1ID \$1\$1  |  7ef8008e-219b-4aca-8bb5-65e2e898e20b  | 
|  EC2RESCUE\$1OFFLINE\$1DEVICE  |  離線裝置名稱  |  /dev/xvdf1  | 
|  EC2RESCUE\$1OFFLINE\$1EBS\$1DEVICE  |  離線根磁碟區 EBS 裝置  |  /dev/sdf  | 
|  EC2RESCUE\$1OFFLINE\$1SYSTEM\$1ROOT  |  離線根磁碟區掛載點  |  /mnt/mount  | 
|  EC2RESCUE\$1PYTHON  |  Python 版本  |  python2.7  | 
|  EC2RESCUE\$1REGION  |  \$1\$1 global:REGION \$1\$1  |  us-west-1  | 
|  EC2RESCUE\$1S3\$1BUCKET  |  \$1\$1 S3BucketName \$1\$1  |  amzn-s3-demo-bucket  | 
|  EC2RESCUE\$1S3\$1PREFIX  |  \$1\$1 S3Prefix \$1\$1  |  myprefix/  | 
|  EC2RESCUE\$1SOURCE\$1INSTANCE  |  \$1\$1 InstanceId \$1\$1  |  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 \$1 false

  預設：false

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

  類型：字串

  有效值：true \$1 false

  預設：false

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

  類型：字串

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

  類型：字串

  預設：\$1\$1 automation:EXECUTION\$1ID \$1\$1

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

**必要的 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. （使用目前的執行個體子網路） - 如果 \$1SubnetId = SelectedInstanceSubnet\$1，則執行 `aws:createStack`以部署 EC2Rescue CloudFormation 堆疊

   1. （建立新的 VPC) - 如果 \$1SubnetId = CreateNewVPC\$1，則執行 `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 備份） - 如果 \$1CreatePreEC2RescueBackup = true\$1

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

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

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

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

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

   1. (執行個體為 Windows)：

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

      `aws:sleep` - 休眠 10 秒

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

   1. (執行個體為 Linux)：

      `aws:executeAwsApi` - 將根磁碟區以 \$1/dev/sdf\$1 的形式連接至 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 備份） - 如果 \$1CreatePostEC2RescueBackup = true\$1

   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