關於目標 - AWS Systems Manager

關於目標

使用 Targets 參數迅速定義機群中的哪些資源可以執行自動化。例如,假設您想要執行自動化以重新啟動受管執行個體,您可以使用 Targets 參數指定 Amazon Elastic Compute Cloud (Amazon EC2) 標籤,以選定執行個體作為目標,而不必手動在主控台選擇或在命令中輸入數十個執行個體 ID。

當您執行使用目標的自動化,AWS Systems Manager 會為每個目標建立子自動化。例如,如果您透過指定標籤來設定目標 Amazon Elastic Block Store (Amazon EBS) 磁碟區,以及這些標籤解析為 100 個 Amazon EBS 磁碟區,則 Systems Manager 會建立 100 個子自動化。所有子自動化達到最終狀態時,父自動化就會完成。

注意

您在執行時間指定的 input parameters (無論是於主控台的 Input parameters (輸入參數) 部分或使用命令列的 parameters 選項),都會自動由所有的子自動化處理。

您可,使用標籤、Resource Groups 和參數值將自動化的資源設為目標。此外,您可以使用 TargetMaps 選項將命令列或檔案的多個參數值設為目標。以下部分會分別詳細說明這些目標設定選項。

將標籤設為目標

許多 AWS 資源支援標籤,包括 Amazon Elastic Compute Cloud (Amazon EC2) 和 Amazon Relational Database Service (Amazon RDS) 執行個體、Amazon Elastic Block Store (Amazon EBS) 磁碟區和快照、Resource Groups 和 Amazon Simple Storage Service (Amazon S3) 儲存貯體等。您可以藉由將標籤設為目標在 AWS 資源上迅速執行自動化。標籤是一種索引鍵/值組,例如 Operating_System-Linux 或 Department-Finance。如果您將特定名稱指派到資源,則您也可以使用「Name」這個詞做為索引鍵,以資源的名稱做為值。

當您指定標籤做為自動化的目標,您也要指定目標參數。目標參數會使用 TargetParameterName 選項。藉由選擇目標參數,您就會定義自動化執行的資源類型。您以標籤指定的目標參數必須是在 Runbook 中定義的有效參數。例如,假設您想要使用標籤將數十個 EC2 執行個體設為目標,請選擇 InstanceId 目標參數。選擇此參數後,您就會將執行個體定義為自動化的資源類型。此外,在建立自訂 Runbook 時,您可以指定 Target type (目標類型)作為 /AWS::EC2::Instance 以確保僅使用執行個體。下列螢幕擷取畫面會使用 AWS-DetachEBSVolume Runbook。邏輯目標參數為 VolumeId


                            使用標籤作為 Systems Manager Automation 的目標

AWS-DetachEBSVolume Runbook 還包含名為 Target type (目標類型) 的特殊屬性,設定為 /AWS::EC2::Volume。這表示如果標籤鍵對 Finance-TestEnv 傳回不同類型的資源 (例如 EC2 執行個體、Amazon EBS 磁碟區、Amazon EBS 快照),則只會使用 Amazon EBS 磁碟區。

重要

目標參數名稱都區分大小寫。如果您使用 AWS Command Line Interface (AWS CLI) 或 AWS Tools for Windows PowerShell 執行自動化,則您輸入的目標參數名稱必須與 Runbook 中所定義的一模一樣。如果不這麼做,系統會傳回 InvalidAutomationExecutionParametersException 錯誤。您可以使用 DescribeDocument API 操作查看特定 Runbook 中可用目標參數的資訊。以下是範例 AWS CLI 命令,該命令提供有關 AWS-DeleteSnapshot 文件的資訊。

aws ssm describe-document \ --name AWS-DeleteSnapshot

以下為使用標籤將資源設為目標的一些 AWS CLI 命令範例。

範例 1:使用鍵值組將標籤設為目標以重新啟動 Amazon EC2 執行個體

此範例會重新啟動所有以 Department 為索引鍵和 HumanResources 為值標記的 Amazon EC2 執行個體。目標參數使用 Runbook 的 InstanceId 參數。此範例使用其他參數,藉由自動化服務角色 (也稱為擔任角色) 執行自動化。

