建立關聯 - AWS Systems Manager

建立關聯

下列程序會說明如何使用 AWS Systems Manager 主控台、AWS Command Line Interface (AWS CLI) 和 AWS Tools for PowerShell 來建立 State Manager 關聯。State Manager 是 AWS Systems Manager 的一個功能。

重要

下列程序說明如何建立使用 CommandPolicy 文件的關聯。如需建立使用 Automation Runbook 的關聯的相關資訊,請參閱 使用 State Manager 以根據觸發執行自動化

建立 State Manager 關聯時,依預設,系統會立即在指定的執行個體或目標上執行該關聯。在初次執行後,關聯會根據您定義的排程和以下規則,依間隔執行:

  • State Manager 嘗試於間隔期間在所有已指定或設為目標的執行個體上執行關聯。

  • 如果未在間隔期間執行關聯 (例如,因為並行值限制了一次所能處理關聯的執行個體數),則State Manager會嘗試在下一個間隔期間執行關聯。

  • State Manager會記錄所有略過的間隔的歷程記錄。您可以在 Execution History (執行歷程記錄) 標記檢視歷程記錄。

注意

如果您不希望在建立關聯之後立即執行關聯,可在 Systems Manager 主控台中選擇 Apply association only at the next specified Cron interval (僅在下一個指定的 Cron 間隔套用關聯)。

下列程序說明如何在建立關聯時使用目標和速率控制。如需這些功能的詳細資訊,請參閱關於 State Manager 關聯中的目標和速率控制

警告

具有許可而能夠建立以 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體資源群組為目標的關聯的 AWS Identity and Access Management (IAM) 使用者、群組或角色,會自動擁有群組中所有執行個體的根層級控制權。只有受信任的管理員才能建立關聯。

建立關聯 (主控台)

下列程序說明如何使用 Systems Manager 主控台來建立 State Manager 關聯。

