创建关联 - AWS Systems Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建关联

以下过程介绍了如何使用 AWS Systems Manager 控制台、AWS 命令行界面和适用于 PowerShell 的 AWS 工具创建状态管理器关联。

重要

以下过程说明了如何创建使用 CommandPolicy 文档的关联。有关创建使用 Automation 文档的关联的信息,请参阅使用状态管理器运行触发器的自动化

创建 State Manager 关联时,默认情况下,系统将立即在指定的实例或目标上运行该关联。在初始运行后,关联会根据定义的计划和以下规则按周期运行:

  • 关联仅在周期开始时处于在线状态的实例上运行。将跳过离线实例。

  • Status Manager 在间隔期间会尝试在所有指定或目标实例上运行关联。

  • 如果在间隔期间未运行某一关联(例如,由于并发值限制了一次可以处理关联的实例数),State Manager 将尝试在下一个间隔期间运行该关联。

  • 状态管理器记录所有已跳过间隔的历史记录。可在 Execution History (执行历史记录) 选项卡上查看历史记录。

注意

如果您不希望关联在创建后立即运行,则可以选中仅在下一个指定的 Cron 间隔应用关联选项在 Systems Manager 控制台中。

以下过程介绍如何在创建关联时使用目标和速率控制。有关使用这些功能的更多信息,请参阅关于 State Manager 关联中的目标和速率控制

警告

有权创建将 Amazon 弹性计算云 (Amazon EC2) 实例资源组设为目标的关联的 AWS Identity and Access Management (IAM) 用户、组或角色自动具有组中所有实例的根级控制权。应只允许受信任的管理员创建关联。

创建关联(控制台)

以下过程介绍了如何使用 Systems Manager 控制台创建状态管理器关联。

创建状态管理器关联

  1. 以下网址打开 AWS Systems Manager 控制台:https://console.aws.amazon.com/systems-manager/

  2. 在导航窗格中,选择状态管理器,然后选择创建关联

  3. Name (名称) 字段中指定名称。您可以自由选择,但我们建议您这样做。可帮助您记住关联用途的名称。例如,可为具有特定用途的关联指定 Automatically_update_AWSPVDrivers_on_us-west-2_instances。名称不得包含空格。

  4. 文档列表中,选择文档名称旁边的选项。请注意文档类型。此过程适用于CommandPolicy文档中)。有关创建使用 Automation 文档的关联的信息,请参阅使用状态管理器运行触发器的自动化

  5. 对于 Parameters (参数),请指定所需的输入参数。

  6. 对于 Targets (目标),选择一个选项。有关使用目标的信息,请参阅关于 State Manager 关联中的目标和速率控制

  7. Specify schedule (指定计划) 部分中,选择 On Schedule (按计划)No schedule (无计划)。如果选择 On Schedule (按计划),则可使用提供的按钮为关联创建 cron 或 rate 计划。

    如果您不希望关联在创建后立即运行,请选中 Apply association only at the next specified Cron interval (仅在下一个指定的 Cron 周期应用关联)

  8. 高级选项部分使用合规性严重性选择关联的严重级别。合规性报告指示关联状态是合规还是不合规以及您在此处指示的严重级别。有关更多信息,请参阅 关于状态管理器关联合规性

  9. 速率控制部分中,选择用于控制关联在多个实例上运行的选项。有关使用速率控制的更多信息,请参阅关于 State Manager 关联中的目标和速率控制

    Concurrency (并发) 部分中,选择一个选项:

    • 选择 targets (目标) 输入可同时运行关联的目标的绝对数量。

    • 选择 percentage (百分比) 输入可同时运行关联的目标集的百分比。

    Error threshold (错误阈值) 部分中,选择一个选项:

    • 选择错误以输入允许的错误绝对数量,超过该数量后停止对其他目标运行关联。

    • 选择percentage以输入允许的错误百分比,超过该百分比后停止对其他目标运行关联。

  10. (可选)对于 Output options (输出选项),要将命令输出保存到文件,请选中 Enable writing to S3 (允许写入 S3) 框。在框中输入存储桶和前缀(文件夹)名称。

    注意

    授予将数据写入 S3 存储桶的能力的 S3 权限是分配给实例的实例配置文件的权限,而不是执行此任务的 IAM 用户的权限。有关更多信息,请参阅 。为创建 IAM 实例配置文件。此外,如果指定的 S3 存储桶位于不同的 AWS 账户中,请确保与该实例关联的实例配置文件具有写入该存储桶的必要权限。

    以下是为关联启用 Amazon S3 输出所需的最低权限。您可以进一步限制对账户内单个 IAM 用户或角色的访问权限。Amazon EC2 实例配置文件至少应具有一个具有AmazonSSMManagedInstanceCore托管策略和下面的内联策略。

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

    对于最低权限,导出到的 Amazon S3 存储桶必须具有 Amazon S3 控制台定义的默认设置。有关创建 Amazon S3 存储桶的更多信息,请参阅创建存储桶中的Amazon S3 用户指南中)

  11. 选择创建关联