aws ssm start-automation-execution \ --document-name AWS-RestartEC2Instance \ --targets Key=tag:Department,Values=HumanResources \ --target-parameter-name InstanceId \ --parameters "AutomationAssumeRole=arn:aws:iam::111122223333:role/AutomationServiceRole"

範例 2:使用索引鍵/值組來設定目標標籤以刪除 Amazon EBS 快照

以下範例使用 AWS-DeleteSnapshot Runbook 刪除所有索引鍵為 Name 且值為 January2018Backups 的快照。目標參數使用 VolumeId 參數。

aws ssm start-automation-execution \ --document-name AWS-DeleteSnapshot \ --targets Key=tag:Name,Values=January2018Backups \ --target-parameter-name VolumeId

將 AWS Resource Groups 設為目標

您可以指定單一 AWS 資源群組作為自動化的目標。Systems Manager 會針對目標 Resource Group 中的每個物件建立子系自動化。

例如,假設您的一個 Resource Groups 名稱為 PatchedAMIs。此 Resource Group 包括一份清單,有 25 個定期修補的 Windows Amazon Machine Images (AMIs)。如果您執行使用 AWS-CreateManagedWindowsInstance Runbook 的自動化並以此 Resource Group 為目標,則 Systems Manager 會為 25 個 AMIs 各建立一個子自動化。這表示以 PatchedAMIs 資源群組為目標後,自動化就會從已修補 AMIs 的清單建立 25 個執行個體。所有子自動化完成處理或達到最終狀態時,父自動化就會完成。

以下 AWS CLI 命令適用於 PatchAMIs 資源群組範例。命令會針對 --target-parameter-name 選項採用 AmiId 參數。命令不會包括其他參數以定義要從各個 AMI 建立哪種類型的執行個體。AWS-CreateManagedWindowsInstance Runbook 文件預設為 t2.medium 執行個體類型,所以此命令會為 Windows Server 建立 25 個 t2.medium 的 Amazon EC2 執行個體。

aws ssm start-automation-execution \ --document-name AWS-CreateManagedWindowsInstance \ --targets Key=ResourceGroup,Values=PatchedAMIs \ --target-parameter-name AmiId

以下主控台範例使用稱為 t2-micro-instances 的資源群組。


                            使用 Systems Manager 自動化鎖定 AWS 資源群組

將參數值設為目標

您也可以將參數值設為目標。輸入 ParameterValues 做為索引鍵,接著在您想要執行自動化的地方輸入特定資源值。如果您指定多個值,Systems Manager 會於每個指定的值執行子自動化。

例如,假設您的 Runbook 包括 InstanceID 參數。如果您在執行自動化時以 InstanceID (InstanceID) 參數的值為目標,則 Systems Manager 會針對每個指定的執行個體 ID 值執行子自動化。當自動化完成執行每個指定的執行個體,或是自動化失敗,父自動化就會完成。您最多可將 50 個參數值設為目標。

下列範例使用 AWS-CreateImage Runbook。指定的目標參數名稱為 InstanceId。索引鍵使用 ParameterValues。值為兩個 Amazon EC2 執行個體 ID。此命令會為每個執行個體建立一個自動化,並從每個執行個體產生一個 AMI。

aws ssm start-automation-execution --document-name AWS-CreateImage \ --target-parameter-name InstanceId \ --targets Key=ParameterValues,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE
注意

AutomationAssumeRole 不是有效的參數。當執行自動化,且這些工作流程會設定目標參數值時,請勿選擇此項目。

將參數值對應設為目標

TargetMaps 選項可讓您更輕易將 ParameterValues 設為目標。您可以使用命令列的 TargetMaps 輸入一系列參數值。您可以在命令列指定最多 50 個參數值。如果想要執行命令以指定超過 50 個參數值,您可以在 JSON 檔案中輸入值。這樣您就可以從命令列呼叫檔案。

注意

主控台不支援 TargetMaps 選項。

使用以下格式,藉由命令中的 TargetMaps 選項指定多個參數值:

aws ssm start-automation-execution \ -—document-name name_of_runbook \ --target-maps “parameterA=parameterA1, parameterB=parameterB1, parameterC=parameterC1” “parameterA=parameterA2, parameterB=parameterB2, parameterC=parameterC2” “parameterA=parameterA3, parameterB=parameterB3, parameterC=parameterC3