建立 State Manager 關聯

  1. 開啟位於 AWS Systems Managerhttps://console.aws.amazon.com/systems-manager/ 的 主控台。https://console.aws.amazon.com/systems-manager/

  2. 在導覽窗格中,選擇 State Manager

    -或-

    如果 AWS Systems Manager 首頁先開啟,選擇選單圖示 ( ) 以開啟導覽窗格,然後選擇 State Manager

  3. 選擇 Create association (建立關聯)

  4. Name (名稱) 欄位中指定名稱。此為選用操作,但建議您採用。名稱可協助您記住關聯的目的。例如,您可以使用 Automatically_update_AWSPVDrivers_on_us-west-2_instances 來指定具有此目的之關聯。名稱中不得使用空格。

  5. Document (文件) 清單中,選擇文件名稱旁的選項。請注意文件類型。此程序適用於 CommandPolicy 文件。如需建立使用 Automation Runbook 的關聯的相關資訊,請參閱 使用 State Manager 以根據觸發執行自動化

    重要

    如果該文件是從另一個帳戶共用的,則 State Manager 不支援執行使用新版文件的關聯。如果是從另一個帳戶共用的,則 State Manager 一律執行文件的 default 版本,即使 Systems Manager 主控台顯示新版本已處理。如果您想要使用從另一個帳戶共用而來的新版本文件來執行關聯,則必須將文件版本設定為 default

  6. 對於 Parameters (參數),指定所需的輸入參數。

  7. 對於 Targets (目標),請選擇選項。如需使用目標的詳細資訊,請參閱關於 State Manager 關聯中的目標和速率控制

  8. Specify schedule (指定排程) 區段中,選擇 On Schedule (按照排程)No schedule (無排程)。如果您選擇 On Schedule (按照排程),請使用提供的按鈕來為關聯建立 Cron 或 Rate 排程。

    如果您不希望在建立關聯之後立即執行關聯,請選擇 Apply association only at the next specified Cron interval (僅在下一個指定的 Cron 間隔套用關聯)

  9. Advanced options (進階選項) 區段中,使用 Compliance severity (合規嚴重) 選擇關聯的嚴重性等級,並使用 Change Calendars (變更行事曆) 選擇關聯的變更行事曆。

    合規報告會指出關聯狀態合規與否,以及您在這裡指示的嚴重性等級。如需詳細資訊,請參閱 關於State Manager關聯合規

    變更行事曆會決定何時執行關聯。如果行事曆已關閉,則不會套用關聯。如果行事曆處於開啟狀態,則會相應地執行關聯。如需詳細資訊,請參閱 AWS Systems Manager Change Calendar

  10. Rate control (速率控制) 區段中,選擇選項來控制關聯在多個執行個體上的執行方式。如需使用速率控制的詳細資訊,請參閱關於 State Manager 關聯中的目標和速率控制

    Concurrency (並行) 部分,選擇一個選項:

    • 選擇 targets (目標),輸入可以同時執行關聯的目標絕對數量。

    • 選擇 percentage (百分比),輸入可以同時執行關聯的目標集百分比。

    Error threshold (錯誤閾值) 部分,選擇一個選項:

    • 選擇 errors (錯誤),輸入 State Manager 停止在額外目標執行關聯之前允許的錯誤絕對數量。

    • 選擇 percentage (百分比),輸入 State Manager 停止在額外目標執行關聯之前允許的錯誤百分比。

  11. (選用) 針對 Output options (輸出選項),若要將命令輸出儲存至檔案,請選取 Enable writing output to S3 (啟用將輸出寫入 S3) 方塊。在方塊中輸入儲存貯體和字首 (資料夾) 名稱。

    注意

    授予能力以將資料寫入至 S3 儲存貯體的 S3 許可,會是指派給受管節點之執行個體設定檔的許可,而不是執行此任務之 IAM 使用者的許可。如需詳細資訊,請參閱建立適用於 Systems Manager 的 IAM 執行個體設定檔或者建立適用於混合環境的 IAM 服務角色。此外,若指定的 S3 儲存貯體位於不同的 AWS 帳戶 內,請驗證與受管節點相關聯的執行個體設定檔或 IAM 服務角色是否具有寫入該儲存貯體的必要許可。

    以下是開啟關聯的 Amazon Simple Storage Service (Amazon S3) 輸出所需的最低許可。您可以進一步限制對帳戶內個別 IAM 使用者或角色的存取。Amazon EC2 執行個體設定檔至少應擁有具備 AmazonSSMManagedInstanceCore 受管政策和下列內嵌政策的 IAM 角色。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

    如需最低許可,接收匯出的 Amazon Simple Storage Service (Amazon S3) 儲存貯體必須具備 Amazon Simple Storage Service (Amazon S3) 主控台定義的預設設定。如需有關建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體的詳細資訊,請參閱 Amazon Simple Storage Service (Amazon S3) 使用者指南中的建立儲存貯體

  12. 選擇 Create Association (建立關聯)

注意

如果刪除您建立的關聯,關聯將不再在該關聯的任何目標上執行。

建立關聯 (命令列)

以下程序說明如何使用 AWS CLI (Linux 或 Windows) 或 Tools for PowerShell 來建立 State Manager 關聯。本節包含數個示範如何使用目標和速率控制的範例。目標和速率控制允許您將關聯指派給數十個或數百個執行個體,同時控制這些關聯的執行。如需目標和速率控制的詳細資訊,請參閱關於 State Manager 關聯中的目標和速率控制

開始之前

targets 參數是一系列的搜尋條件,使用您指定的 KeyValue 組合將執行個體設為目標。如果您打算使用 targets 參數在數十個或數百個執行個體上建立關聯,請在程序開始之前檢閱下列目標選項。

透過指定 ID 將特定執行個體設為目標

--targets Key=InstanceIds,Values=instance-id-1,instance-id-2,instance-id-3
--targets Key=InstanceIds,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE,i-07782c72faEXAMPLE

透過使用 Amazon EC2 標籤將執行個體設為目標

--targets Key=tag:tag-key,Values=tag-value-1,tag-value-2,tag-value-3
--targets Key=tag:Environment,Values=Development,Test,Pre-production
注意

使用 Amazon EC2 標籤時,您只能使用一個標籤金鑰。如果您要使用多個標籤金鑰將執行個體設為目標,請使用資源群組選項。

使用 AWS Resource Groups 將執行個體設為目標

--targets Key=resource-groups:Name,Values=resource-group-name
--targets Key=resource-groups:Name,Values=WindowsInstancesGroup

將目前 AWS 帳戶 和 AWS 區域 中的所有執行個體設為目標

--targets Key=InstanceIds,Values=*
注意

