Amazon EC2 Systems Manager
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

关于 状态管理器

Systems Manager 状态管理器 是一项安全的、可扩展的配置管理服务,可确保您的 Amazon EC2 和混合基础设施处于您定义的所需状态或一致状态。状态管理器 按如下所示工作。

  1. 首先,确定您要应用于托管实例的状态。例如,确定要引导的应用程序或要配置的网络设置。在运行时,可使用 AWS 预配置文档指定状态的详细信息作为参数。您也可以创建您自己的文档并直接在文档中指定状态,或在运行时指定状态作为参数。这些文档以 JSON 格式编写,有时称为 SSM 文档。一个文档可包含多个操作或步骤 (例如,要执行的多条命令)。状态管理器 使用命令或策略类型文档。有关 SSM 文档的更多信息,请参阅 Systems Manager 文档

  2. 您指定应用状态的时间或频率的计划。您可以指定 cron 或 rate 表达式。

  3. 您为状态指定目标。您可以将托管实例 (Amazon EC2 实例,或混合环境中为 Systems Manager 配置的计算机) 设为目标。您可以通过指定一个或多个实例 ID 来以实例为目标,也可以通过将 EC2 标签设为目标来以大型托管实例组为目标。使用 AWS CLI、AWS Tools for Windows PowerShell 或 SSM 开发工具包,您可以通过指定多个标签来设定目标。

  4. 然后将此信息 (计划、目标、文档、参数) 绑定到托管实例。此信息与目标的绑定称为关联。您可以使用 Amazon EC2 控制台、AWS CLI、AWS Tools for Windows PowerShell 或 AWS 开发工具包来创建关联。

  5. 在发送创建关联的请求后,关联的状态将显示“待处理”。系统将尝试访问所有目标并立即应用关联中指定的状态。

    注意

    如果您创建计划在之前的关联仍在运行时运行的新关联,那么之前的关联将超时,系统会执行新关联。

  6. Systems Manager 为请求的每个目标实例报告请求的状态。您可以在 EC2 控制台 (通过使用 DescribeInstanceAssociationsStatus API 操作) 或 Amazon S3 中 (如果您在创建关联时指定了 S3 存储桶) 查看状态详细信息。

  7. 创建关联之后,状态管理器 将根据关联中定义的计划重新应用状态。您可以更新您的关联文档并根据需要重新应用它们。您还可以创建关联版本。

示例 状态管理器 文档

此部分包含示例 状态管理器 文档。此部分中的示例仅用于演示目的。有关如何创建您自己的文档的更多信息,请参阅 Systems Manager 文档

文档 1:此文档包含一个调用 aws:runPowerShellScript 插件以返回实例主机名的步骤。此文档可在 Windows 和 Linux 实例上执行。有关 Systems Manager 插件的更多信息,请参阅顶级元素

Copy
{ "schemaVersion":"2.2", "description":"Sample document", "mainSteps":[ { "action":"aws:runPowerShellScript", "name":"runPowerShellScript", "inputs":{ "runCommand":[ "hostname" ] } } ] }

文档 2:此文档包含一个调用 aws:runShellScript 插件以返回实例主机名的步骤。此文档可在 Linux 实例上执行。

Copy
{ "schemaVersion":"2.2", "description":"Sample document ", "mainSteps":[ { "action":"aws:runShellScript", "name":"runShellScript", "inputs":{ "runCommand":[ "hostname" ] } } ] }

文档 3:此文档包含一个调用 aws:cloudWatch 插件以启用 Amazon CloudWatch Logs 的步骤。此文档可在 Windows 实例上执行。

Copy
{ "schemaVersion":"2.2", "description":"Sample document ", "mainSteps":[ { "action":"aws:cloudWatch", "name":"cloudWatch", "settings":{ "startType":"Enabled" } } ] }

文档 4:此文档包含两个调用 aws:runPowerShellScript 和 aws:runShellScript 插件以返回实例主机名的步骤。此文档可在 Linux 实例上执行。

Copy
{ "schemaVersion":"2.2", "description":"Sample document ", "mainSteps":[ { "action":"aws:runPowerShellScript", "name":"runPowerShellScript", "inputs":{ "runCommand":[ "hostname" ] } }, { "action":"aws:runShellScript", "name":"runShellScript", "inputs":{ "runCommand":[ "hostname" ] } } ] }

创建关联

此部分介绍如何使用 Amazon EC2 控制台创建 状态管理器 关联。此部分中的示例说明如何基于自定义 SSM 文档创建关联。如果这是您首次创建关联,我们建议您在测试环境中执行此过程。有关如何使用 AWS CLI 创建关联的示例,请参阅Systems Manager 状态管理器 演练

开始前的准备工作

在完成以下过程之前,请确认您至少有一个为 Systems Manager 配置的实例正在运行。有关更多信息,请参阅 Systems Manager 先决条件

