AWSSupport-StartEC2RescueWorkflow - AWS Systems Manager 自動化 Runbook 參考

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

AWSSupport-StartEC2RescueWorkflow

Description

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

執行此自動化 (主控台)

重要

此自動化不支援從 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:

變數 描述 範例值

$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︰

變數 描述 範例值

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 受管政策。除了該政策,使用者必須擁有:

{ "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" } ] }

文件步驟

  1. aws:executeAwsApi - 描述提供的執行個體

  2. aws:executeAwsApi - 描述提供的執行個體根磁碟區

  3. aws:assertAwsResourceProperty - 檢查根磁碟區裝置類型是否為 EBS

  4. aws:assertAwsResourceProperty - 檢查根磁碟區是否未加密

  5. aws:assertAwsResourceProperty - 檢查提供子網路 ID

    1. (使用目前的執行個體子網路) - 如果 *SubnetId = SelectedInstanceSubnet*,則執行 aws:createStack以部署 EC2Rescue CloudFormation 堆疊

    2. (建立新的 VPC) - 如果 *SubnetId = CreateNewVPC*,則執行 aws:createStack以部署 EC2Rescue CloudFormation 堆疊

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

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

      aws:createStack - 部署 EC2Rescue CloudFormation 堆疊

  6. aws:invokeLambdaFunction - 執行其他輸入驗證

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

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

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

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

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

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

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

  14. aws:assertAwsResourceProperty - 檢查 CreatePreEC2RescueBackup 輸入值

    1. (建立 pre-EC2Rescue 備份) - 如果 *CreatePreEC2RescueBackup = true*

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

    3. aws:createTags - 標記 AMI 備份

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

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

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

    1. (執行個體為 Windows):

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

      aws:sleep - 休眠 10 秒

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

    2. (執行個體為 Linux):

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

      aws:sleep - 休眠 10 秒

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

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

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

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

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

  22. aws:assertAwsResourceProperty - 檢查 CreatePostEC2RescueBackup 輸入值

    1. (建立 post-EC2Rescue 備份) - 如果 *CreatePostEC2RescueBackup = true*

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

    3. aws:createTags - 標記 AMI 備份

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

  24. aws:changeInstanceState - 還原所提供執行個體的初始狀態 (執行中/已停止)

  25. aws:deleteStack - 刪除 EC2Rescue CloudFormation 堆疊

輸出

runScriptForLinux.Output

runScriptForWindows.Output

preScriptBackup.ImageId

postScriptBackup.ImageId