對應自動化的目標 - AWS Systems Manager

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

對應自動化的目標

使用 Targets 參數迅速定義自動化以哪些資源為目標。例如,如果您想要執行重新啟動受管執行個體的自動化,則您可以透過使用參數指定 Amazon Elastic Compute Cloud (AmazonEC2) 標籤,而不是在主控台中手動選取Targets數十個執行個體或在命令中輸入執行個體。IDs

當您執行使用目標的自動化操作時, AWS Systems Manager 會為每個目標建立子項自動化。例如,如果您透過指定標籤以 Amazon 彈性區塊存放區 (AmazonEBS) 磁碟區為目標,而這些標籤解析為 100 個 Amazon EBS 磁碟區,則 Systems Manager 會建立 100 個子系自動化。所有子自動化達到最終狀態時,父自動化就會完成。

注意

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

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

將標籤設為目標

您可以指定單一標籤做為自動化目標。許多 AWS 資源支援標籤,包括 Amazon 彈性運算雲端 (AmazonEC2) 和 Amazon Relational Database Service 服務 (AmazonRDS) 執行個體、亞馬遜彈性區塊存放區 (AmazonEBS) 磁碟區和快照、Resource Groups 和 Amazon 簡單儲存服務 (Amazon S3) 儲存貯體,僅舉幾例。您可以透過定位標籤來快速對 AWS 資源執行自動化。標籤是一種索引鍵/值組,例如 Operating_System:Linux 或 Department:Finance。如果您將特定名稱指派到資源,則您也可以使用「Name」這個詞做為索引鍵,以資源的名稱做為值。

當您指定標籤做為自動化的目標,您也要指定目標參數。目標參數會使用 TargetParameterName 選項。藉由選擇目標參數,您就會定義自動化執行的資源類型。您以標籤指定的目標參數必須是在 Runbook 中定義的有效參數。例如,如果您想要使用標籤來鎖定數十EC2個執行個體,請選擇目InstanceId標參數。選擇此參數後,您就會將執行個體定義為自動化的資源類型。建立自訂執行手冊時,必須將目標類型指定為 /AWS::EC2::Instance 以確保僅使用執行個體。否則,具有相同標籤的所有資源都將會成為目標。把帶有標籤的執行個體設為目標時,可能會包括已終止的執行個體。

下列螢幕擷取畫面會使用 AWS-DetachEBSVolume Runbook。邏輯目標參數為 VolumeId

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

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

重要

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

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

以下是一些使用標籤來定位資源的範例 AWS CLI 命令。

範例 1:使用鍵值對鎖定標籤以重新啟動 Amazon EC2 執行個體

此範例會重新啟動所有標記為「部門」金鑰且值為的 Amazon EC2 執行個體HumanResources。目標參數使用工作流程簿中的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 名稱為 P atchedAMIs。此 Resource Group 包括一份清單,有 25 個定期修補的 Windows Amazon Machine Images (AMIs)。如果您執行使用 AWS-CreateManagedWindowsInstance Runbook 的自動化並以此 Resource Group 為目標,則 Systems Manager 會為 25 個 AMIs 各建立一個子自動化。這表示,透過鎖定 P atchedAMIs 資源群組,自動化會從修補AMIs的清單中建立 25 個執行個體。所有子自動化完成處理或達到最終狀態時,父自動化就會完成。

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

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 參數的值為目標,則 Systems Manager 會針對每個指定的執行個體 ID 值執行子自動化。當自動化完成執行每個指定的執行個體,或是自動化失敗,父自動化就會完成。您最多可將 50 個參數值設為目標。

下列範例使用 AWS-CreateImage Runbook。指定的目標參數名稱為InstanceId。密鑰使用ParameterValues。這些值是兩個 Amazon EC2 實例IDs。此命令會為每個執行個體建立一個自動化,並從每個執行個體產生一個 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 選項指定多個參數值:替換每個 example resource placeholder 使用您自己的信息。

aws ssm start-automation-execution \ --document-name runbook name \ --target-maps “parameter=value, parameter 2=value, parameter 3=value” “parameter 4=value, parameter 5=value, parameter 6=value

如果您要為TargetMaps選項輸入 50 個以上的參數值,請使用下列JSON格式在檔案中指定值。在提供多個參數值時,使用JSON檔案也可以提高可讀性。

[ {“parameter”: "value", “parameter 2”: "value", “parameter 3”: "value"}, {“parameter 4”: "value", “parameter 5”: "value", "parameter 6": "value"} ]

使用 .json 副檔名儲存檔案。您可以使用下列命令來呼叫檔案:替換每個 example resource placeholder 使用您自己的信息。

aws ssm start-automation-execution \ --document-name runbook name \ –-parameters input parameters \ --target-maps path to file/file name.json

只要您有從儲存貯體讀取資料的許可,您也可以從 Amazon Simple Storage Service (Amazon S3) 儲存貯體下載檔案。使用以下命令格式。替換每個 example resource placeholder 使用您自己的信息。

aws ssm start-automation-execution \ --document-name runbook name \ --target-maps http://amzn-s3-demo-bucket.s3.amazonaws.com/file_name.json

以下範例案例可協助您了解 TargetMaps 選項。在這個案例中,使用者想要從不同類型建立不同類型的 Amazon EC2 執行個體AMIs。若要執行這項工作,使用者會建立名為 AMI _Testine 的執行手冊。此 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"] } ]

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

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

定位所有 Amazon EC2 實例

您可以在目前的所有 Amazon EC2 執行個體上執行自動化, AWS 帳戶 並 AWS 區域 選擇「目標」清單中的「所有執行個體」。例如,如果您想要重新啟動所有 Amazon EC2 執行個體 AWS 帳戶 和目前執行個體 AWS 區域,您可以選擇 AWS-RestartEC2Instance runbook,然後從 [目標] 清單中選擇 [所有執行個體]。

針對一個手冊的所有 EC2 Amazon 實例

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