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

演练:使用 CLI 配置 Inventory 的托管实例

以下过程为您演示了配置 Inventory 来从托管实例收集元数据的过程。配置清单收集时,首先创建 Systems Manager 状态管理器 关联。Systems Manager 会在关联运行时收集清单数据。如果您不先创建关联,并试图使用 Run Command 等调用 aws:softwareInventory 插件,则系统会返回以下错误:

The aws:softwareInventory plugin can only be invoked via ssm-associate

注意

一个实例一次只能配置一个清单关联。如果您为实例配置了两个或更多清单关联,则关联不会运行,而且系统不会收集清单数据。

快速配置 Inventory 的所有托管实例 (CLI)

您可以在您的 AWS 账户和当前的区域中快速配置所有托管实例来收集清单数据。这称为创建全局清单关联。要使用 AWS CLI 创建全局清单关联,请为 instanceIds 值使用通配符选项,如以下过程所示。

在您的 AWS 账户和当前区域中为所有托管实例配置清单 (CLI)

  1. 安装并配置 AWS CLI(如果尚未执行该操作)。

    有关信息,请参阅安装或升级 AWS CLI

  2. 运行以下命令。

    aws ssm create-association --name AWS-GatherSoftwareInventory --targets Key=InstanceIds,Values=* --schedule-expression "rate(1 day)" --parameters applications=Enabled,awsComponents=Enabled,customInventory=Enabled,instanceDetailedInformation=Enabled,networkConfig=Enabled,services=Enabled,windowsRoles=Enabled,windowsUpdates=Enabled

注意

此命令不启用文件或 Windows 注册表元数据的清单。要为这些数据类型启用清单,请使用下一个过程。

在托管实例上手动配置 Inventory (CLI)

使用以下过程,使用实例 ID 或标签在您的托管实例上手动配置 Inventory。

手动配置 Inventory 的托管实例 (CLI)

  1. 安装并配置 AWS CLI(如果尚未执行该操作)。

    有关信息,请参阅安装或升级 AWS CLI

  2. 运行以下命令,创建一个在实例上运行 Inventory 的 状态管理器 关联。此命令将服务配置为每六小时运行一次,并收集实例上的网络配置、Windows 更新和应用程序元数据。

    aws ssm create-association --name "AWS-GatherSoftwareInventory" --targets "Key=instanceids,Values=an instance ID" --schedule-expression "cron(0 0/30 * 1/1 * ? *)" --output-location "{ \"S3Location\": { \"OutputS3Region\": \"region-id\", \"OutputS3BucketName\": \"Test bucket\", \"OutputS3KeyPrefix\": \"Test\" } }" --parameters "networkConfig=Enabled,windowsUpdates=Enabled,applications=Enabled"

    region-id 表示实例所在的 AWS 区域,例如,US East (Ohio) Region的 us-west-2。

    系统会使用类似以下形式的信息进行响应。

    {
        "AssociationDescription": {
            "ScheduleExpression": "cron(0 0/30 * 1/1 * ? *)",
            "OutputLocation": {
                "S3Location": {
                    "OutputS3KeyPrefix": "Test",
                    "OutputS3BucketName": "Test bucket",
                    "OutputS3Region": "us-west-2"
                }
            },
            "Name": "The name you specified",
            "Parameters": {
                "applications": [
                    "Enabled"
                ],
                "networkConfig": [
                    "Enabled"
                ],
                "windowsUpdates": [
                    "Enabled"
                ]
            },
            "Overview": {
                "Status": "Pending",
                "DetailedStatus": "Creating"
            },
            "AssociationId": "1a2b3c4d5e6f7g-1a2b3c-1a2b3c-1a2b3c-1a2b3c4d5e6f7g",
            "DocumentVersion": "$DEFAULT",
            "LastUpdateAssociationDate": 1480544990.06,
            "Date": 1480544990.06,
            "Targets": [
                {
                    "Values": [
                       "i-1a2b3c4d5e6f7g"
                    ],
                    "Key": "InstanceIds"
                }
            ]
        }
    }

    您可以使用 Targets 参数来确定带有 EC2 标签的大型目标实例组。例如:

    aws ssm create-association --name "AWS-GatherSoftwareInventory" --targets "Key=tag:Environment,Values=Production" --schedule-expression "cron(0 0/30 * 1/1 * ? *)" --output-location "{ \"S3Location\": { \"OutputS3Region\": \"us-west-2\", \"OutputS3BucketName\": \"Test bucket\", \"OutputS3KeyPrefix\": \"Test\" } }" --parameters "networkConfig=Enabled,windowsUpdates=Enabled,applications=Enabled"

    您还可以使用带有表达式的 fileswindowsRegistry 清单类型来清点 Windows 实例上的文件和 Windows 注册表项。有关这些清单类型的更多信息,请参阅使用文件和 Windows 注册表清单

    aws ssm create-association --name "AWS-GatherSoftwareInventory" --targets "Key=instanceids,Values=i-0704358e3a3da9eb1" --schedule-expression "cron(0 0/30 * 1/1 * ? *)" --parameters '{"files":["[{\"Path\": \"C:\\Program Files\", \"Pattern\": [\"*.exe\"], \"Recursive\": true}]"], "windowsRegistry": ["[{\"Path\":\"HKEY_LOCAL_MACHINE\\Software\\Amazon\", \"Recursive\":true}]"]}' --profile dev-pdx
  3. 运行以下命令查看关联状态。

    aws ssm describe-instance-associations-status --instance-id an instance ID

    系统会使用类似以下形式的信息进行响应。

    {
    "InstanceAssociationStatusInfos": [
             {
                "Status": "Pending",
                "DetailedStatus": "Associated",
                "Name": "reInvent2016PolicyDocumentTest",
                "InstanceId": "i-1a2b3c4d5e6f7g",
                "AssociationId": "1a2b3c4d5e6f7g-1a2b3c-1a2b3c-1a2b3c-1a2b3c4d5e6f7g",
                "DocumentVersion": "1"
            }
    ]
    }