注意

如果您删除已创建的关联,则该关联将不再在该关联的任何目标上运行。

创建关联(命令行)

以下过程介绍了如何使用 AWS CLI(在 Linux 或 Windows 上)或 Tools for PowerShell 来创建状态管理器关联。本节包括几个示例,说明如何使用目标和速率控制。通过目标和速率控制,您可以将关联分配给数十个或数百个实例,同时控制这些关联的执行。有关目标和速率控制的更多信息,请参阅关于 State Manager 关联中的目标和速率控制

开始前的准备工作

targets 参数是一组搜索条件,使用您指定的 Key,Value 组合将实例设为目标。如果您计划使用 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 账户和区域中的所有实例设为目标

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

当创建关联时,需要指定计划运行的时间。可使用 cron 或 rate 表达式指定计划。有关 cron 和 rate 表达式的更多信息,请参阅适用于关联的 Cron 和 Rate 表达式

创建关联

  1. 安装并配置 AWS CLI 或适用于 PowerShell 的 AWS 工具(如果尚未执行该操作)。

    想要了解有关信息,请参阅安装或升级 AWS 命令行工具

  2. 使用以下格式创建一个命令,以创建 State Manager 关联。

    Linux & macOS
    aws ssm create-association \ --association-name association_name \ --targets target_options \ --name document_name \ --compliance-severity severity_level \ --schedule "cron_or_rate_expression" \ --parameters (if any) \ --max-concurrency a_number_of_instances_or_a_percentage_of_target_set \ --max-errors a_number_of_errors_or_a_percentage_of_target_set
    Windows
    aws ssm create-association ^ --association-name association_name ^ --targets target_options ^ --name document_name ^ --compliance-severity severity_level ^ --schedule "cron_or_rate_expression" ^ --parameters (if any) ^ --max-concurrency a_number_of_instances_or_a_percentage_of_target_set ^ --max-errors a_number_of_errors_or_a_percentage_of_target_set
    PowerShell
    New-SSMAssociation ` -AssociationName association_name ` -Target target_options ` -Name document_name ` -ComplianceSeverity severity_level ` -ScheduleExpression "cron_or_rate_expression" ` -Parameters (if any) ` -MaxConcurrency a_number_of_instances_or_a_percentage_of_target_set ` -MaxError a_number_of_errors_or_a_percentage_of_target_set

    以下示例在标有 "Environment,Linux" 的实例上创建关联。该关联在每个星期日凌晨 2:00 使用 AWS-UTC 文档更新目标实例上的 SSM 代理。该关联在任意给定时间最多在 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-RunpatchPatchBatch 文档扫描实例上的。此关联的目标是 us-east-2 区域中账户中的所有托管实例。关联指定 “操作” 和 “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 区域。该关联在任意给定时间最多在 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”。该关联在每个星期日凌晨 2:00 使用 AWS-UTC 文档更新目标实例上的 SSM 代理。该关联在任意给定时间最多在 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 代理文档在目标实例上更新 SSM 代理一次。关联在运行时检查日历状态。如果日历在启动时关闭,并且关联仅运行一次,则不会再次运行,因为关联运行窗口已通过。如果日历处于打开状态,则相应地运行关联。

    注意

    如果在更改日历关闭时将新实例添加到关联所依据的标签或资源组,则在更改日历打开后,关联将应用于这些实例。

    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 的实例上运行的关联。该关联在每个星期日凌晨 2:00 使用 SSM Agent 文档更新目标实例上的 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 参数。此参数会强制关联在更新后立即运行并按照指定的周期运行。