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

Systems Manager Inventory Manager 演练

使用以下演练管理清单数据。我们建议您首先在测试环境中使用托管实例执行这些演练。

将自定义清单元数据分配给某个实例

以下步骤为您演示了使用 PutInventory API 操作将自定义清单元数据分配给托管实例的过程。此示例将机架位置信息分配给某个实例。有关自定义清单的更多信息,请参阅 使用自定义清单

将自定义清单元数据分配给某个实例

  1. 在您的本地计算机上,下载最新版本的 AWS CLI。

  2. 打开 AWS CLI 并运行以下命令指定您的凭证和区域。您必须在 Amazon EC2 中具有管理员权限,或者您必须在 AWS Identity and Access Management (IAM) 中被授予相应权限。

    Copy
    aws configure

    系统将提示您指定以下内容。

    Copy
    AWS Access Key ID [None]: key_name AWS Secret Access Key [None]: key_name Default region name [None]: region Default output format [None]: ENTER
  3. 执行以下命令,以便将机架位置信息分配给某个实例。

    Copy
    aws ssm put-inventory --instance-id "ID" --items '[{"CaptureTime": "2016-08-22T10:01:01Z", "TypeName": "Custom:RackInfo", "Content":[{"RackLocation": "Bay B/Row C/Rack D/Shelf E"}], "SchemaVersion": "1.0"}]'
  4. 执行以下命令以便查看该实例的自定义清单条目。

    Copy
    aws ssm list-inventory-entries --instance-id ID --type-name "Custom:RackInfo"

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

    Copy
    { "InstanceId": "ID", "TypeName": "Custom:RackInfo", "Entries": [ { "RackLocation": "Bay B/Row C/Rack D/Shelf E" } ], "SchemaVersion": "1.0", "CaptureTime": "2016-08-22T10:01:01Z" }
  5. 执行以下命令以便查看自定义元数据。

    Copy
    aws ssm get-inventory

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

    Copy
    { "Entities": [ { "Data": { "AWS:InstanceInformation": { "Content": [ { "ComputerName": "WIN-9JHCEPEGORG.WORKGROUP", "InstanceId": "ID", "ResourceType": "EC2Instance", "AgentVersion": "3.19.1153", "PlatformVersion": "6.3.9600", "PlatformName": "Windows Server 2012 R2 Standard", "PlatformType": "Windows" } ], "TypeName": "AWS:InstanceInformation", "SchemaVersion": "1.0" } }, "Id": "ID" } ] }

使用 AWS CLI 收集清单

以下步骤为您演示了使用 Inventory 从 Amazon EC2 实例中收集元数据的过程。当您配置清单收集时,您将从创建 Systems Manager State Manager 关联开始。Systems Manager 会在关联运行时收集清单数据。如果您不先创建关联,并试图使用 Run Command 等调用 aws:softwareInventory 插件,则系统会返回以下错误:

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

注意

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