記下以下資訊。

  • 如果該文件是從另一個帳戶共用的,則 State Manager 不支援執行使用新版文件的關聯。如果是從另一個帳戶共用的,則 State Manager 一律執行文件的 default 版本,即使 Systems Manager 主控台顯示新版本已處理。如果您想要使用從另一個帳戶共用而來的新版本文件來執行關聯,則必須將文件版本設定為 default

  • 在建立關聯時,指定排程的執行時間。使用 Cron 或 Rate 表達式來指定排程。如需 Cron 和 Rate 運算式的詳細資訊,請參閱關聯的 Cron 與 Rate 運算式

建立關聯

  1. 如果您尚未安裝並設定 AWS CLI 或 AWS Tools for PowerShell,請進行相應的操作。

    如需相關資訊,請參閱安裝或升級 AWS 命令列工具

  2. 使用以下格式來建立會建立 State Manager 關聯的命令。

    Linux & macOS
    aws ssm create-association \ --name document_name \ --document-version version_of_document_applied \ --instance-id instances_to_apply_association_on \ --parameters (if any) \ --targets target_options \ --schedule "cron_or_rate_expression" \ --output-location s3_bucket_to_store_output_details \ --association-name association_name \ --max-errors a_number_of_errors_or_a_percentage_of_target_set \ --max-concurrency a_number_of_instances_or_a_percentage_of_target_set \ --compliance-severity severity_level \ --calendar-names change_calendar_names \ --target-locations aws_region_or_account
    Windows
    aws ssm create-association ^ --name document_name ^ --document-version version_of_document_applied ^ --instance-id instances_to_apply_association_on ^ --parameters (if any) ^ --targets target_options ^ --schedule "cron_or_rate_expression" ^ --output-location s3_bucket_to_store_output_details ^ --association-name association_name ^ --max-errors a_number_of_errors_or_a_percentage_of_target_set ^ --max-concurrency a_number_of_instances_or_a_percentage_of_target_set ^ --compliance-severity severity_level ^ --calendar-names change_calendar_names ^ --target-locations aws_region_or_account
    PowerShell
    New-SSMAssociation ` -Name document_name ` -DocumentVersion version_of_document_applied ` -InstanceId instances_to_apply_association_on ` -Parameters (if any) ` -Target target_options ` -ScheduleExpression "cron_or_rate_expression" ` -OutputLocation s3_bucket_to_store_output_details ` -AssociationName association_name ` -MaxError a_number_of_errors_or_a_percentage_of_target_set -MaxConcurrency a_number_of_instances_or_a_percentage_of_target_set ` -ComplianceSeverity severity_level ` -CalendarNames change_calendar_names ` -TargetLocations aws_region_or_account

    以下範例會在加上 "Environment,Linux" 標籤的執行個體上建立關聯。關聯會使用 AWS-UpdateSSMAgent 文件在每週日的上午 2:00 UTC 更新目標執行個體上的 SSM Agent。此關聯在任何指定的時間可在最多 10 個執行個體上同時執行。此外,如果錯誤計數超過 5 個,此關聯會停止在更多執行個體上特定執行間隔的執行。針對合規報告,指派給此關聯的嚴重性等級為中等。

    Linux & macOS
    aws ssm create-association \ --association-name Update_SSM_Agent_Linux \ --targets Key=tag:Environment,Values=Linux \ --name AWS-UpdateSSMAgent \ --compliance-severity "MEDIUM" \ --schedule "cron(0 2 ? * SUN *)" \ --max-errors "5" \ --max-concurrency "10"
    Windows
    aws ssm create-association ^ --association-name Update_SSM_Agent_Linux ^ --targets Key=tag:Environment,Values=Linux ^ --name AWS-UpdateSSMAgent ^ --compliance-severity "MEDIUM" ^ --schedule "cron(0 2 ? * SUN *)" ^ --max-errors "5" ^ --max-concurrency "10"
    PowerShell
    New-SSMAssociation ` -AssociationName Update_SSM_Agent_Linux ` -Name AWS-UpdateSSMAgent ` -Target @{ "Key"="tag:Environment" "Values"="Linux" } ` -ComplianceSeverity MEDIUM ` -ScheduleExpression "cron(0 2 ? * SUN *)" ` -MaxConcurrency 10 ` -MaxError 5

    下列範例會建立關聯,它透過使用 AWS-RunPatchBaseline 文件來掃描執行個體是否錯過修補程式更新。此關聯將 us-east-2 區域中帳戶的所有受管執行個體設為目標。此關聯會指定 Operation 和 RebootOption 參數。

    Linux & macOS
    aws ssm create-association \ --name "AWS-RunPatchBaseline" \ --association-name "ScanningInstancesForMissingUpdate" \ --targets "Key=instanceids,Values=*" \ --parameters "Operation=Scan,RebootOption=NoReboot" \ --region us-east-2
    Windows
    aws ssm create-association ^ --name "AWS-RunPatchBaseline" ^ --association-name "ScanningInstancesForMissingUpdate" ^ --targets "Key=instanceids,Values=*" ^ --parameters "Operation=Scan,RebootOption=NoReboot" ^ --region us-east-2
    PowerShell
    New-SSMAssociation ` -AssociationName ScanningInstancesForMissingUpdate ` -Name AWS-RunPatchBaseline ` -Target @{ "Key"="instanceids" "Values"="*" } ` -Parameters "Operation=Scan,RebootOption=NoReboot" ` -Region us-east-2

    以下範例會透過指定萬用字元值 (*) 來設定目標執行個體 ID。這允許 Systems Manager 在目前 AWS 帳戶 和 AWS 區域 中的所有執行個體上建立關聯。此關聯在任何指定的時間可在最多 10 個執行個體上同時執行。此外,如果錯誤計數超過 5 個,此關聯會停止在更多執行個體上特定執行間隔的執行。針對合規報告,指派給此關聯的嚴重性等級為中等。此關聯會在指定的 Cron 排程執行。它不會在建立關聯之後立即執行。

    Linux & macOS
    aws ssm create-association \ --association-name Update_SSM_Agent_Linux \ --name "AWS-UpdateSSMAgent" \ --targets "Key=instanceids,Values=*" \ --compliance-severity "MEDIUM" \ --schedule "cron(0 2 ? * SUN *)" \ --max-errors "5" \ --max-concurrency "10" \ --apply-only-at-cron-interval
    Windows
    aws ssm create-association ^ --association-name Update_SSM_Agent_Linux ^ --name "AWS-UpdateSSMAgent" ^ --targets "Key=instanceids,Values=*" ^ --compliance-severity "MEDIUM" ^ --schedule "cron(0 2 ? * SUN *)" ^ --max-errors "5" ^ --max-concurrency "10" ^ --apply-only-at-cron-interval
    PowerShell
    New-SSMAssociation ` -AssociationName Update_SSM_Agent_All ` -Name AWS-UpdateSSMAgent ` -Target @{ "Key"="InstanceIds" "Values"="*" } ` -ScheduleExpression "cron(0 2 ? * SUN *)" ` -MaxConcurrency 10 ` -MaxError 5 ` -ComplianceSeverity MEDIUM ` -ApplyOnlyAtCronInterval

    以下範例會在 Resource Groups 中的執行個體上建立關聯。該群組名為「HR-Department」。該關聯使用 AWS-UpdateSSMAgent 文件,在每週日上午 2:00 UTC 更新目標執行個體上的 SSM Agent。此關聯在任何指定的時間可在最多 10 個執行個體上同時執行。此外,如果錯誤計數超過 5 個,此關聯會停止在更多執行個體上特定執行間隔的執行。針對合規報告,指派給此關聯的嚴重性等級為中等。此關聯會在指定的 Cron 排程執行。它不會在建立關聯之後立即執行。

    Linux & macOS
    aws ssm create-association \ --association-name Update_SSM_Agent_Linux \ --targets Key=resource-groups:Name,Values=HR-Department \ --name AWS-UpdateSSMAgent \ --compliance-severity "MEDIUM" \ --schedule "cron(0 2 ? * SUN *)" \ --max-errors "5" \ --max-concurrency "10" \ --apply-only-at-cron-interval
    Windows
    aws ssm create-association ^ --association-name Update_SSM_Agent_Linux ^ --targets Key=resource-groups:Name,Values=HR-Department ^ --name AWS-UpdateSSMAgent ^ --compliance-severity "MEDIUM" ^ --schedule "cron(0 2 ? * SUN *)" ^ --max-errors "5" ^ --max-concurrency "10" ^ --apply-only-at-cron-interval
    PowerShell
    New-SSMAssociation ` -AssociationName Update_SSM_Agent_Linux ` -Name AWS-UpdateSSMAgent ` -Target @{ "Key"="resource-groups:Name" "Values"="HR-Department" } ` -ScheduleExpression "cron(0 2 ? * SUN *)" ` -MaxConcurrency 10 ` -MaxError 5 ` -ComplianceSeverity MEDIUM ` -ApplyOnlyAtCronInterval

    以下範例會建立一個關聯,它在標記有特定執行個體 ID 的執行個體上執行。關聯會使用 SSM Agent 文件,當變更行事曆開啟時在目標執行個體上更新一次 SSM Agent。關聯會在執行時檢查行事曆狀態。如果行事曆在啟動時關閉且關聯只執行一次,則它不會再執行一次,因為關聯執行時段已結束。如果行事曆處於開啟狀態,則會相應地執行關聯。

    注意

    如果您在變更行事曆關閉時,將新執行個體新增至關聯作用的標籤或資源群組,則在變更行事曆開啟後,關聯就會套用至這些執行個體。

    Linux & macOS
    aws ssm create-association \ --association-name CalendarAssociation \ --targets "Key=instanceids,Values=i-0cb2b964d3e14fd9f" \ --name AWS-UpdateSSMAgent \ --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" \ --schedule "rate(1day)"
    Windows
    aws ssm create-association ^ --association-name CalendarAssociation ^ --targets "Key=instanceids,Values=i-0cb2b964d3e14fd9f" ^ --name AWS-UpdateSSMAgent ^ --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" ^ --schedule "rate(1day)"
    PowerShell
    New-SSMAssociation ` -AssociationName CalendarAssociation ` -Target @{ "Key"="tag:instanceids" "Values"="i-0cb2b964d3e14fd9f" } ` -Name AWS-UpdateSSMAgent ` -CalendarNames "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" ` -ScheduleExpression "rate(1day)"

    以下範例會建立一個關聯,它在標記有特定執行個體 ID 的執行個體上執行。關聯會使用 SSM Agent 文件,在每週日的上午 2:00 更新目標執行個體上的 SSM Agent。當變更行事曆開啟時,此關聯只會在指定的 Cron 排程執行。建立關聯時,它會檢查行事曆狀態。如果行事曆已關閉,則不會套用關聯。當套用關聯的間隔在星期日凌晨 2:00 開始時,關聯會檢查行事曆是否已開啟。如果行事曆處於開啟狀態,則會相應地執行關聯。

    注意

    如果您在變更行事曆關閉時,將新執行個體新增至關聯作用的標籤或資源群組,則在變更行事曆開啟後,關聯就會套用至這些執行個體。

    Linux & macOS
    aws ssm create-association \ --association-name MultiCalendarAssociation \ --targets "Key=instanceids,Values=i-0cb2b964d3e14fd9f" \ --name AWS-UpdateSSMAgent \ --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" "arn:aws:ssm:us-east-2:123456789012:document/testCalendar2" \ --schedule "cron(0 2 ? * SUN *)"
    Windows
    aws ssm create-association ^ --association-name MultiCalendarAssociation ^ --targets "Key=instanceids,Values=i-0cb2b964d3e14fd9f" ^ --name AWS-UpdateSSMAgent ^ --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" "arn:aws:ssm:us-east-2:123456789012:document/testCalendar2" ^ --schedule "cron(0 2 ? * SUN *)"
    PowerShell
    New-SSMAssociation ` -AssociationName MultiCalendarAssociation ` -Name AWS-UpdateSSMAgent ` -Target @{ "Key"="tag:instanceids" "Values"="i-0cb2b964d3e14fd9f" } ` -CalendarNames "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" "arn:aws:ssm:us-east-2:123456789012:document/testCalendar2" ` -ScheduleExpression "cron(0 2 ? * SUN *)"
注意

如果刪除您建立的關聯,關聯將不再在該關聯的任何目標上執行。此外,如果您已指定 apply-only-at-cron-interval 參數,則可以重設此選項。若要執行這項操作,請在透過命令列更新關聯時指定 no-apply-only-at-cron-interval 參數。此參數會強制關聯在更新關聯後根據指定的間隔立即執行。