本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 目前控制集路徑 |
|
$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" } ] }
文件步驟
-
aws:executeAwsApi
- 描述提供的執行個體 -
aws:executeAwsApi
- 描述提供的執行個體根磁碟區 -
aws:assertAwsResourceProperty
- 檢查根磁碟區裝置類型是否為 EBS -
aws:assertAwsResourceProperty
- 檢查根磁碟區是否未加密 -
aws:assertAwsResourceProperty
- 檢查提供子網路 ID-
(使用目前的執行個體子網路) - 如果 *SubnetId = SelectedInstanceSubnet*,則執行
aws:createStack
以部署 EC2Rescue CloudFormation 堆疊 -
(建立新的 VPC) - 如果 *SubnetId = CreateNewVPC*,則執行
aws:createStack
以部署 EC2Rescue CloudFormation 堆疊 -
(使用自訂子網路) - 所有其他情況:
aws:assertAwsResourceProperty
- 檢查提供的子網路與提供的執行個體位於相同的可用區域aws:createStack
- 部署 EC2Rescue CloudFormation 堆疊
-
-
aws:invokeLambdaFunction
- 執行其他輸入驗證 -
aws:executeAwsApi
- 更新 EC2Rescue CloudFormation 堆疊以建立 EC2Rescue 協助程式執行個體 -
aws:waitForAwsResourceProperty
- 等待 EC2Rescue CloudFormation 堆疊更新完成 -
aws:executeAwsApi
- 描述 EC2Rescue CloudFormation 堆疊輸出以取得 EC2Rescue 協助程式執行個體 ID -
aws:waitForAwsResourceProperty
- 等待 EC2Rescue 協助程式執行個體成為受管執行個體 -
aws:changeInstanceState
- 停止提供的執行個體 -
aws:changeInstanceState
- 停止提供的執行個體 -
aws:changeInstanceState
- 強制停止提供的執行個體 -
aws:assertAwsResourceProperty
- 檢查 CreatePreEC2RescueBackup 輸入值-
(建立 pre-EC2Rescue 備份) - 如果 *CreatePreEC2RescueBackup = true*
-
aws:executeAwsApi
- 建立所提供執行個體的 AMI 備份 -
aws:createTags
- 標記 AMI 備份
-
-
aws:runCommand
- 在 EC2Rescue 協助程式執行個體上安裝 EC2Rescue -
aws:executeAwsApi
- 從提供的執行個體分離根磁碟區 -
aws:assertAwsResourceProperty
- 檢查提供的執行個體平台-
(執行個體為 Windows):
aws:executeAwsApi
- 將根磁碟區連接至 EC2Rescue 協助程式執行個體,做為 *xvdf*aws:sleep
- 休眠 10 秒aws:runCommand
- 在 Powershell 中執行提供的離線指令碼 -
(執行個體為 Linux):
aws:executeAwsApi
- 將根磁碟區以 */dev/sdf* 的形式連接至 EC2Rescue 協助程式執行個體aws:sleep
- 休眠 10 秒aws:runCommand
- 在 Bash 中執行提供的離線指令碼
-
-
aws:changeInstanceState
- 停止 EC2Rescue 協助程式執行個體 -
aws:changeInstanceState
- 強制停止 EC2Rescue 協助程式執行個體 -
aws:executeAwsApi
- 從 EC2Rescue 協助程式執行個體分離根磁碟區 -
aws:executeAwsApi
- 將根磁碟區連接至提供的執行個體 -
aws:assertAwsResourceProperty
- 檢查 CreatePostEC2RescueBackup 輸入值-
(建立 post-EC2Rescue 備份) - 如果 *CreatePostEC2RescueBackup = true*
-
aws:executeAwsApi
- 建立所提供執行個體的 AMI 備份 -
aws:createTags
- 標記 AMI 備份
-
-
aws:executeAwsApi
- 還原所提供執行個體根磁碟區的終止時初始刪除狀態 -
aws:changeInstanceState
- 還原所提供執行個體的初始狀態 (執行中/已停止) -
aws:deleteStack
- 刪除 EC2Rescue CloudFormation 堆疊
輸出
runScriptForLinux.Output
runScriptForWindows.Output
preScriptBackup.ImageId
postScriptBackup.ImageId