从实例收集清单

  1. 在您的本地计算机上,下载最新版本的 AWS CLI。

  2. 打开 AWS CLI 并运行以下命令指定您的凭证和区域。您必须在 Amazon EC2 中具有管理员权限,或者您必须在 AWS Identity and Access Management (IAM) 中被授予相应权限。

    Copy
    aws configure

    系统将提示您指定以下内容。

    Copy
    AWS Access Key ID [None]: key_name AWS Secret Access Key [None]: key_name Default region name [None]: region Default output format [None]: ENTER
  3. 执行以下命令,创建一个在实例上运行 Inventory 的 State Manager 关联。此命令将服务配置为每六小时运行一次,并收集实例上的网络配置、Windows 更新和应用程序元数据。

    Copy
    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\": \"us-east-1\", \"OutputS3BucketName\": \"Test bucket\", \"OutputS3KeyPrefix\": \"Test\" } }" --parameters "networkConfig=Enabled,windowsUpdates=Enabled,applications=Enabled"

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

    Copy
    { "AssociationDescription": { "ScheduleExpression": "cron(0 0/30 * 1/1 * ? *)", "OutputLocation": { "S3Location": { "OutputS3KeyPrefix": "Test", "OutputS3BucketName": "Test bucket", "OutputS3Region": "us-east-1" } }, "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 标签的大型目标实例组。

    Copy
    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-east-1\", \"OutputS3BucketName\": \"Test bucket\", \"OutputS3KeyPrefix\": \"Test\" } }" --parameters "networkConfig=Enabled,windowsUpdates=Enabled,applications=Enabled"
  4. 执行以下命令查看关联状态。

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

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

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

使用资源数据同步聚合清单数据

以下演练介绍如何使用 AWS CLI 创建资源数据同步配置。资源数据同步自动将所有托管实例的清单数据传输到中央 Amazon S3 存储桶。当发现新的清单数据时,同步自动更新中央 Amazon S3 存储桶中的数据。此演练还介绍如何使用 Amazon Athena 和 Amazon QuickSight 查询和分析聚合数据。有关使用 Amazon EC2 控制台创建资源数据同步的信息,请参阅 配置清单的资源数据同步

开始前的准备工作

在开始本演练之前,您必须从您的托管实例收集清单元数据。对于本演练中的 Amazon Athena 和 Amazon QuickSight,建议您收集应用程序元数据。有关如何收集清单数据的更多信息,请参阅 使用 AWS CLI 收集清单

创建清单的资源数据同步

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

  2. 创建用来存储聚合清单数据的存储桶。有关更多信息,请参阅 Amazon Simple Storage Service Getting Started Guide 中的创建存储桶。请记下存储桶名称和创建此存储桶的 AWS 区域。

  3. 选择 Permissions 选项卡,然后选择 Bucket Policy

  4. 将下面的存储桶策略复制并粘贴到策略编辑器中。使用您创建的 Amazon S3 存储桶的名称和有效的 AWS 账户 ID 替换 Bucket-NameAccount-ID。或者,使用 Amazon S3 前缀 (子目录) 的名称替换 Bucket-Prefix。如果您未创建前缀,则从该策略的 ARN 中删除 Bucket-Prefix/。

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Sid": "SSMBucketPermissionsCheck", "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::Bucket-Name" }, { "Sid": " SSMBucketDelivery", "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "s3:PutObject", "Resource": ["arn:aws:s3:::Bucket-Name/Bucket-Prefix/*/accountid=Account-ID/*"], "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }
  5. 在您的本地计算机上,下载最新版本的 AWS CLI。

  6. 打开 AWS CLI 并运行以下命令指定您的凭证和区域。您必须在 Amazon EC2 中具有管理员权限,或者您必须在 AWS Identity and Access Management (IAM) 中被授予相应权限。

    Copy
    aws configure

    系统将提示您指定以下内容。

    Copy
    AWS Access Key ID [None]: key_name AWS Secret Access Key [None]: key_name Default region name [None]: region Default output format [None]: ENTER
  7. 执行以下命令,以使用您在此程序开始时创建的 Amazon S3 存储桶创建资源数据同步配置。此命令从您当前已登录的 AWS 区域创建同步。

    注意

    如果同步和目标 Amazon S3 存储桶位于不同区域,您可能需要支付数据传输价格。有关更多信息,请参阅 Amazon S3 定价

    Copy
    aws ssm create-resource-data-sync --sync-name a name --s3-destination "BucketName=the name of the S3 bucket,Prefix=the name of the prefix, if specified,SyncFormat=JsonSerDe,Region=the region where the S3 bucket was created"

    您可以使用 region 参数指定创建同步配置的位置。在下例中,来自 us-west-1 区域的清单数据将同步到 us-west-2 区域中的 Amazon S3 存储桶。

    Copy
    aws ssm create-resource-data-sync --sync-name InventoryDataWest --s3-destination "BucketName=InventoryData,Prefix=HybridEnv,SyncFormat=JsonSerDe,Region=us-west-2" --region us-west-1
  8. 执行以下命令查看同步配置的状态。

    Copy
    aws ssm list-resource-data-sync

    如果您在其他区域中创建了同步配置,则必须指定 region 参数,如下例所示。

    Copy
    aws ssm list-resource-data-sync --region us-west-1
  9. 在成功创建同步配置后,浏览 Amazon S3 中的目标存储桶。清单数据应在几分钟内显示。

在 Amazon Athena 中处理数据

以下部分介绍如何在 Amazon Athena 中查看和查询数据。

在 Amazon Athena 中查看和查询数据

  1. 在 Amazon Athena 控制台中,将以下语句复制并粘贴到查询编辑器中,然后选择 Run Query

    Copy
    CREATE DATABASE ssminventory

    系统将创建一个名为 ssminventory 的数据库。

  2. 将以下语句复制并粘贴到查询编辑器中,然后选择 Run Query。使用 Amazon S3 目标的名称和前缀替换 Bucket-NameBucket-Prefix

    Copy
    CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_Application ( `ResourceId` string, `Name` string, `ApplicationType` string, `Publisher` string, `Version` string, `InstalledTime` string, `Architecture` string, `URL` string ) PARTITIONED BY (AccountId string, Region string, ResourceType string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3://Bucket-Name/Bucket-Prefix/AWS:Application/'

    系统将使用应用程序清单类型的分区信息创建一个表。

  3. 将以下语句复制并粘贴到查询编辑器中,然后选择 Run Query

    Copy
    MSCK REPAIR TABLE ssminventory.AWS_Application

    系统将对表进行分区。

    注意

    如果您从其他 AWS 区域或账户创建资源数据同步,则必须再次运行该命令,以更新分区。您可能还需要更新您的 Amazon S3 存储桶策略。

  4. 要预览数据,请选择 AWS_Application 表旁边的视图图标。

     alt-text
  5. 将以下语句复制并粘贴到查询编辑器中,然后选择 Run Query

    Copy
    SELECT a.name, a.version, count( a.version) frequency from aws_application a where a.name = 'aws-cfn-bootstrap' group by a.name, a.version order by frequency desc

    此查询返回不同版本的 aws-cfn-bootstrap 的计数,这是 Amazon EC2 Linux 和 Windows 实例上出现的 AWS 应用程序。

  6. 将以下语句复制并粘贴到查询编辑器中,然后选择 Run Query。这些语句在 Athena 中设置其他清单表。

    Copy
    CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_AWSComponent ( `ResourceId` string, `Name` string, `ApplicationType` string, `Publisher` string, `Version` string, `InstalledTime` string, `Architecture` string, `URL` string ) PARTITIONED BY (AccountId string, Region string, ResourceType string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3:// bucketname /bucketprefix/AWS:AWSComponent/' MSCK REPAIR TABLE ssminventory.AWS_AWSComponent CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_WindowsUpdate ( `ResourceId` string, `HotFixId` string, `Description` string, `InstalledTime` string, `InstalledBy` string ) PARTITIONED BY (AccountId string, Region string, ResourceType string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3://bucketname/bucketprefix/AWS:WindowsUpdate/' MSCK REPAIR TABLE ssminventory.AWS_WindowsUpdate CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_InstanceInformation ( `AgentType` string, `AgentVersion` string, `ComputerName` string, `IamRole` string, `InstanceId` string, `IpAddress` string, `PlatformName` string, `PlatformType` string, `PlatformVersion` string ) PARTITIONED BY (AccountId string, Region string, ResourceType string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3://bucket-name/bucketprefix/AWS:InstanceInformation/' MSCK REPAIR TABLE ssminventory.AWS_InstanceInformation CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_Network ( `ResourceId` string, `Name` string, `SubnetMask` string, `Gateway` string, `DHCPServer` string, `DNSServer` string, `MacAddress` string, `IPV4` string, `IPV6` string ) PARTITIONED BY (AccountId string, Region string, ResourceType string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3://bucketname/bucketprefix/AWS:Network/' MSCK REPAIR TABLE ssminventory.AWS_Network CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_PatchCompliance ( `ResourceId` string, `Title` string, `KBId` string, `Classification` string, `Severity` string, `State` string, `InstalledTime` string ) PARTITIONED BY (AccountId string, Region string, ResourceType string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3://bucketname/bucketprefix/AWS:PatchCompliance/' MSCK REPAIR TABLE ssminventory.AWS_PatchCompliance CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_PatchSummary ( `ResourceId` string, `PatchGroup` string, `BaselineId` string, `SnapshotId` string, `OwnerInformation` string, `InstalledCount` int, `InstalledOtherCount` int, `NotApplicableCount` int, `MissingCount` int, `FailedCount` int, `OperationType` string, `OperationStartTime` string, `OperationEndTime` string ) PARTITIONED BY (AccountId string, Region string, ResourceType string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3://bucketname/bucketprefix/AWS:PatchSummary/' MSCK REPAIR TABLE ssminventory.AWS_PatchSummary

在 Amazon QuickSight 中处理数据

以下部分提供概述,包含用于在 Amazon QuickSight 中构建可视化内容的链接。

在 Amazon QuickSight 中构建可视化内容

  1. 注册 Amazon QuickSight,然后登录 QuickSight 控制台。

  2. 从 AWS_Application 表和您创建的任何其他表创建数据集。有关更多信息,请参阅使用 Amazon Athena 数据创建数据集

  3. 联接表。例如,您可以联接 AWS_InstanceInformation 中的 instanceid 列,因为它与其他清单表中的 resourceid 列匹配。有关联接表的更多信息,请参阅联接表

  4. 构建可视化内容。有关更多信息,请参阅处理 Amazon QuickSight 视觉对象