创建 状态管理器 关联

  1. 打开 Amazon EC2 控制台,在导航窗格中展开 Systems Manager Shared Resources,然后选择 Documents

  2. 选择 Create Document

  3. Name 字段中,键入一个将此文档标识为 状态管理器 的测试文档的描述性名称。

  4. 文档类型列表中,选择命令

  5. 删除 Content field 字段中预先填充的括号 {},然后将以下示例文档复制并粘贴到 Content 字段中。

    此文档包含一个调用 aws:runPowerShellScript 插件以返回实例主机名的步骤。此文档可在 Windows 实例上执行。

    Copy
    { "schemaVersion":"2.0", "description":"Sample document", "mainSteps":[ { "action":"aws:runPowerShellScript", "name":"runPowerShellScript", "inputs":{ "runCommand":[ "hostname" ] } } ] }
  6. 选择创建文档。在系统创建文档后,选择 Close

  7. 在 EC2 控制台导航窗格中,展开 Systems Manager Services,然后选择 状态管理器

  8. 选择创建关联

  9. Association Name 中,为此关联指定一个描述性名称。例如,指定 TestHostnameAssociation。

  10. Select Document 部分中,选择您刚刚创建的文档。

  11. Document Version 列表中,保留默认值。

  12. Select Targets by 部分中,选择选项。

  13. 计划部分,选择一个选项。

  14. 忽略 Parameters 部分,因为测试文档不采用参数。此外,忽略 Write to S3 选项,因为下一过程中将介绍此选项的使用。

  15. 选择创建关联。系统将尝试在实例上创建关联并立即应用状态。在此情况下,创建关联后,系统将尝试返回主机名。关联状态显示 Pending

  16. 在“Association”页面的右角,选择刷新按钮。状态将变为 Success

您无法查看此过程的输出 (主机名),因为您未将输出写入 Amazon S3。要编辑关联,请将输出写入 S3,并查看主机名,完成下一过程。

编辑关联 (版本控制)

您可以编辑关联以指定新名称、计划或目标。您还可选择 Write to S3 选项 (如果您之前未选择此选项)。编辑关联后,Systems Manager 将创建新版本。您可在编辑后查看不同的版本,如以下过程中所述。

注意

此过程需要一个 S3 存储桶。如果您之前未使用 S3,请注意使用 S3 会产生费用。有关如何创建存储桶的信息,请参阅创建存储桶

编辑 状态管理器 关联

  1. 打开 Amazon EC2 控制台,在导航窗格中展开 Systems Manager Services,然后选择 状态管理器

  2. 选择上一过程中创建的关联。

  3. Actions 菜单中选择 Edit Association

  4. Name 字段中,键入一个新名称。例如,键入 TestHostnameAssociation2。

  5. Schedule 部分中,选择一个新选项。例如,选择 Cron schedule builder,然后选择 Every 1 hour

  6. Advanced 部分中,选择 Write to S3

  7. 忽略 S3Region 字段。此字段已弃用。在 S3Bucket Name 字段中指定存储桶的名称。如果要将输出写入子文件夹,请在 S3Key Prefix 字段中指定子文件夹名称。

  8. 选择 Edit Association,然后选择 Close

  9. 在 状态管理器 页面中,选择您刚编辑的关联,然后选择 Versions 选项卡。系统将列出您已创建和编辑的关联的每个版本。

  10. Open the Amazon S3 console at https://console.amazonaws.cn/s3/.

  11. 选择您的存储桶名称,然后选择运行关联的实例 ID。

  12. 下拉多个级别至 awsrunPowerShell 文件夹中的 stdout 文件。

  13. 选择该文件,然后选择 Link 部分中的链接。主机名将在 HostId 标签中列出。

使用 Targets 参数创建关联

利用 targets 参数,您可以在数十、数百或数千个实例上创建关联。targets 参数支持基于您为实例指定的 Amazon EC2 标签 Key,Value 组合。在您执行创建关联的请求时,系统会在符合指定条件的所有实例上查找并尝试创建关联。有关 targets 参数的更多信息,请参阅将命令发送到队列。有关 Amazon EC2 标签的更多信息,请参阅 Amazon EC2 用户指南 中的标记 Amazon EC2 资源

以下 AWS CLI 示例显示了如何在创建关联时使用 targets 参数。

Copy
aws ssm create-association --targets Key=tag:TagKey,Values=TagValue --name AWS-UpdateSSMAgent --schedule "cron(0 0 2 ? * SUN *)"

为名为 "ws-0123456789012345" 的托管实例创建关联

Copy
aws ssm create-association --name value --targets "Key=Instance Ids,Values=ws-0123456789"} --name AWS-UpdateSSMAgent --schedule "cron(0 0 2 ? * SUN *)"

注意

如果您从与文档关联的标记实例组中删除一个实例,则该实例将不再与文档相关联。