如果您想要在 TargetMaps 選項輸入超過 50 個參數值,請使用以下 JSON 格式在檔案中指定值。提供多個參數值時,使用 JSON 檔案也能提升可讀性。

[ {“parameterA”:”parameterValueA1”, “parameterB”:”parameterValueB1”, “parameterC”:”parameterValueC1”}, {“parameterA”:”parameterValueA2”, “parameterB”:”parameterValueB2”, “parameterC”:”parameterValueC2”}, {“parameterA”:”parameterValueA3”, “parameterB”:”parameterValueB3”, “parameterC”:”parameterValueC3”} ]

使用 .json 副檔名儲存檔案。您可以使用下列命令來呼叫檔案:

aws ssm start-automation-execution \ --document-name name_of_runbook \ –-parameters one_or_more_input_parameters \ --target-maps full_path_to_file/file_name.json

只要您有從儲存貯體讀取資料的許可,您也可以從 Amazon Simple Storage Service (Amazon S3) 儲存貯體下載檔案。使用以下命令格式。

aws ssm start-automation-execution \ --document-name name_of_runbook \ --target-maps http://DOC-EXAMPLE-BUCKET.s3.amazonaws.com/file_name.json

以下範例案例可協助您了解 TargetMaps 選項。在此案例中,使用者想要從不同的 AMIs 建立不同類型的 Amazon EC2 執行個體。為執行此任務,使用者建立了名為 AMI_Testing 的 Runbook。此 Runbook 定義了兩個輸入參數:instanceTypeimageId

{ "description": "AMI Testing", "schemaVersion": "0.3", "assumeRole": "{{assumeRole}}", "parameters": { "assumeRole": { "type": "String", "description": "Role under which to run the automation", "default": "" }, "instanceType": { "type": "String", "description": "Type of EC2 Instance to launch for this test" }, "imageId": { "type": "String", "description": "Source AMI id from which to run instance" } }, "mainSteps": [ { "name": "runInstances", "action": "aws:runInstances", "maxAttempts": 1, "onFailure": "Abort", "inputs": { "ImageId": "{{imageId}}", "InstanceType": "{{instanceType}}", "MinInstanceCount": 1, "MaxInstanceCount": 1 } } ], "outputs": [ "runInstances.InstanceIds" ] }

使用者接著在名稱為 AMI_instance_types.json 的檔案中指定以下目標參數值。

[ { "instanceType" : ["t2.micro"], "imageId" : ["ami-b70554c8"] }, { "instanceType" : ["t2.small"], "imageId" : ["ami-b70554c8"] }, { "instanceType" : ["t2.medium"], "imageId" : ["ami-cfe4b2b0"] }, { "instanceType" : ["t2.medium"], "imageId" : ["ami-cfe4b2b0"] }, { "instanceType" : ["t2.medium"], "imageId" : ["ami-cfe4b2b0"] } ]

使用者可以執行以下命令,以執行自動化並建立 AMI_instance_types.json 中定義的五個 EC2 執行個體:

aws ssm start-automation-execution \ --document-name AMI_Testing \ --target-parameter-name imageId \ --target-maps file:///home/TestUser/workspace/runinstances/AMI_instance_types.json

將所有執行個體設為目標

透過選擇 Targets (目標) 清單中的 All instances (所有執行個體),您可以在當前 AWS 帳戶 和 AWS 區域 中對所有受管執行個體執行自動化。例如,如果您想要重新啟動 AWS 帳戶 和當前 AWS 區域 中的所有受管執行個體,則您可以選擇 AWS-RestartEC2Instance Runbook,然後選擇 Targets (目標) 清單的 All instances (所有執行個體)。


                            鎖定 Runbook 的所有執行個體

在您選擇 All instances (所有執行個體) 後,Systems Manager 會填入帶有星號 (*) 的 Instance (執行個體) 欄位,且無法對欄位進行變更 (欄位會變灰)。Systems Manager 也會讓 Input parameters (輸入參數) 欄位中的 InstanceId (InstanceId) 不可變更。如果您選擇鎖定所有執行個體,則將這些欄位變得無法變更會是預期的行為。