

• AWS Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# AWS Systems Manager 清单
<a name="systems-manager-inventory"></a>

可以通过 AWS Systems Manager Inventory 了解您的 AWS 计算环境。您可以使用 Inventory 从托管式节点收集*元数据*。您可以将此元数据存储在中央 Amazon Simple Storage Service（Amazon S3）存储桶中，然后使用内置工具查询数据并快速确定哪些节点正在运行软件和软件策略所需的配置，以及需要更新哪些节点。您可以使用一个一键式过程在所有托管式节点上配置 Inventory。您还可以通过使用 Amazon Athena 配置及查看多个 AWS 区域 和 AWS 账户 的清单数据。要开始使用“清单”，请打开 [Systems Manager 控制台](https://console.aws.amazon.com//systems-manager/inventory)。在导航窗格中，选择 **Inventory (清单)**。

如果 Systems Manager Inventory 收集的预配置元数据类型未满足您的需求，则您可以创建自定义清单。自定义清单是一个简单的 JSON 文件，包含您提供并添加到特定目录中的托管式节点的信息。当 Systems Manager Inventory 收集数据时，它将捕获此自定义清单数据。例如，如果您运行一个大型数据中心，您可以将每个服务器的机架位置指定为自定义清单。然后，在您查看其他清单数据时，则可以查看机架空间数据。

**重要**  
Systems Manager Inventory *仅*从托管式节点收集元数据。Inventory 不会访问专有信息或数据。

下表描述了可以使用 Systems Manager Inventory 收集的数据的类型。该表还介绍了定位节点的不同产品以及您可以指定的收集间隔。


****  

| 配置 | 详细信息 | 
| --- | --- | 
|  元数据类型  |  您可以配置 Inventory 以收集以下类型的数据： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/systems-manager-inventory.html)  要查看清单收集的所有元数据的列表，请参阅 [清单收集的元数据](inventory-schema.md)。   | 
|  要定位的节点  |  您可以选择清点 AWS 账户 中的所有托管式节点、单独选择节点，或者使用标签将节点组设为目标。有关从所有托管节点收集清单数据的更多信息，请参阅 [清点 AWS 账户 中的所有托管式节点](inventory-collection.md#inventory-management-inventory-all)。  | 
|  何时收集信息  |  您可以按分钟、小时和天数指定收集间隔。最短收集间隔为 30 分钟。  | 

**注意**  
根据所收集的数据量，系统可能需要几分钟将数据报告到您指定的输出中。收集信息后，数据会通过安全 HTTPS 通道发送到一个只能从您的AWS 账户访问的纯文本 AWS 存储。

您可以在 **Inventory**（清单）页面上查看 Systems Manager 控制台中的数据，该页面包括几个预定义的卡，可以帮助您查询数据。

![\[Systems Manager 控制台中的 Systems Manager Inventory 卡。\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/inventory-cards.png)


**注意**  
Inventory 卡可以自动筛选掉状态为 *Terminated (已终止)* 和 *Stopped (已停止)* 的 Amazon EC2 托管实例。对于本地托管式节点和 AWS IoT Greengrass 核心设备托管式节点，Inventory 卡会自动筛选掉状态为 *Terminated*（已终止）的节点。

如果您创建资源数据同步，以同步所有数据并将其存储在单个 Amazon S3 存储桶中，则可以在 **Inventory Detail View (Inventory 详细视图)** 页面上详细查看这些数据。有关更多信息，请参阅 [查询多个区域和账户的清单数据](systems-manager-inventory-query.md)。

**EventBridge 支持**  
支持此 Systems Manager 工具作为 Amazon EventBridge 规则中的一个*事件*类型。有关信息，请参阅 [使用 Amazon EventBridge 监控 Systems Manager 事件](monitoring-eventbridge-events.md)和 [引用：Amazon EventBridge 事件模式和 Systems Manager 类型](reference-eventbridge-events.md)。

**Topics**
+ [了解有关 Systems Manager Inventory 的更多信息](inventory-about.md)
+ [设置 Systems Manager Inventory](systems-manager-inventory-setting-up.md)
+ [配置清单收集](inventory-collection.md)
+ [查询多个区域和账户的清单数据](systems-manager-inventory-query.md)
+ [使用筛选条件查询清单收集](inventory-query-filters.md)
+ [聚合清单数据](inventory-aggregate.md)
+ [使用自定义清单](inventory-custom.md)
+ [查看清单历史记录和变更跟踪](inventory-history.md)
+ [停止数据收集和删除清单数据](systems-manager-inventory-delete.md)
+ [将自定义清单元数据分配给某个托管式节点](inventory-custom-metadata.md)
+ [使用 AWS CLI 配置清单数据收集](inventory-collection-cli.md)
+ [演练：使用资源数据同步聚合清单数据](inventory-resource-data-sync.md)
+ [对 Systems Manager Inventory 的问题进行故障排除](syman-inventory-troubleshooting.md)

# 了解有关 Systems Manager Inventory 的更多信息
<a name="inventory-about"></a>

当您配置 AWS Systems Manager Inventory 时，您可以指定要收集的元数据的类型、应从中收集元数据的托管式节点以及元数据收集的计划。这些配置将与您的 AWS 账户 一起保存为 AWS Systems Manager State Manager 关联。关联就是配置。

**注意**  
Inventory 仅收集元数据。它不会收集任何个人数据或专有数据。

**Topics**
+ [清单收集的元数据](inventory-schema.md)
+ [使用文件和 Windows 注册表清单](inventory-file-and-registry.md)

# 清单收集的元数据
<a name="inventory-schema"></a>

以下示例显示了由每个 AWS Systems Manager Inventory 插件收集的元数据的完整列表。

```
{
    "typeName": "AWS:InstanceInformation",
    "version": "1.0",
    "attributes":[
      { "name": "AgentType",                              "dataType" : "STRING"},
      { "name": "AgentVersion",                           "dataType" : "STRING"},
      { "name": "ComputerName",                           "dataType" : "STRING"},
      { "name": "InstanceId",                             "dataType" : "STRING"},
      { "name": "IpAddress",                              "dataType" : "STRING"},
      { "name": "PlatformName",                           "dataType" : "STRING"},
      { "name": "PlatformType",                           "dataType" : "STRING"},
      { "name": "PlatformVersion",                        "dataType" : "STRING"},
      { "name": "ResourceType",                           "dataType" : "STRING"},
      { "name": "AgentStatus",                            "dataType" : "STRING"},
      { "name": "InstanceStatus",                         "dataType" : "STRING"}    
    ]
  },
  {
    "typeName" : "AWS:Application",
    "version": "1.1",
    "attributes":[
      { "name": "Name",               "dataType": "STRING"},
      { "name": "ApplicationType",    "dataType": "STRING"},
      { "name": "Publisher",          "dataType": "STRING"},
      { "name": "Version",            "dataType": "STRING"},
      { "name": "Release",            "dataType": "STRING"},
      { "name": "Epoch",              "dataType": "STRING"},
      { "name": "InstalledTime",      "dataType": "STRING"},
      { "name": "Architecture",       "dataType": "STRING"},
      { "name": "URL",                "dataType": "STRING"},
      { "name": "Summary",            "dataType": "STRING"},
      { "name": "PackageId",          "dataType": "STRING"}
    ]
  },
  {
    "typeName" : "AWS:File",
    "version": "1.0",
    "attributes":[
      { "name": "Name",               "dataType": "STRING"},
      { "name": "Size",    	      "dataType": "STRING"},
      { "name": "Description",        "dataType": "STRING"},
      { "name": "FileVersion",        "dataType": "STRING"},
      { "name": "InstalledDate",      "dataType": "STRING"},
      { "name": "ModificationTime",   "dataType": "STRING"},
      { "name": "LastAccessTime",     "dataType": "STRING"},
      { "name": "ProductName",        "dataType": "STRING"},
      { "name": "InstalledDir",       "dataType": "STRING"},
      { "name": "ProductLanguage",    "dataType": "STRING"},
      { "name": "CompanyName",        "dataType": "STRING"},
      { "name": "ProductVersion",       "dataType": "STRING"}
    ]
  },
  {
    "typeName": "AWS:AWSComponent",
    "version": "1.0",
    "attributes":[
      { "name": "Name",               "dataType": "STRING"},
      { "name": "ApplicationType",    "dataType": "STRING"},
      { "name": "Publisher",          "dataType": "STRING"},
      { "name": "Version",            "dataType": "STRING"},
      { "name": "InstalledTime",      "dataType": "STRING"},
      { "name": "Architecture",       "dataType": "STRING"},
      { "name": "URL",                "dataType": "STRING"}
    ]
  },
  {
    "typeName": "AWS:WindowsUpdate",
    "version":"1.0",
    "attributes":[
      { "name": "HotFixId",           "dataType": "STRING"},
      { "name": "Description",        "dataType": "STRING"},
      { "name": "InstalledTime",      "dataType": "STRING"},
      { "name": "InstalledBy",        "dataType": "STRING"}
    ]
  },
  {
    "typeName": "AWS:Network",
    "version":"1.0",
    "attributes":[
      { "name": "Name",               "dataType": "STRING"},
      { "name": "SubnetMask",         "dataType": "STRING"},
      { "name": "Gateway",            "dataType": "STRING"},
      { "name": "DHCPServer",         "dataType": "STRING"},
      { "name": "DNSServer",          "dataType": "STRING"},
      { "name": "MacAddress",         "dataType": "STRING"},
      { "name": "IPV4",               "dataType": "STRING"},
      { "name": "IPV6",               "dataType": "STRING"}
    ]
  },
  {
    "typeName": "AWS:PatchSummary",
    "version":"1.0",
    "attributes":[
      { "name": "PatchGroup",                       "dataType": "STRING"},
      { "name": "BaselineId",                       "dataType": "STRING"},
      { "name": "SnapshotId",                       "dataType": "STRING"},
      { "name": "OwnerInformation",                 "dataType": "STRING"},
      { "name": "InstalledCount",                   "dataType": "NUMBER"},
      { "name": "InstalledPendingRebootCount",      "dataType": "NUMBER"},
      { "name": "InstalledOtherCount",              "dataType": "NUMBER"},
      { "name": "InstalledRejectedCount",           "dataType": "NUMBER"},
      { "name": "NotApplicableCount",               "dataType": "NUMBER"},
      { "name": "UnreportedNotApplicableCount",     "dataType": "NUMBER"},
      { "name": "MissingCount",                     "dataType": "NUMBER"},
      { "name": "FailedCount",                      "dataType": "NUMBER"},
      { "name": "OperationType",                    "dataType": "STRING"},
      { "name": "OperationStartTime",               "dataType": "STRING"},
      { "name": "OperationEndTime",                 "dataType": "STRING"},
      { "name": "InstallOverrideList",              "dataType": "STRING"},
      { "name": "RebootOption",                     "dataType": "STRING"},
      { "name": "LastNoRebootInstallOperationTime", "dataType": "STRING"},
      { "name": "ExecutionId",                      "dataType": "STRING",                 "isOptional": "true"},
      { "name": "NonCompliantSeverity",             "dataType": "STRING",                 "isOptional": "true"},
      { "name": "SecurityNonCompliantCount",        "dataType": "NUMBER",                 "isOptional": "true"},
      { "name": "CriticalNonCompliantCount",        "dataType": "NUMBER",                 "isOptional": "true"},
      { "name": "OtherNonCompliantCount",           "dataType": "NUMBER",                 "isOptional": "true"}
    ]
  },
  {
    "typeName": "AWS:PatchCompliance",
    "version":"1.0",
    "attributes":[
      { "name": "Title",                        "dataType": "STRING"},
      { "name": "KBId",                         "dataType": "STRING"},
      { "name": "Classification",               "dataType": "STRING"},
      { "name": "Severity",                     "dataType": "STRING"},
      { "name": "State",                        "dataType": "STRING"},
      { "name": "InstalledTime",                "dataType": "STRING"}
    ]
  },
  {
    "typeName": "AWS:ComplianceItem",
    "version":"1.0",
    "attributes":[
      { "name": "ComplianceType",               "dataType": "STRING",                 "isContext": "true"},
      { "name": "ExecutionId",                  "dataType": "STRING",                 "isContext": "true"},
      { "name": "ExecutionType",                "dataType": "STRING",                 "isContext": "true"},
      { "name": "ExecutionTime",                "dataType": "STRING",                 "isContext": "true"},
      { "name": "Id",                           "dataType": "STRING"},
      { "name": "Title",                        "dataType": "STRING"},
      { "name": "Status",                       "dataType": "STRING"},
      { "name": "Severity",                     "dataType": "STRING"},
      { "name": "DocumentName",                 "dataType": "STRING"},
      { "name": "DocumentVersion",              "dataType": "STRING"},
      { "name": "Classification",               "dataType": "STRING"},
      { "name": "PatchBaselineId",              "dataType": "STRING"},
      { "name": "PatchSeverity",                "dataType": "STRING"},
      { "name": "PatchState",                   "dataType": "STRING"},
      { "name": "PatchGroup",                   "dataType": "STRING"},
      { "name": "InstalledTime",                "dataType": "STRING"},
      { "name": "InstallOverrideList",          "dataType": "STRING",                 "isOptional": "true"},
      { "name": "DetailedText",                 "dataType": "STRING",                 "isOptional": "true"},
      { "name": "DetailedLink",                 "dataType": "STRING",                 "isOptional": "true"},
      { "name": "CVEIds",                       "dataType": "STRING",                 "isOptional": "true"}
    ]
  },
  {
    "typeName": "AWS:ComplianceSummary",
    "version":"1.0",
    "attributes":[
      { "name": "ComplianceType",                 "dataType": "STRING"},
      { "name": "PatchGroup",                     "dataType": "STRING"},
      { "name": "PatchBaselineId",                "dataType": "STRING"},
      { "name": "Status",                         "dataType": "STRING"},
      { "name": "OverallSeverity",                "dataType": "STRING"},
      { "name": "ExecutionId",                    "dataType": "STRING"},
      { "name": "ExecutionType",                  "dataType": "STRING"},
      { "name": "ExecutionTime",                  "dataType": "STRING"},
      { "name": "CompliantCriticalCount",         "dataType": "NUMBER"},
      { "name": "CompliantHighCount",             "dataType": "NUMBER"},
      { "name": "CompliantMediumCount",           "dataType": "NUMBER"},
      { "name": "CompliantLowCount",              "dataType": "NUMBER"},
      { "name": "CompliantInformationalCount",    "dataType": "NUMBER"},
      { "name": "CompliantUnspecifiedCount",      "dataType": "NUMBER"},
      { "name": "NonCompliantCriticalCount",      "dataType": "NUMBER"},
      { "name": "NonCompliantHighCount",          "dataType": "NUMBER"},
      { "name": "NonCompliantMediumCount",        "dataType": "NUMBER"},
      { "name": "NonCompliantLowCount",           "dataType": "NUMBER"},
      { "name": "NonCompliantInformationalCount", "dataType": "NUMBER"},
      { "name": "NonCompliantUnspecifiedCount",   "dataType": "NUMBER"}
    ]
  },
  {
    "typeName": "AWS:InstanceDetailedInformation",
    "version":"1.0",
    "attributes":[
      { "name": "CPUModel",                     "dataType": "STRING"},
      { "name": "CPUCores",                     "dataType": "NUMBER"},
      { "name": "CPUs",                         "dataType": "NUMBER"},
      { "name": "CPUSpeedMHz",                  "dataType": "NUMBER"},
      { "name": "CPUSockets",                   "dataType": "NUMBER"},
      { "name": "CPUHyperThreadEnabled",        "dataType": "STRING"},
      { "name": "OSServicePack",                "dataType": "STRING"}
    ]
   },
   {
     "typeName": "AWS:Service",
     "version":"1.0",
     "attributes":[
       { "name": "Name",                         "dataType": "STRING"},
       { "name": "DisplayName",                  "dataType": "STRING"},
       { "name": "ServiceType",                  "dataType": "STRING"},
       { "name": "Status",                       "dataType": "STRING"},
       { "name": "DependentServices",            "dataType": "STRING"},
       { "name": "ServicesDependedOn",           "dataType": "STRING"},
       { "name": "StartType",                    "dataType": "STRING"}
     ]
    },
    {
      "typeName": "AWS:WindowsRegistry",
      "version":"1.0",
      "attributes":[
        { "name": "KeyPath",                         "dataType": "STRING"},
        { "name": "ValueName",                       "dataType": "STRING"},
        { "name": "ValueType",                       "dataType": "STRING"},
        { "name": "Value",                           "dataType": "STRING"}
      ]
    },
    {
      "typeName": "AWS:WindowsRole",
      "version":"1.0",
      "attributes":[
        { "name": "Name",                         "dataType": "STRING"},
        { "name": "DisplayName",                  "dataType": "STRING"},
        { "name": "Path",                         "dataType": "STRING"},
        { "name": "FeatureType",                  "dataType": "STRING"},
        { "name": "DependsOn",                    "dataType": "STRING"},
        { "name": "Description",                  "dataType": "STRING"},
        { "name": "Installed",                    "dataType": "STRING"},
        { "name": "InstalledState",               "dataType": "STRING"},
        { "name": "SubFeatures",                  "dataType": "STRING"},
        { "name": "ServerComponentDescriptor",    "dataType": "STRING"},
        { "name": "Parent",                       "dataType": "STRING"}
      ]
    },
    {
      "typeName": "AWS:Tag",
      "version":"1.0",
      "attributes":[
        { "name": "Key",                     "dataType": "STRING"},
        { "name": "Value",                   "dataType": "STRING"}
      ]
    },
    {
      "typeName": "AWS:ResourceGroup",
      "version":"1.0",
      "attributes":[
        { "name": "Name",                   "dataType": "STRING"},
        { "name": "Arn",                    "dataType": "STRING"}
      ]
    },
    {
      "typeName": "AWS:BillingInfo",
      "version": "1.0",
      "attributes": [
        { "name": "BillingProductId",       "dataType": "STRING"}
      ]
    }
```

**注意**  
对于 `"typeName": "AWS:InstanceInformation"`，`InstanceStatus` 可以是以下情况之一：Active (活动)、ConnectionLost (连接已丢失)、Stopped (已停止)、Terminated (已终止)。
随着 2.5 版本的发布，RPM 包管理器将 Serial 属性替换成了 Epoch。与 Serial 一样，Epoch 属性是一个单调递增整数。当您使用 `AWS:Application` 类型进行清点时，Epoch 的值越大就意味着版本越新。如果 Epoch 值相同或为空，请使用 Version 或 Release 属性值来确定较新版本。
某些元数据在 Linux 实例中不可用。具体而言，对于“typeName”：“AWS:Network”，Linux 实例尚不支持以下元数据类型。但在 Windows 中受支持。  
\$1 "name": "SubnetMask", "dataType": "STRING"\$1，
\$1 "name": "DHCPServer", "dataType": "STRING"\$1，
\$1 "name": "DNSServer", "dataType": "STRING"\$1，
\$1 "name": "Gateway", "dataType": "STRING"\$1，

# 使用文件和 Windows 注册表清单
<a name="inventory-file-and-registry"></a>

借助 AWS Systems Manager 清单可以搜索和清点 Windows Server、Linux 及 macOS 操作系统上的文件。您还可以搜索并清点 Windows 注册表。

**文件**：您可以收集关于文件的元数据信息，包括文件名称、文件创建时间、文件上次修改和访问时间以及文件大小等等。要开始收集文件清单，您需要指定要执行清点的文件路径、用于定义要清点的文件类型的一个或多个模式，以及是否应以递归的方式遍历路径。Systems Manager 将清点与模式相匹配的指定路径中的文件的所有文件元数据。清单文件使用以下参数输入。

```
{
"Path": string,
"Pattern": array[string],
"Recursive": true,
"DirScanLimit" : number // Optional
}
```
+ **路径**：您要清点文件的目录路径。对于 Windows，您可以使用 `%PROGRAMFILES% ` 等环境变量，前提是该变量要映射到单个目录路径。例如，如果您使用映射到多个目录路径的 %PATH%，则清单会引发错误。
+ **模式**：确定文件的一组模式。
+ **递归**：指示清单是否应以递归方式遍历目录的布尔值。
+ **DirScanLimit**：指定要扫描多少目录的可选值。使用此参数可以将对托管式节点的性能影响降至最低。清单最多扫描 5000 个目录。

**注意**  
清单在所有指定路径中收集最多 500 个文件的元数据。

下面是一些在执行文件清单时如何指定参数的示例。
+ 在 Linux 和 macOS 上，将收集 `/home/ec2-user` 目录（不包括所有子目录）中的 .sh 文件的元数据。

  ```
  [{"Path":"/home/ec2-user","Pattern":["*.sh", "*.sh"],"Recursive":false}]
  ```
+ 在 Windows 上，会以递归方式收集程序文件夹 (包括子目录) 中的所有“.exe”文件的元数据。

  ```
  [{"Path":"C:\Program Files","Pattern":["*.exe"],"Recursive":true}]
  ```
+ 在 Windows 上，会收集指定日志模式的元数据。

  ```
  [{"Path":"C:\ProgramData\Amazon","Pattern":["*amazon*.log"],"Recursive":true}]
  ```
+ 在执行递归集合时会限制目录计数。

  ```
  [{"Path":"C:\Users","Pattern":["*.ps1"],"Recursive":true, "DirScanLimit": 1000}]
  ```

**Windows 注册表**：您可以收集 Windows 注册表项和值。您可以选择一个键路径并以递归方式收集所有键和值。您还可以收集特定路径的特定注册表项及其值。清单会收集键路径、名称、类型和值。

```
{
"Path": string, 
"Recursive": true,
"ValueNames": array[string] // optional
}
```
+ **路径**：注册表项的路径。
+ **递归**：指示清单是否应以递归方式遍历注册表路径的布尔值。
+ **ValueNames**：执行注册表项的清单的一组值名称。如果使用此参数，Systems Manager 仅将清点指定路径的指定值名称。

**注意**  
清单针对所有指定路径收集最多 250 个注册表项值。

下面是一些在执行 Windows 注册表清单时如何指定参数的示例。
+ 以递归方式针对特定路径收集所有键和值。

  ```
  [{"Path":"HKEY_LOCAL_MACHINE\SOFTWARE\Amazon","Recursive": true}]
  ```
+ 针对特定路径收集所有键和值（已关闭递归搜索）。

  ```
  [{"Path":"HKEY_LOCAL_MACHINE\SOFTWARE\Intel\PSIS\PSIS_DECODER", "Recursive": false}]
  ```
+ 使用 `ValueNames` 选项收集特定键。

  ```
  {"Path":"HKEY_LOCAL_MACHINE\SOFTWARE\Amazon\MachineImage","ValueNames":["AMIName"]}
  ```

# 设置 Systems Manager Inventory
<a name="systems-manager-inventory-setting-up"></a>

在您使用 AWS Systems Manager Inventory 收集有关托管式节点上运行的应用程序、服务、AWS 组件等对象的元数据之前，我们建议您配置资源数据同步，以将清单数据的存储集中在单个 Amazon Simple Storage Service (Amazon S3) 存储桶中。我们还建议您配置清单事件的 Amazon EventBridge 监控。这些过程将使查看和管理清单数据和收集变得更加轻松。

**Topics**
+ [为 Inventory 创建资源数据同步](inventory-create-resource-data-sync.md)
+ [使用 EventBridge 监控 Inventory 事件](systems-manager-inventory-setting-up-eventbridge.md)

# 为 Inventory 创建资源数据同步
<a name="inventory-create-resource-data-sync"></a>

本主题介绍如何为 AWS Systems Manager Inventory 设置和配置资源数据同步。有关 Systems Manager Explorer 的资源数据同步的信息，请参阅 [设置 Systems Manager Explorer 以显示来自多个账户和区域的数据](Explorer-resource-data-sync.md)。

## 关于资源数据同步
<a name="systems-manager-inventory-datasync-about"></a>

您可以使用 Systems Manager 资源数据同步，将从所有托管式节点收集到的清单数据发送到单个 Amazon Simple Storage Service（Amazon S3）存储桶。在收集新的清单数据时，资源数据同步自动更新集中式数据。在所有清单数据存储在目标 Amazon S3 存储桶中后，可以使用 Amazon Athena 和 Amazon Quick 等服务查询和分析聚合数据。

例如，假设您将清单配置为收集有关操作系统（OS）和 150 个托管式节点机群上运行的应用程序的数据。其中某些节点位于本地数据中心内，而某些则在跨多个 AWS 区域 的 Amazon Elastic Compute Cloud（Amazon EC2）中运行。如果您*没有*配置资源数据同步，则需要手动收集为每个托管式节点收集的清单数据，或者必须创建脚本以收集该信息。然后您需要将数据传输到应用程序中，以便运行查询和分析数据。

通过使用资源数据同步，您可以执行一次性操作以同步所有托管式节点中的所有清单数据。在成功创建同步后，Systems Manager 会创建所有清单数据的基准，并将其保存在目标 Amazon S3 存储桶中。在收集新的清单数据时，Systems Manager 将自动更新 Amazon S3 存储桶中的数据。然后就可以快速且经济高效地将数据移植到 Amazon Athena 和 Amazon Quick。

图 1 显示了资源数据同步如何将来自[混合和多云](operating-systems-and-machine-types.md#supported-machine-types)环境中的 Amazon EC2 和其他计算机类型的清单数据聚合到目标 Amazon S3 存储桶。该图还显示了如何为多个 AWS 账户 和 AWS 区域 执行资源数据同步。

**图 1：为多个 AWS 账户 和 AWS 区域 执行资源数据同步**

![\[Systems Manager 资源数据同步架构\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/inventory-resource-data-sync-updated.png)


如果删除一个托管式节点，则资源数据同步会保留已删除节点的清单文件。但是，对于正在运行的节点，在创建新文件并将它们写入 Amazon S3 存储桶时，资源数据同步会自动覆盖旧清单文件。如果要随着时间推移跟踪清单变化，您可以使用 AWS Config 服务跟踪 `SSM:ManagedInstanceInventory` 资源类型。有关更多信息，请参见 [AWS Config 入门](https://docs.aws.amazon.com/config/latest/developerguide/getting-started.html)。

可以按照本节中的过程，使用 Amazon S3 和 AWS Systems Manager 控制台为 Inventory 创建资源数据同步。您也可以使用 AWS CloudFormation 创建或删除资源数据同步。要使用 CloudFormation，请将 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-resourcedatasync.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-resourcedatasync.html) 资源添加到您的 CloudFormation 模板。有关信息，请参阅以下文档资源：
+ [适用于 AWS Systems Manager 中的资源数据同步的 AWS CloudFormation 资源](https://aws.amazon.com/blogs/mt/aws-cloudformation-resource-for-resource-data-sync-in-aws-systems-manager/)（博客）
+ *《AWS CloudFormation 用户指南》*中的[使用 AWS CloudFormation 模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)

**注意**  
可以使用 AWS Key Management Service (AWS KMS) 加密 Amazon S3 存储桶中的清单数据。有关如何使用 AWS Command Line Interface（AWS CLI）创建加密同步以及如何使用 Amazon Athena 和 Amazon Quick 中的集中式数据的示例，请参阅[演练：使用资源数据同步聚合清单数据](inventory-resource-data-sync.md)。

## 开始前的准备工作
<a name="datasync-before-you-begin"></a>

在创建资源数据同步之前，请使用以下过程创建中央 Amazon S3 存储桶，以存储聚合清单数据。该过程介绍如何分配存储桶策略，以便 Systems Manager 能将来自多个账户的清单数据写入存储桶。如果您已有一个要用于聚合清单数据以进行资源数据同步的 Amazon S3 存储桶，则必须在以下过程中将该存储桶配置为使用该策略。

**注意**  
如果指定的 Amazon S3 存储桶被配置为使用对象锁定，则 Systems Manager Inventory 无法将数据添加到该存储桶。请验证并确保您为资源数据同步创建或选择的 Amazon S3 存储桶未被配置为使用 Amazon S3 对象锁定。有关更多信息，请参阅*《Amazon Simple Storage Service 用户指南》*中的 [Amazon S3 对象锁定的工作原理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-overview.html)。

**为资源数据同步创建和配置 Amazon S3 存储桶**

1. 通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 创建用来存储聚合清单数据的存储桶。有关更多信息，请参阅[《Amazon Simple Storage Service 用户指南》](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html)中的*创建存储桶*。请记下存储桶名称和创建此存储桶的 AWS 区域。

1. 选择**权限**选项卡，然后选择**存储桶策略**。

1. 将下面的存储桶策略复制并粘贴到策略编辑器中。将 *amzn-s3-demo-bucket* 替换为您创建的 S3 存储桶的名称。将 *account\$1ID\$1number* 替换为有效的 AWS 账户 ID 号码。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "SSMBucketPermissionsCheck",
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": "s3:GetBucketAcl",
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
           },
           {
               "Sid": " SSMBucketDelivery",
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": "s3:PutObject",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/*/accountid=111122223333/*",
                   "arn:aws:s3:::amzn-s3-demo-bucket/*/accountid=444455556666/*",
                   "arn:aws:s3:::amzn-s3-demo-bucket/*/accountid=123456789012/*",
                   "arn:aws:s3:::amzn-s3-demo-bucket/*/accountid=777788889999/*"
               ],
               "Condition": {
                   "StringEquals": {
                       "s3:x-amz-acl": "bucket-owner-full-control",
                       "aws:SourceAccount": "111122223333"
                   },
                   "ArnLike": {
                       "aws:SourceArn": "arn:aws:ssm:*:111122223333:resource-data-sync/*"
                   }
               }
           }
       ]
   }
   ```

------

1. 保存更改。

## 为 Inventory 创建资源数据同步
<a name="datasync-create"></a>

按照以下过程，使用 Systems Manager 控制台为 Systems Manager Inventory 创建资源数据同步。有关如何使用 AWS CLI 创建资源数据同步的信息，请参阅 [使用 AWS CLI 配置清单数据收集](inventory-collection-cli.md)。

**创建资源数据同步**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，请选择 **Fleet Manager**。

1. 在**账户管理**菜单中，选择**资源数据同步**。

1. 选择**创建资源数据同步**。

1. 在**同步名称**字段中，输入同步配置的名称。

1. 在**存储桶名称**字段中，输入您使用**为资源数据同步创建和配置 Amazon S3 存储桶**过程创建的 Amazon S3 存储桶的名称。

1. （可选）在**存储桶前缀**字段中，输入 Amazon S3 存储桶前缀（子目录）的名称。

1. 在**存储桶区域**字段中，如果您创建的 Amazon S3 存储桶位于当前的 AWS 区域 中，请选择**此区域**。如果存储桶位于其他 AWS 区域 中，则请选择**其他区域**，然后输入该区域的名称。
**注意**  
如果同步和目标 Amazon S3 存储桶位于不同区域中，您可能需要支付数据传输费用。有关更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

1. （可选）在 **KMS 密钥 ARN** 字段中，键入或粘贴 KMS 密钥 ARN，以加密 Amazon S3 中的清单数据。

1. 选择**创建**。

要同步来自多个 AWS 区域的清单数据，您必须在*每个*区域中创建一个资源数据同步。在要收集清单数据并将其发送到中央 Amazon S3 存储桶的每个 AWS 区域 中重复此过程。当您在每个区域中创建同步时，请在**存储桶名称**字段中指定中央 Amazon S3 存储桶。然后，使用**存储桶区域**选项选择要在其中创建中央 Amazon S3 存储桶的区域，如下面的屏幕截图中所示。下次关联运行以收集清单数据时，Systems Manager 会将数据存储在中央 Amazon S3 存储桶中。

![\[来自多个 AWS 区域的 Systems Manager 资源数据同步\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/inventory-rds-multiple-regions.png)


## 为 AWS Organizations 中定义的多个账户创建清单资源数据同步
<a name="systems-manager-inventory-resource-data-sync-AWS-Organizations"></a>

您可以将来自 AWS Organizations 中定义的 AWS 账户的清单数据同步到中央 Amazon S3 存储桶。完成以下过程后，清单数据将同步到中央存储桶中的*各个* Amazon S3 密钥前缀。每个键前缀均代表一个不同的 AWS 账户 ID。

**开始前的准备工作**  
在开始之前，请验证并确保您已在 AWS Organizations 中设置和配置了多个 AWS 账户。有关更多信息，请参阅《AWS Organizations 用户指南》中的** [https://docs.aws.amazon.com/organizations/latest/userguide/rgs_getting-started.html](https://docs.aws.amazon.com/organizations/latest/userguide/rgs_getting-started.html)。

另外，请注意，您必须为 AWS Organizations 中定义的每个 AWS 区域 和 AWS 账户 创建基于组织的资源数据同步。

### 创建中央 Amazon S3 存储桶
<a name="datasync-s3-bucket"></a>

可以使用以下过程创建中央 Amazon S3 存储桶，以存储聚合清单数据。该过程介绍如何分配存储桶策略，以便 Systems Manager 能将来自您的 AWS Organizations 账户 ID 的清单数据写入存储桶。如果您已有一个要用于聚合清单数据以进行资源数据同步的 Amazon S3 存储桶，则必须在以下过程中将该存储桶配置为使用该策略。

**为 AWS Organizations 中定义的多个账户的资源数据同步创建和配置 Amazon S3 存储桶**

1. 通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 创建用来存储聚合清单数据的存储桶。有关更多信息，请参阅[《Amazon Simple Storage Service 用户指南》](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html)中的*创建存储桶*。请记下存储桶名称和创建此存储桶的 AWS 区域。

1. 选择**权限**选项卡，然后选择**存储桶策略**。

1. 将下面的存储桶策略复制并粘贴到策略编辑器中。将 *amzn-s3-demo-bucket* 和 *organization-id* 分别替换为您创建的 Amazon S3 存储桶的名称和有效的 AWS Organizations 账户 ID。

   或者，将 *bucket-prefix* 替换为 Amazon S3 前缀（子目录）的名称。如果您未创建前缀，则从以下策略的 ARN 中删除 *bucket-prefix/*。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "SSMBucketPermissionsCheck",
         "Effect": "Allow",
         "Principal": {
           "Service": "ssm.amazonaws.com"
         },
         "Action": "s3:GetBucketAcl",
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
       },
       {
         "Sid": " SSMBucketDelivery",
         "Effect": "Allow",
         "Principal": {
           "Service": "ssm.amazonaws.com"
         },
         "Action": "s3:PutObject",
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket/bucket-prefix/*/accountid=*/*"
         ],
         "Condition": {
           "StringEquals": {
             "s3:x-amz-acl": "bucket-owner-full-control",
             "aws:SourceOrgID": "organization-id"
                     }
         }
       },
       {
         "Sid": " SSMBucketDeliveryTagging",
         "Effect": "Allow",
         "Principal": {
           "Service": "ssm.amazonaws.com"
         },
         "Action": "s3:PutObjectTagging",
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket/bucket-prefix/*/accountid=*/*"
         ]
       }
     ]
   }
   ```

------

### 为 AWS Organizations 中定义的账户创建清单资源数据同步
<a name="systems-manager-inventory-resource-data-sync-AWS-Organizations-create"></a>

以下过程介绍如何使用 AWS CLI 为 AWS Organizations 中定义的账户创建资源数据同步。您必须使用 AWS CLI 执行此任务。您还必须为 AWS Organizations 中定义的每个 AWS 区域 和 AWS 账户 执行此过程。

**为 AWS Organizations 中定义的账户创建资源数据同步 (AWS CLI)**

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关更多信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 运行以下命令，验证并确保您没有任何其他*基于 AWS Organizations* 的资源数据同步。可以有多个标准同步，包括多个标准同步和一个基于组织的同步。但是只能有一个基于组织的资源数据同步。

   ```
   aws ssm list-resource-data-sync
   ```

   如果该命令返回了另一个基于组织的资源数据同步，则您必须将其删除，或选择不创建新资源数据同步。

1. 运行以下命令，为 AWS Organizations 中定义的账户创建资源数据同步。对于 amzn-s3-demo-bucket，请指定您在本主题的前面创建的 Amazon S3 存储桶的名称。如果您为存储桶创建了前缀（子目录），则为 *prefix-name* 指定此信息。

   ```
   aws ssm create-resource-data-sync --sync-name name --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=prefix-name,SyncFormat=JsonSerDe,Region=AWS 区域, for example us-east-2,DestinationDataSharing={DestinationDataSharingType=Organization}"
   ```

1. 为您希望在其中将数据同步到中央 Amazon S3 存储桶的每个 AWS 区域 和 AWS 账户 重复步骤 2 和步骤 3。

### 管理资源数据同步
<a name="managing-resource-data-syncs"></a>

每个 AWS 账户 在每个 AWS 区域 可以有 5 个资源数据同步。您可以使用 AWS Systems Manager Fleet Manager 控制台来管理您的资源数据同步。

**查看资源数据同步**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，请选择 **Fleet Manager**。

1. 在**账户管理**下拉菜单中，选择**资源数据同步**。

1. 从表中选择资源数据同步，然后选择**查看详细信息**以查看有关资源数据同步的信息。

**删除资源数据同步**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，请选择 **Fleet Manager**。

1. 在**账户管理**下拉菜单中，选择**资源数据同步**。

1. 从表中选择资源数据同步，然后选择**删除**。

# 使用 EventBridge 监控 Inventory 事件
<a name="systems-manager-inventory-setting-up-eventbridge"></a>

您可以在 Amazon EventBridge 中配置规则来创建事件，以响应 AWS Systems Manager Inventory 资源状态更改。EventBridge 支持针对以下 Inventory 状态更改的事件。将尽最大努力发送所有事件。

**Custom inventory type deleted for a specific instance**（针对特定实例删除的自定义清单类型）：如果配置了用于监控此事件的规则，EventBridge 将在删除特定托管式节点上的自定义清单类型时创建一个事件。EventBridge 将针对每个自定义清单类型的每个节点发送一个事件。以下是一个示例事件模式。

```
{
    "timestampMillis": 1610042981103,
    "source": "SSM",
    "account": "123456789012",
    "type": "INVENTORY_RESOURCE_STATE_CHANGE",
    "startTime": "Jan 7, 2021 6:09:41 PM",
    "resources": [
        {
            "arn": "arn:aws:ssm:us-east-1:123456789012:managed-instance/i-12345678"
        }
    ],
    "body": {
        "action-status": "succeeded",
        "action": "delete",
        "resource-type": "managed-instance",
        "resource-id": "i-12345678",
        "action-reason": "",
        "type-name": "Custom:MyCustomInventoryType"
    }
}
```

**Custom inventory type deleted event for all instances**（所有实例的自定义清单类型删除事件）：如果配置了用于监控此事件的规则，EventBridge 将在删除适用于所有托管式节点的自定义清单类型时创建一个事件。以下是一个示例事件模式。

```
{
    "timestampMillis": 1610042904712,
    "source": "SSM",
    "account": "123456789012",
    "type": "INVENTORY_RESOURCE_STATE_CHANGE",
    "startTime": "Jan 7, 2021 6:08:24 PM",
    "resources": [
        
    ],
    "body": {
        "action-status": "succeeded",
        "action": "delete-summary",
        "resource-type": "managed-instance",
        "resource-id": "",
        "action-reason": "The delete for type name Custom:SomeCustomInventoryType was completed. The deletion summary is: {\"totalCount\":1,\"remainingCount\":0,\"summaryItems\":[{\"version\":\"1.1\",\"count\":1,\"remainingCount\":0}]}",
        "type-name": "Custom:MyCustomInventoryType"
    }
}
```

**[PutInventory](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutInventory.html) call with old schema version event (使用旧架构版本事件进行 PutInventory 调用)**：如果配置了用于监控此事件的规则，EventBridge 将在使用低于当前架构的架构版本进行 PutInventory 调用时创建一个事件。此事件适用于所有清单类型。以下是一个示例事件模式。

```
{
    "timestampMillis": 1610042629548,
    "source": "SSM",
    "account": "123456789012",
    "type": "INVENTORY_RESOURCE_STATE_CHANGE",
    "startTime": "Jan 7, 2021 6:03:49 PM",
    "resources": [
        {
            "arn": "arn:aws:ssm:us-east-1:123456789012:managed-instance/i-12345678"
        }
    ],
    "body": {
        "action-status": "failed",
        "action": "put",
        "resource-type": "managed-instance",
        "resource-id": "i-01f017c1b2efbe2bc",
        "action-reason": "The inventory item with type name Custom:MyCustomInventoryType was sent with a disabled schema verison 1.0. You must send a version greater than 1.0",
        "type-name": "Custom:MyCustomInventoryType"
    }
}
```

有关如何配置 EventBridge 以监控这些事件的信息，请参阅 [为 Systems Manager 事件配置 EventBridge](monitoring-systems-manager-events.md)。

# 配置清单收集
<a name="inventory-collection"></a>

本节介绍了如何使用 Systems Manager 控制台在一个或多个托管式节点上配置 AWS Systems Manager Inventory 收集。有关如何使用 AWS Command Line Interface (AWS CLI) 配置清单收集的示例，请参阅 [使用 AWS CLI 配置清单数据收集](inventory-collection-cli.md)。

在配置清单收集时，应该首先创建 AWS Systems Manager State Manager 关联。Systems Manager 将在关联运行时收集清单数据。如果您不首先创建关联，并尝试使用 AWS Systems Manager Run Command（举例来说）调用 `aws:softwareInventory` 插件，则系统将返回以下错误：`The aws:softwareInventory plugin can only be invoked via ssm-associate.`

**注意**  
如果您为一个托管式节点创建多个清单关联，请注意以下行为：  
可为每个节点分配一个以*所有*节点为目标的清单关联 (--targets "Key=InstanceIds,Values=\$1")。
还可以为每个节点分配一个特定关联，该关联使用标签键/值对或 AWS 资源组。
如果为某个节点分配了多个清单关联，则对于尚未运行的关联，状态将显示为 *Skipped*（已跳过）。最近运行的关联将显示清单关联的实际状态。
如果为某个节点分配了多个清单关联，并且每个关联都使用标签键/值对，则这些清单关联将因标签冲突而无法在该节点上运行。关联仍会在没有标签键/值冲突的节点上运行。

**开始前的准备工作**  
配置清单收集前，请完成以下任务。
+ 更新要清点的节点上的 AWS Systems Manager SSM Agent。通过运行最新版本的 SSM Agent，可确保您能够收集所有支持的清单类型的元数据。有关如何使用 State Manager 更新 SSM Agent 的信息，请参阅 [演练：使用 AWS CLI 自动更新 SSM Agent](state-manager-update-ssm-agent-cli.md)。
+ 验证您是否已在[混合和多云](operating-systems-and-machine-types.md#supported-machine-types)环境中完成 Amazon Elastic Compute Cloud（Amazon EC2）实例以及非 EC2 计算机的设置要求。有关信息，请参阅[为 AWS Systems Manager 设置托管节点](systems-manager-setting-up-nodes.md)。
+ 对于 Microsoft Windows Server 节点，确认已使用 Windows PowerShell 3.0（或更高版本）配置了您的托管节点。SSM Agent 使用 PowerShell 中的 `ConvertTo-Json` cmdlet 将 Windows 更新清单数据转换为所需格式。
+ （可选）创建资源数据同步，以将清单数据集中存储在 Amazon S3 存储桶中。然后，在收集新的清单数据时，资源数据同步将自动更新集中式数据。有关更多信息，请参阅 [演练：使用资源数据同步聚合清单数据](inventory-resource-data-sync.md)。
+ (可选) 创建用于收集自定义清单的 JSON 文件。有关更多信息，请参阅 [使用自定义清单](inventory-custom.md)。

## 清点 AWS 账户 中的所有托管式节点
<a name="inventory-management-inventory-all"></a>

您可以通过创建全局清单关联，清点 AWS 账户 中的所有托管式节点。全局清单关联执行以下操作：
+ 自动将全局清单配置（关联）应用到 AWS 账户 中的所有现有托管式节点。应用和运行全局清单关联时，将跳过已具有清单关联的托管式节点。跳过某个节点时，详细状态消息将说明 `Overridden By Explicit Inventory Association`。全局关联跳过了这些节点，但在它们运行所分配的清单关联时，仍会报告清单。
+ 将在您的 AWS 账户 中创建的新节点自动添加到全局清单关联。

**注意**  
如果为全局清单关联配置了一个托管式节点，并且您将特定关联分配给该节点，则 Systems Manager Inventory 会降低全局关联的优先级，并应用该特定关联。
全局清单关联在 SSM Agent版本 2.0.790.0 或更高版本中可用。有关如何在节点上更新 SSM Agent 的信息，请参阅 [使用 Run Command 更新 SSM Agent](run-command-tutorial-update-software.md#rc-console-agentexample)。

### 一键式配置清单收集（控制台）
<a name="inventory-config-collection-one-click"></a>

可以使用以下过程为您的 AWS 账户 和单个 AWS 区域 中的所有托管式节点配置 Systems Manager Inventory。

**配置 Systems Manager Inventory 的当前区域中的所有托管式节点**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，选择 **Inventory (清单)**。

1. 在 **Managed instances with inventory enabled (启用了清单的托管实例)** 卡上，选择 **Click here to enable inventory on all instances (单击此处在所有实例上启用清单)**。  
![\[在所有托管式节点上 Systems Manager Inventory。\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/inventory-one-click-1.png)

   如果成功，控制台会显示以下消息。  
![\[在所有托管式节点上 Systems Manager Inventory。\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/inventory-one-click-2.png)

   根据您账户中的托管式节点的数量，可能需要几分钟才能应用全局库存关联。等待几分钟，然后刷新页面。验证图形更改是否反映在所有托管式节点上均配置了清单。

### 使用控制台配置收集
<a name="inventory-config-collection"></a>

本节包含有关如何使用 Systems Manager 控制台将 Systems Manager Inventory 配置为收集托管式节点中的元数据的信息。您可以快速收集特定 AWS 账户 内所有节点（以及未来可能在该账户中创建的任何节点）中的元数据，也可以选择通过使用标签或节点 ID 收集清单数据。

**注意**  
在完成此过程之前，请检查是否已存在全局清单关联。如果全局清单关联已经存在，则无论何时启动新实例，该关联都将应用于该实例，并对新实例进行清点。

**配置清单收集**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，选择 **Inventory (清单)**。

1. 选择**设置清单**。

1. 在 **Targets**（目标）部分中，通过选择以下选项之一来标识您要运行此操作的节点。
   + **Selecting all managed instances in this account**（选择此账户中的所有托管式实例）– 使用此选项可选择没有现有清单关联的所有托管式节点。如果您选择此选项，则在清单收集期间将跳过已有清单关联的节点，并会在清单结果中显示 **Skipped**（已跳过）状态。有关更多信息，请参阅 [清点 AWS 账户 中的所有托管式节点](#inventory-management-inventory-all)。
   + **Specifying a tag**（指定标签）– 使用此选项可以指定单个标签，用于标识要从中收集清单的账户中的节点。如果使用标签，则将来使用相同标签创建的所有节点也将报告清单。如果现有清单关联到所有节点，则使用标签选择特定节点作为其他清单的目标，会覆盖 **All managed instances**（所有托管式实例）目标组中的成员资格。未来从 **All managed instances**（所有托管式实例）进行清单收集时，将跳过具有指定标签的托管式节点。
   + **Manually selecting instances**（手动选择实例）– 使用此选项可以选择账户中的特定托管式节点。使用此选项明确选择特定节点，将覆盖 **All managed instances**（所有托管式实例）目标上的清单关联。未来从 **All managed instances**（所有托管式实例）进行清单收集时，将跳过该节点。
**注意**  
如果未列出您希望看到的托管式节点，请参阅 [排除托管式节点可用性的问题](fleet-manager-troubleshooting-managed-nodes.md) 以获取故障排除技巧。

1. 在 **Schedule**（计划）部分中，选择您希望系统从节点收集清单元数据的频率。

1. 在 **Parameters (参数)** 部分中，使用列表打开或关闭不同类型的清单收集。有关收集文件和 Windows 注册表清单的更多信息，请参阅[使用文件和 Windows 注册表清单](inventory-file-and-registry.md)。

1. 如果希望将关联执行状态存储在 Amazon S3 存储桶中，请在 **Advanced (高级)** 部分中选择 **Sync inventory execution logs to an Amazon S3 bucket (将清单执行日志同步到 Amazon S3 存储桶)**。

1. 选择**设置清单**。Systems Manager 会创建一个 State Manager 关联，并立即在节点上运行 Inventory。

1. 在导航窗格中，请选择 **State Manager**。验证并确保已创建了使用 `AWS-GatherSoftwareInventory` 文档的新关联。关联计划使用 Rate 表达式。此外，确认 **Status** 字段显示 **Success**。如果您选择了 **Sync inventory execution logs to an Amazon S3 bucket (将清单执行日志同步到 Amazon S3 存储桶)** 选项，则您可在几分钟后在 Amazon S3 中查看日志数据。要查看特定节点的清单数据，请在导航窗格中选择 **Managed Instances**（托管式实例）。

1. 选择一个节点，然后选择 **View details**（查看详细信息）。

1. 在节点详细信息页面上，选择 **Inventory**（清单）。使用 **Inventory type** 列表筛选清单。

# 查询多个区域和账户的清单数据
<a name="systems-manager-inventory-query"></a>

AWS Systems Manager Inventory 可与 Amazon Athena 集成，以帮助您查询来自多个 AWS 区域和 AWS 账户的清单数据。Athena 集成使用资源数据同步，以便您可以在 AWS Systems Manager 控制台中的 **Detailed View**（详细视图）页面上查看来自所有托管式节点的清单数据。

**重要**  
此功能将使用 AWS Glue 网络爬取您的 Amazon Simple Storage Service (Amazon S3) 存储桶中的数据，以及使用 Amazon Athena 查询这些数据。根据抓取和查询的数据量，您可能需要为使用这些服务付费。使用 AWS Glue 时，您需要按小时费率（按秒计）为爬网程序（发现数据）和 ETL 作业（处理和加载数据）付费。使用 Athena，您需要按每次查询所扫描的数据量付费。建议您在使用 Amazon Athena 与 Systems Manager Inventory 的集成之前查看这些服务的定价准则。有关更多信息，请参阅 [Amazon Athena 定价](https://aws.amazon.com/athena/pricing/)和 [AWS Glue 定价](https://aws.amazon.com/glue/pricing/)。

您可以在所有提供 Amazon Athena 的 AWS 区域 中的 **Detailed View (详细视图)** 页面上查看清单数据。有关受支持的区域列表，请参阅《Amazon Web Services 一般参考》**中的 [Amazon Athena Service Endpoints](https://docs.aws.amazon.com/general/latest/gr/athena.html#athena_region)。

**开始前的准备工作**  
Athena 集成使用资源数据同步。您必须设置并配置资源数据同步才能使用该功能。有关更多信息，请参阅 [演练：使用资源数据同步聚合清单数据](inventory-resource-data-sync.md)。

另请注意，**Detailed View (详细视图)** 页面将为资源数据同步使用的中央 Amazon S3 存储桶的*拥有者*显示清单数据。如果您不是中央 Amazon S3 存储桶的拥有者，则无法在 **Detailed View (详细视图)** 页面上查看清单数据。

## 配置访问权限
<a name="systems-manager-inventory-query-iam"></a>

您必须将 IAM 实体配置为拥有查看数据的权限，然后才能在 Systems Manager 控制台中的**详细视图**页面上查询及查看来自多个账户和区域的数据。

如果清单数据存储在使用 AWS Key Management Service（AWS KMS）加密的 Amazon S3 存储桶中，您还必须配置 IAM 实体和 `Amazon-GlueServiceRoleForSSM` 服务角色，以便进行 AWS KMS 加密。

**Topics**
+ [配置您的 IAM 实体以访问“详细视图”页面](#systems-manager-inventory-query-iam-user)
+ [（可选）配置查看 AWS KMS 加密数据的权限](#systems-manager-inventory-query-kms)

### 配置您的 IAM 实体以访问“详细视图”页面
<a name="systems-manager-inventory-query-iam-user"></a>

下文介绍了在**详细视图**页面上查看清单数据所需的最低权限。

`AWSQuicksightAthenaAccess` 托管策略

以下 `PassRole` 和其他所需权限块

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowGlue",
            "Effect": "Allow",
            "Action": [
                "glue:GetCrawler",
                "glue:GetCrawlers",
                "glue:GetTables",
                "glue:StartCrawler",
                "glue:CreateCrawler"
            ],
            "Resource": "*"
        },
        {
            "Sid": "iamPassRole",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::111122223333:role/SSMInventoryGlueRole",
                "arn:aws:iam::111122223333:role/SSMInventoryServiceRole"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "glue.amazonaws.com"
                }
            }
        },
        {
            "Sid": "iamRoleCreation",
            "Effect": "Allow",
            "Action": [
                "iam:CreateRole",
                "iam:AttachRolePolicy"
            ],
            "Resource": "arn:aws:iam::111122223333:role/*"
        },
        {
            "Sid": "iamPolicyCreation",
            "Effect": "Allow",
            "Action": "iam:CreatePolicy",
            "Resource": "arn:aws:iam::111122223333:policy/*"
        }
    ]
}
```

------

（可选）如果用于存储清单数据的 Amazon S3 存储桶使用 AWS KMS 进行加密，则您还必须将以下数据块添加到策略中。

```
{
    "Effect": "Allow",
    "Action": [
        "kms:Decrypt"
    ],
    "Resource": [
        "arn:aws:kms:Region:account_ID:key/key_ARN"
    ]
}
```

要提供访问权限，请为您的用户、组或角色添加权限：
+ AWS IAM Identity Center 中的用户和群组：

  创建权限集合。按照《AWS IAM Identity Center 用户指南》**中[创建权限集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)的说明进行操作。
+ 通过身份提供者在 IAM 中托管的用户：

  创建适用于身份联合验证的角色。按照《IAM 用户指南》**中[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)的说明进行操作。
+ IAM 用户：
  + 创建您的用户可以担任的角色。按照《IAM 用户指南》**中[为 IAM 用户创建角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)的说明进行操作。
  + （不推荐使用）将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》**中[向用户添加权限（控制台）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的说明进行操作。

### （可选）配置查看 AWS KMS 加密数据的权限
<a name="systems-manager-inventory-query-kms"></a>

如果用于存储清单数据的 Amazon S3 存储桶使用 AWS Key Management Service（AWS KMS）进行加密，则您必须将 IAM 实体和 **Amazon-GlueServiceRoleForSSM** 角色配置为拥有对 AWS KMS 密钥的 `kms:Decrypt` 权限。

**开始前的准备工作**  
要提供对 AWS KMS 密钥的 `kms:Decrypt` 权限，请将以下策略块添加到您的 IAM 实体：

```
{
    "Effect": "Allow",
    "Action": [
        "kms:Decrypt"
    ],
    "Resource": [
        "arn:aws:kms:Region:account_ID:key/key_ARN"
    ]
}
```

如果您尚未这样做，请完成该过程，并添加对 AWS KMS 密钥的 `kms:Decrypt` 权限。

使用以下过程将 **Amazon-GlueServiceRoleForSSM** 角色配置为拥有对 AWS KMS 密钥的 `kms:Decrypt` 权限。

**将 **Amazon-GlueServiceRoleForSSM** 角色配置为拥有 `kms:Decrypt` 权限**

1. 通过 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择 **Roles (角色)**，然后使用搜索字段查找 **Amazon-GlueServiceRoleForSSM** 角色。此时将打开**摘要**页面。

1. 使用搜索字段查找 **Amazon-GlueServiceRoleForSSM** 角色。选择角色名称 。此时将打开**摘要**页面。

1. 选择角色名称 。此时将打开**摘要**页面。

1. 选择**添加内联策略**。此时将打开**创建策略**页面。

1. 选择 **JSON** 选项卡。

1. 删除编辑器中现有的 JSON 文本，然后将以下策略复制并粘贴到 JSON 编辑器中。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "kms:Decrypt"
               ],
               "Resource": [
                   "arn:aws:kms:us-east-1:111122223333:key/key_ARN"
               ]
           }
       ]
   }
   ```

------

1. 选择**查看策略**

1. 在**查看策略**页面上的**名称**字段中输入名称。

1. 选择**创建策略**。

## 在清单详细视图页面上查询数据
<a name="systems-manager-inventory-query-detail-view"></a>

使用以下过程可在 Systems Manager Inventory **Detailed View (详细视图)** 页面上查看来自多个 AWS 区域和 AWS 账户的清单数据。

**重要**  
仅在提供 Amazon Athena 的 AWS 区域 中提供了 Inventory **Detailed View (详细视图)** 页面。如果在 Systems Manager Inventory 页面上未显示以下选项卡，则意味着 Athena 在该区域中不可用，并且您无法使用 **Detailed View (详细视图)** 查询数据。  

![\[显示 Inventory“控制面板”|“详细视图”|“设置”选项卡\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/inventory-detailed-view-for-error.png)


**在 AWS Systems Manager 控制台中查看多个区域和账户的清单数据**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，选择 **Inventory (清单)**。

1. 选择 **Detailed View (详细视图)** 选项卡。  
![\[访问 AWS Systems Manager Inventory（清单）详细视图页面\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/inventory-detailed-view.png)

1. 选择要查询数据的资源数据同步。  
![\[在 AWS Systems Manager 控制台中显示清单数据\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/inventory-display-data.png)

1. 在 **Inventory Type (清单类型)** 列表中，请选择要查询的清单数据类型，然后按 Enter。  
![\[在 AWS Systems Manager 控制台中选择清单类型\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/inventory-type.png)

1. 要筛选数据，请选择筛选条件栏，然后选择筛选选项。  
![\[在 AWS Systems Manager 控制台中筛选清单数据\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/inventory-filter.png)

您可以使用 **Export to CSV (导出到 CSV)** 按钮在电子表格应用程序（如 Microsoft Excel）中查看当前查询集。您也可以使用 **Query History (查询历史记录)** 和 **Run Advanced Queries (运行高级查询)** 按钮查看历史记录详细信息，并与 Amazon Athena 中的数据进行交互。

### 编辑 AWS Glue 爬网程序计划
<a name="systems-manager-inventory-glue-settings"></a>

预设情况下，AWS Glue 每天会爬取中央 Amazon S3 存储桶中的清单数据两次。如果您经常更改要在节点上收集的数据的类型，则可能需要更频繁地抓取数据，如以下过程中所述。

**重要**  
AWS Glue 按小时费率（按秒计费）向您的 AWS 账户收取执行爬网程序（发现数据）和 ETL 任务（处理和加载数据）的费用。在更改爬网程序计划前，请先查看 [AWS Glue 定价](https://aws.amazon.com/glue/pricing/)页面。

**更改清单数据爬网程序计划**

1. 通过 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 打开 AWS Glue 控制台。

1. 在导航窗格中，选择 **爬网程序**。

1. 在爬网程序列表中，选择 Systems Manager Inventory 数据爬网程序旁边的选项。爬网程序名称使用以下格式：

   `AWSSystemsManager-s3-bucket-name-Region-account_ID`

1. 选择 **Action (操作)**，然后选择 **Edit crawler (编辑爬网程序)**。

1. 在导航窗格中，选择 **Schedule (计划)**。

1. 在 **Cron expression (Cron 表达式)** 字段中，使用 cron 格式指定一个新计划。有关更多信息，请参阅 *AWS Glue Developer Guide* 中的[基于时间的任务和爬网程序日程](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html)。

**重要**  
您可以暂停爬网程序以停止 AWS Glue 产生的费用。如果暂停爬网程序或降低爬取数据的频率，则 Inventory **Detailed View (详细视图)** 可能会显示非当前数据。

# 使用筛选条件查询清单收集
<a name="inventory-query-filters"></a>

收集清单数据后，可以使用 AWS Systems Manager 中的筛选功能查询满足特定筛选条件的托管式节点列表。

**根据清单筛选条件查询节点**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，选择 **Inventory (清单)**。

1. 在 **Filter by resource groups, tags or inventory types** 部分中，选择筛选框。此时会显示预定义筛选器列表。

1. 选择要筛选的属性。例如，选择 `AWS:Application`。如果出现提示，选择要筛选的二级属性。例如，选择 `AWS:Application.Name`。

1. 从列表中选择一个分隔符。例如，选择 **Begin with**。此时筛选器中会显示一个文本框。

1. 在该文本框中输入一个值。例如，输入 *Amazon*（SSM Agent 命名为 *Amazon SSM Agent*）。

1. 按 Enter。系统返回一个托管式节点列表，其中包含以单词 *Amazon* 开头的应用程序名称。

**注意**  
您可以组合多个筛选条件来细化搜索。

# 聚合清单数据
<a name="inventory-aggregate"></a>

在为 AWS Systems Manager Inventory 配置托管式节点后，您可以查看清单数据的聚合计数。例如，假设您配置了数十或数百个托管式节点来收集 `AWS:Application` 清单类型。通过使用此部分中的信息，您即可查看配置为收集此数据的节点数的准确计数。

您还可以通过针对某数据类型进行聚合以查看特定清单详细信息。例如，`AWS:InstanceInformation` 清单类型收集 `Platform` 数据类型的操作系统平台信息。通过聚合 `Platform` 数据类型的数据，您可以快速查看运行 Windows Server、Linux 以及 macOS 的节点的数量。

本节中的过程介绍了如何使用 AWS Command Line Interface (AWS CLI) 查看清单数据的聚合计数。您还可以在 AWS Systems Manager 控制台的 **Inventory (清单)** 页面上预配置聚合计数。这些预配置的控制面板称为 *Inventory Insights*，而且它们提供清单配置问题的一键修正。

请注意有关清单数据的聚合计数的以下重要详细信息：
+ 如果您终止配置为收集清单数据的托管式节点，Systems Manager 会将清单数据保留 30 天，然后将其删除。对于正在运行的节点，系统将删除存在超过 30 天的清单数据。如果您需要将清单数据存储 30 天以上，可以使用 AWS Config 来记录历史记录，或者定期查询数据并将其上传到 Amazon Simple Storage Service (Amazon S3) 存储桶。
+ 如果先前已将某个节点配置为报告某一特定清单数据类型（例如 `AWS:Network`），后来您将该配置更改为停止收集该类型，聚合计数仍会显示 `AWS:Network` 数据，直到该节点已被终止并已经过 30 天为止。

有关如何快速配置并收集某一特定 AWS 账户 中所有节点（以及未来可能在该账户中创建的任何节点）中的清单数据的信息，请参阅 [清点 AWS 账户 中的所有托管式节点](inventory-collection.md#inventory-management-inventory-all)。

**Topics**
+ [聚合清单数据以查看收集特定类型数据的节点的计数](#inventory-aggregate-type)
+ [使用组聚合清单数据，以查看已配置为以及未配置为收集某个清单类型的节点](#inventory-aggregate-groups)

## 聚合清单数据以查看收集特定类型数据的节点的计数
<a name="inventory-aggregate-type"></a>

您可以使用 AWS Systems Manager [GetInventory](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetInventory.html) API 操作，查看收集一个或多个清单类型和数据类型的节点的聚合计数。例如，`AWS:InstanceInformation` 清单类型使您能够通过结合使用 GetInventory API 操作和 `AWS:InstanceInformation.PlatformType` 数据类型，来查看操作系统的聚合。以下是示例 AWS CLI 命令和输出。

```
aws ssm get-inventory --aggregators "Expression=AWS:InstanceInformation.PlatformType"
```

系统将返回类似于以下内容的信息。

```
{
   "Entities":[
      {
         "Data":{
            "AWS:InstanceInformation":{
               "Content":[
                  {
                     "Count":"7",
                     "PlatformType":"windows"
                  },
                  {
                     "Count":"5",
                     "PlatformType":"linux"
                  }
               ]
            }
         }
      }
   ]
}
```

**开始使用**  
确定要查看其计数的清单类型和数据类型。您可以通过在 AWS CLI 中运行以下命令查看支持聚合的清单类型和数据类型的列表。

```
aws ssm get-inventory-schema --aggregator
```

该命令返回支持聚合的清单类型和数据类型的 JSON 列表。**TypeName** 字段显示支持的清单类型。此处，**Name (名称)** 字段显示每个数据类型。例如，在以下列表中，`AWS:Application` 清单类型包括 `Name` 和 `Version` 的数据类型。

```
{
    "Schemas": [
        {
            "TypeName": "AWS:Application",
            "Version": "1.1",
            "DisplayName": "Application",
            "Attributes": [
                {
                    "DataType": "STRING",
                    "Name": "Name"
                },
                {
                    "DataType": "STRING",
                    "Name": "Version"
                }
            ]
        },
        {
            "TypeName": "AWS:InstanceInformation",
            "Version": "1.0",
            "DisplayName": "Platform",
            "Attributes": [
                {
                    "DataType": "STRING",
                    "Name": "PlatformName"
                },
                {
                    "DataType": "STRING",
                    "Name": "PlatformType"
                },
                {
                    "DataType": "STRING",
                    "Name": "PlatformVersion"
                }
            ]
        },
        {
            "TypeName": "AWS:ResourceGroup",
            "Version": "1.0",
            "DisplayName": "ResourceGroup",
            "Attributes": [
                {
                    "DataType": "STRING",
                    "Name": "Name"
                }
            ]
        },
        {
            "TypeName": "AWS:Service",
            "Version": "1.0",
            "DisplayName": "Service",
            "Attributes": [
                {
                    "DataType": "STRING",
                    "Name": "Name"
                },
                {
                    "DataType": "STRING",
                    "Name": "DisplayName"
                },
                {
                    "DataType": "STRING",
                    "Name": "ServiceType"
                },
                {
                    "DataType": "STRING",
                    "Name": "Status"
                },
                {
                    "DataType": "STRING",
                    "Name": "StartType"
                }
            ]
        },
        {
            "TypeName": "AWS:WindowsRole",
            "Version": "1.0",
            "DisplayName": "WindowsRole",
            "Attributes": [
                {
                    "DataType": "STRING",
                    "Name": "Name"
                },
                {
                    "DataType": "STRING",
                    "Name": "DisplayName"
                },
                {
                    "DataType": "STRING",
                    "Name": "FeatureType"
                },
                {
                    "DataType": "STRING",
                    "Name": "Installed"
                }
            ]
        }
    ]
}
```

您可以通过创建使用以下语法的命令来聚合任何所列清单类型的数据。

```
aws ssm get-inventory --aggregators "Expression=InventoryType.DataType"
```

下面是一些示例。

**示例 1**

此示例聚合节点使用的 Windows 角色的计数。

```
aws ssm get-inventory --aggregators "Expression=AWS:WindowsRole.Name"
```

**示例 2**

此示例聚合安装在节点上的应用程序的计数。

```
aws ssm get-inventory --aggregators "Expression=AWS:Application.Name"
```

**组合多个聚合器**  
您也可以在一个命令中组合多个清单类型和数据类型，以帮助您更好地了解数据。下面是一些示例。

**示例 1**

此示例聚合节点使用的操作系统类型的计数。它还会返回操作系统的特定名称。

```
aws ssm get-inventory --aggregators '[{"Expression": "AWS:InstanceInformation.PlatformType", "Aggregators":[{"Expression": "AWS:InstanceInformation.PlatformName"}]}]'
```

**示例 2**

此示例聚合在节点上运行的应用程序和每个应用程序的特定版本的计数。

```
aws ssm get-inventory --aggregators '[{"Expression": "AWS:Application.Name", "Aggregators":[{"Expression": "AWS:Application.Version"}]}]'
```

如果您愿意，也可以使用 JSON 文件中的一个或多个清单类型和数据类型创建聚合表达式并从 AWS CLI 调用该文件。该文件中的 JSON 必须使用以下语法。

```
[
       {
           "Expression": "string",
           "Aggregators": [
               {
                  "Expression": "string"
               }
           ]
       }
]
```

您必须使用 .json 文件扩展名保存该文件。

以下是使用多个清单类型和数据类型的示例。

```
[
       {
           "Expression": "AWS:Application.Name",
           "Aggregators": [
               {
                   "Expression": "AWS:Application.Version",
                   "Aggregators": [
                     {
                     "Expression": "AWS:InstanceInformation.PlatformType"
                     }
                   ]
               }
           ]
       }
]
```

使用以下命令从 AWS CLI 调用该文件。

```
aws ssm get-inventory --aggregators file://file_name.json
```

此命令会返回如下信息。

```
{"Entities": 
 [
   {"Data": 
     {"AWS:Application": 
       {"Content": 
         [
           {"Count": "3", 
            "PlatformType": "linux", 
            "Version": "2.6.5", 
            "Name": "audit-libs"}, 
           {"Count": "2", 
            "PlatformType": "windows", 
            "Version": "2.6.5", 
            "Name": "audit-libs"}, 
           {"Count": "4", 
            "PlatformType": "windows", 
            "Version": "6.2.8", 
            "Name": "microsoft office"}, 
           {"Count": "2", 
            "PlatformType": "windows", 
            "Version": "2.6.5", 
            "Name": "chrome"}, 
           {"Count": "1", 
            "PlatformType": "linux", 
            "Version": "2.6.5", 
            "Name": "chrome"}, 
           {"Count": "2", 
            "PlatformType": "linux", 
            "Version": "6.3", 
            "Name": "authconfig"}
         ]
       }
     }, 
    "ResourceType": "ManagedInstance"}
 ]
}
```

## 使用组聚合清单数据，以查看已配置为以及未配置为收集某个清单类型的节点
<a name="inventory-aggregate-groups"></a>

使用 Systems Manager Inventory 中的组，您可以快速查看已配置为和未配置为收集一个或多个清单类型的托管式节点的计数。利用组，可指定一个或多个清单类型和使用 `exists` 运算符的筛选条件。

例如，假设您已将四个托管式节点配置为收集以下清单类型：
+ 节点 1：`AWS:Application`
+ 节点 2：`AWS:File`
+ 节点 3：`AWS:Application`、`AWS:File`
+ 节点 4：`AWS:Network`

您可以从 AWS CLI 运行以下命令，以查看已配置为收集 `AWS:Application` 和 `AWS:File inventory` 类型的节点的数量。该响应还返回未配置为收集这两个清单类型的节点数的计数。

```
aws ssm get-inventory --aggregators 'Groups=[{Name=ApplicationAndFile,Filters=[{Key=TypeName,Values=[AWS:Application],Type=Exists},{Key=TypeName,Values=[AWS:File],Type=Exists}]}]'
```

该命令响应显示仅一个托管式节点已配置为收集 `AWS:Application` 和 `AWS:File` 清单类型。

```
{
   "Entities":[
      {
         "Data":{
            "ApplicationAndFile":{
               "Content":[
                  {
                     "notMatchingCount":"3"
                  },
                  {
                     "matchingCount":"1"
                  }
               ]
            }
         }
      }
   ]
}
```

**注意**  
组不会返回数据类型计数。此外，您也无法深入查询结果来查看已配置为或未配置为收集该清单类型的节点的 ID。

如果您愿意，也可以使用 JSON 文件中的一个或多个清单类型创建聚合表达式并从 AWS CLI 调用该文件。该文件中的 JSON 必须使用以下语法：

```
{
   "Aggregators":[
      {
         "Groups":[
            {
               "Name":"Name",
               "Filters":[
                  {
                     "Key":"TypeName",
                     "Values":[
                        "Inventory_type"
                     ],
                     "Type":"Exists"
                  },
                  {
                     "Key":"TypeName",
                     "Values":[
                        "Inventory_type"
                     ],
                     "Type":"Exists"
                  }
               ]
            }
         ]
      }
   ]
}
```

您必须使用 .json 文件扩展名保存该文件。

使用以下命令从 AWS CLI 调用该文件。

```
aws ssm get-inventory --cli-input-json file://file_name.json
```

**其他示例**  
以下示例说明了如何聚合清单数据，以查看已配置为和未配置为收集指定清单类型的托管式节点。这些示例使用 AWS CLI。每个示例包含一个带筛选条件的完整命令，您可以从命令行和示例 input.json 文件运行该命令（如果您更喜欢在文件中输入该信息）。

**示例 1**

此示例聚合已配置为和未配置为收集 `AWS:Application` 或 `AWS:File` 清单类型的节点的计数。

从 AWS CLI 运行以下命令。

```
aws ssm get-inventory --aggregators 'Groups=[{Name=ApplicationORFile,Filters=[{Key=TypeName,Values=[AWS:Application, AWS:File],Type=Exists}]}]'
```

如果您更喜欢使用文件，请将以下示例复制并粘贴到文件中并且将其另存为 input.json。

```
{
   "Aggregators":[
      {
         "Groups":[
            {
               "Name":"ApplicationORFile",
               "Filters":[
                  {
                     "Key":"TypeName",
                     "Values":[
                        "AWS:Application",
                        "AWS:File"
                     ],
                     "Type":"Exists"
                  }
               ]
            }
         ]
      }
   ]
}
```

从 AWS CLI 运行以下命令。

```
aws ssm get-inventory --cli-input-json file://input.json
```

此命令会返回如下信息。

```
{
   "Entities":[
      {
         "Data":{
            "ApplicationORFile":{
               "Content":[
                  {
                     "notMatchingCount":"1"
                  },
                  {
                     "matchingCount":"3"
                  }
               ]
            }
         }
      }
   ]
}
```

**示例 2**

此示例聚合已配置为和未配置为收集 `AWS:Application`、`AWS:File` 和 `AWS:Network` 清单类型的节点的计数。

从 AWS CLI 运行以下命令。

```
aws ssm get-inventory --aggregators 'Groups=[{Name=Application,Filters=[{Key=TypeName,Values=[AWS:Application],Type=Exists}]}, {Name=File,Filters=[{Key=TypeName,Values=[AWS:File],Type=Exists}]}, {Name=Network,Filters=[{Key=TypeName,Values=[AWS:Network],Type=Exists}]}]'
```

如果您更喜欢使用文件，请将以下示例复制并粘贴到文件中并且将其另存为 input.json。

```
{
   "Aggregators":[
      {
         "Groups":[
            {
               "Name":"Application",
               "Filters":[
                  {
                     "Key":"TypeName",
                     "Values":[
                        "AWS:Application"
                     ],
                     "Type":"Exists"
                  }
               ]
            },
            {
               "Name":"File",
               "Filters":[
                  {
                     "Key":"TypeName",
                     "Values":[
                        "AWS:File"
                     ],
                     "Type":"Exists"
                  }
               ]
            },
            {
               "Name":"Network",
               "Filters":[
                  {
                     "Key":"TypeName",
                     "Values":[
                        "AWS:Network"
                     ],
                     "Type":"Exists"
                  }
               ]
            }
         ]
      }
   ]
}
```

从 AWS CLI 运行以下命令。

```
aws ssm get-inventory --cli-input-json file://input.json
```

此命令会返回如下信息。

```
{
   "Entities":[
      {
         "Data":{
            "Application":{
               "Content":[
                  {
                     "notMatchingCount":"2"
                  },
                  {
                     "matchingCount":"2"
                  }
               ]
            },
            "File":{
               "Content":[
                  {
                     "notMatchingCount":"2"
                  },
                  {
                     "matchingCount":"2"
                  }
               ]
            },
            "Network":{
               "Content":[
                  {
                     "notMatchingCount":"3"
                  },
                  {
                     "matchingCount":"1"
                  }
               ]
            }
         }
      }
   ]
}
```

# 使用自定义清单
<a name="inventory-custom"></a>

您可以通过创建 AWS Systems Manager Inventory *自定义清单*，将所需的任何元数据分配给您的节点。例如，假设您负责管理数据中心内多个机架中的大量服务器，而且这些服务器已配置为 Systems Manager 托管式节点。目前，您在电子表格中存储服务器机架位置的相关信息。借助自定义清单，您可以指定每个节点的机架位置作为节点上的元数据。当您使用 Systems Manager 收集清单时，该元数据将与其他清单元数据一起收集。然后，您可以使用[资源数据同步](inventory-resource-data-sync.html)将所有清单元数据移植到中央 Amazon S3 存储桶，并查询这些数据。

**注意**  
Systems Manager 最多可为每个 AWS 账户 支持 20 个自定义清单类型。

要将自定义清单分配给某个节点，可以使用 Systems Manager [PutInventory](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutInventory.html) API 操作，如 [将自定义清单元数据分配给某个托管式节点](inventory-custom-metadata.md) 中所述。或者，您可以创建自定义清单 JSON 文件并将其上传到该节点。本部分描述了如何创建 JSON 文件。

以下包含自定义清单的示例 JSON 文件指定有关本地服务器的机架信息。此示例指定一种类型的自定义清单数据 (`"TypeName": "Custom:RackInformation"`)，在描述数据的 `Content` 下有多个条目。

```
{
    "SchemaVersion": "1.0",
    "TypeName": "Custom:RackInformation",
    "Content": {
        "Location": "US-EAST-02.CMH.RACK1",
        "InstalledTime": "2016-01-01T01:01:01Z",
        "vendor": "DELL",
        "Zone" : "BJS12",
        "TimeZone": "UTC-8"
      }
 }
```

您也可以在 `Content` 部分指定不同条目，如以下示例所示。

```
{
"SchemaVersion": "1.0",
"TypeName": "Custom:PuppetModuleInfo",
    "Content": [{
        "Name": "puppetlabs/aws",
        "Version": "1.0"
      },
      {
        "Name": "puppetlabs/dsc",
        "Version": "2.0"
      }
    ]
}
```

自定义清单的 JSON 架构需要 `SchemaVersion`、`TypeName` 和 `Content` 部分，但您可以定义这些部分的信息。

```
{
    "SchemaVersion": "user_defined",
    "TypeName": "Custom:user_defined",
    "Content": {
        "user_defined_attribute1": "user_defined_value1",
        "user_defined_attribute2": "user_defined_value2",
        "user_defined_attribute3": "user_defined_value3",
        "user_defined_attribute4": "user_defined_value4"
      }
 }
```

`TypeName` 值的长度限制为 100 个字符。此外，`TypeName` 值必须以大写的单词 `Custom` 开头。例如 `Custom:PuppetModuleInfo`。因此，以下示例将导致异常：`CUSTOM:PuppetModuleInfo`、`custom:PuppetModuleInfo`。

`Content` 部分包括属性和 *data*。这些项目不区分大小写。但是，如果您定义了属性（例如：“`Vendor`”：“DELL”），则在自定义清单文件中必须一致地引用此属性。如果您在一个文件中指定“`Vendor`”：“DELL”（在 `vendor` 中使用大写字母“V”），在另一个文件中指定“`vendor`”：“DELL”（在 `vendor` 中使用小写字母“v”），系统会返回错误。

**注意**  
您必须使用 `.json` 扩展名保存文件，并且您定义的清单必须仅包含字符串值。

创建文件之后，您必须在节点上保存文件。下表说明了自定义清单 JSON 文件必须存储在节点上的哪个位置。


****  

| 操作系统 | 路径 | 
| --- | --- | 
|  Linux  |  /var/lib/amazon/ssm/*node-id*/inventory/custom  | 
|  macOS  |  `/opt/aws/ssm/data/node-id/inventory/custom`  | 
|  Windows Server  |  %SystemDrive%\$1ProgramData\$1Amazon\$1SSM\$1InstanceData\$1*note-id*\$1inventory\$1custom  | 

有关如何使用自定义清单的示例，请参阅[使用 EC2 Systems Manager 自定义清单类型获取队列的磁盘利用率](https://aws.amazon.com/blogs/mt/get-disk-utilization-of-your-fleet-using-ec2-systems-manager-custom-inventory-types/)。

## 删除自定义清单
<a name="delete-custom-inventory"></a>

您可以使用 [DeleteInventory](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DeleteInventory.html) API 操作来删除自定义清单类型以及与该类型关联的数据。您可以使用 AWS Command Line Interface (AWS CLI) 调用 delete-inventory 命令来删除某一清单类型的所有数据。您可以使用 `SchemaDeleteOption` 调用 delete-inventory 命令来删除自定义清单类型。

**注意**  
清单类型也称为清单架构。

`SchemaDeleteOption` 参数包括以下选项：
+ **DeleteSchema**：此选项删除指定的自定义类型和与之关联的所有数据。如果需要，可以稍后重新创建架构。
+ **DisableSchema**：如果您选择此选项，系统将关闭当前版本，删除其所有数据，并在版本低于或等于已关闭版本时忽略所有新数据。您可以通过对高于已关闭版本的版本调用 [PutInventory](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutInventory.html) 操作来重新允许此清单类型。

**使用 AWS CLI 删除或关闭自定义清单**

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 运行以下命令来使用 `dry-run` 选项查看将从系统中删除哪些数据。此命令不会删除任何数据。

   ```
   aws ssm delete-inventory --type-name "Custom:custom_type_name" --dry-run
   ```

   系统将返回类似于以下内容的信息。

   ```
   {
      "DeletionSummary":{
         "RemainingCount":3,
         "SummaryItems":[
            {
               "Count":2,
               "RemainingCount":2,
               "Version":"1.0"
            },
            {
               "Count":1,
               "RemainingCount":1,
               "Version":"2.0"
            }
         ],
         "TotalCount":3
      },
      "TypeName":"Custom:custom_type_name"
   }
   ```

   有关如何了解和删除清单摘要的信息，请参阅 [了解删除清单摘要](#delete-custom-inventory-summary)。

1. 运行以下命令来删除自定义清单类型的所有数据。

   ```
   aws ssm delete-inventory --type-name "Custom:custom_type_name"
   ```
**注意**  
此命令的输出未显示删除进度。因此，TotalCount (总计数) 和 Remaining Count (剩余计数) 始终相同，因为系统尚未删除任何数据。您可以使用 describe-inventory-deletions 命令来显示删除进度，如本主题的下文所述。

   系统将返回类似于以下内容的信息。

   ```
   {
      "DeletionId":"system_generated_deletion_ID",
      "DeletionSummary":{
         "RemainingCount":3,
         "SummaryItems":[
            {
               "Count":2,
               "RemainingCount":2,
               "Version":"1.0"
            },
            {
               "Count":1,
               "RemainingCount":1,
               "Version":"2.0"
            }
         ],
         "TotalCount":3
      },
      "TypeName":"custom_type_name"
   }
   ```

   系统将从 Systems Manager Inventory 服务中删除指定的自定义清单类型的所有数据。

1. 运行如下命令。此命令对清单类型的当前版本执行以下操作：关闭当前版本、删除其所有数据，并在版本低于或等于已关闭版本时忽略所有新数据。

   ```
   aws ssm delete-inventory --type-name "Custom:custom_type_name" --schema-delete-option "DisableSchema"
   ```

   系统将返回类似于以下内容的信息。

   ```
   {
      "DeletionId":"system_generated_deletion_ID",
      "DeletionSummary":{
         "RemainingCount":3,
         "SummaryItems":[
            {
               "Count":2,
               "RemainingCount":2,
               "Version":"1.0"
            },
            {
               "Count":1,
               "RemainingCount":1,
               "Version":"2.0"
            }
         ],
         "TotalCount":3
      },
      "TypeName":"Custom:custom_type_name"
   }
   ```

   您可以使用以下命令查看已关闭的清单类型。

   ```
   aws ssm get-inventory-schema --type-name Custom:custom_type_name
   ```

1. 运行以下命令来删除清单类型。

   ```
   aws ssm delete-inventory --type-name "Custom:custom_type_name" --schema-delete-option "DeleteSchema"
   ```

   系统将删除指定的自定义类型的架构和所有清单数据。

   系统将返回类似于以下内容的信息。

   ```
   {
      "DeletionId":"system_generated_deletion_ID",
      "DeletionSummary":{
         "RemainingCount":3,
         "SummaryItems":[
            {
               "Count":2,
               "RemainingCount":2,
               "Version":"1.0"
            },
            {
               "Count":1,
               "RemainingCount":1,
               "Version":"2.0"
            }
         ],
         "TotalCount":3
      },
      "TypeName":"Custom:custom_type_name"
   }
   ```

### 查看删除状态
<a name="delete-custom-inventory-status"></a>

您可以使用 `describe-inventory-deletions` AWS CLI 命令来查看删除操作的状态。您可以指定删除 ID 来查看特定删除操作的状态。或者，您也可以省略删除 ID 来查看最近 30 天运行的所有删除的列表。

****

1. 运行以下命令来查看删除操作的状态。系统将返回 delete-inventory 摘要中的删除 ID。

   ```
   aws ssm describe-inventory-deletions --deletion-id system_generated_deletion_ID
   ```

   系统将返回最新状态。删除操作可能尚未完成。系统将返回类似于以下内容的信息。

   ```
   {"InventoryDeletions": 
     [
       {"DeletionId": "system_generated_deletion_ID", 
        "DeletionStartTime": 1521744844, 
        "DeletionSummary": 
         {"RemainingCount": 1, 
          "SummaryItems": 
           [
             {"Count": 1, 
              "RemainingCount": 1, 
              "Version": "1.0"}
           ], 
          "TotalCount": 1}, 
        "LastStatus": "InProgress", 
        "LastStatusMessage": "The Delete is in progress", 
        "LastStatusUpdateTime": 1521744844, 
        "TypeName": "Custom:custom_type_name"}
     ]
   }
   ```

   如果删除操作成功，则 `LastStatusMessage` 指出：Deletion is successful。

   ```
   {"InventoryDeletions": 
     [
       {"DeletionId": "system_generated_deletion_ID", 
        "DeletionStartTime": 1521744844, 
        "DeletionSummary": 
         {"RemainingCount": 0, 
          "SummaryItems": 
           [
             {"Count": 1, 
              "RemainingCount": 0, 
              "Version": "1.0"}
           ], 
          "TotalCount": 1}, 
        "LastStatus": "Complete", 
        "LastStatusMessage": "Deletion is successful", 
        "LastStatusUpdateTime": 1521745253, 
        "TypeName": "Custom:custom_type_name"}
     ]
   }
   ```

1. 运行以下命令来查看最近 30 天运行的所有删除的列表。

   ```
   aws ssm describe-inventory-deletions --max-results a number
   ```

   ```
   {"InventoryDeletions": 
     [
       {"DeletionId": "system_generated_deletion_ID", 
        "DeletionStartTime": 1521682552, 
        "DeletionSummary": 
         {"RemainingCount": 0, 
          "SummaryItems": 
           [
             {"Count": 1, 
              "RemainingCount": 0, 
              "Version": "1.0"}
           ], 
          "TotalCount": 1}, 
        "LastStatus": "Complete", 
        "LastStatusMessage": "Deletion is successful", 
        "LastStatusUpdateTime": 1521682852, 
        "TypeName": "Custom:custom_type_name"}, 
       {"DeletionId": "system_generated_deletion_ID", 
        "DeletionStartTime": 1521744844, 
        "DeletionSummary": 
         {"RemainingCount": 0, 
          "SummaryItems": 
           [
             {"Count": 1, 
              "RemainingCount": 0, 
              "Version": "1.0"}
           ], 
          "TotalCount": 1}, 
        "LastStatus": "Complete", 
        "LastStatusMessage": "Deletion is successful", 
        "LastStatusUpdateTime": 1521745253, 
        "TypeName": "Custom:custom_type_name"}, 
       {"DeletionId": "system_generated_deletion_ID", 
        "DeletionStartTime": 1521680145, 
        "DeletionSummary": 
         {"RemainingCount": 0, 
          "SummaryItems": 
           [
             {"Count": 1, 
              "RemainingCount": 0, 
              "Version": "1.0"}
           ], 
          "TotalCount": 1}, 
        "LastStatus": "Complete", 
        "LastStatusMessage": "Deletion is successful", 
        "LastStatusUpdateTime": 1521680471, 
        "TypeName": "Custom:custom_type_name"}
     ], 
    "NextToken": "next-token"
   ```

### 了解删除清单摘要
<a name="delete-custom-inventory-summary"></a>

为帮助您了解删除清单摘要的内容，请考虑以下示例。某用户将 Custom:RackSpace 清单分配给了三个节点。清单项目 1 和 2 使用自定义类型版本 1.0 ("SchemaVersion":"1.0")。清单项目 3 使用自定义类型版本 2.0 ("SchemaVersion":"2.0")。

RackSpace 自定义清单 1

```
{
   "CaptureTime":"2018-02-19T10:48:55Z",
   "TypeName":"CustomType:RackSpace",
   "InstanceId":"i-1234567890",
   "SchemaVersion":"1.0"   "Content":[
      {
         content of custom type omitted
      }
   ]
}
```

RackSpace 自定义清单 2

```
{
   "CaptureTime":"2018-02-19T10:48:55Z",
   "TypeName":"CustomType:RackSpace",
   "InstanceId":"i-1234567891",
   "SchemaVersion":"1.0"   "Content":[
      {
         content of custom type omitted
      }
   ]
}
```

RackSpace 自定义清单 3

```
{
   "CaptureTime":"2018-02-19T10:48:55Z",
   "TypeName":"CustomType:RackSpace",
   "InstanceId":"i-1234567892",
   "SchemaVersion":"2.0"   "Content":[
      {
         content of custom type omitted
      }
   ]
}
```

用户运行以下命令来预览将删除哪些数据。

```
aws ssm delete-inventory --type-name "Custom:RackSpace" --dry-run
```

系统将返回类似于以下内容的信息。

```
{
   "DeletionId":"1111-2222-333-444-66666",
   "DeletionSummary":{
      "RemainingCount":3,           
      "TotalCount":3,             
                TotalCount and RemainingCount are the number of items that would be deleted if this was not a dry run. These numbers are the same because the system didn't delete anything.
      "SummaryItems":[
         {
            "Count":2,             The system found two items that use SchemaVersion 1.0. Neither item was deleted.           
            "RemainingCount":2,
            "Version":"1.0"
         },
         {
            "Count":1,             The system found one item that uses SchemaVersion 1.0. This item was not deleted.
            "RemainingCount":1,
            "Version":"2.0"
         }
      ],

   },
   "TypeName":"Custom:RackSpace"
}
```

用户运行以下命令来删除 Custom:RackSpace 清单。

**注意**  
此命令的输出未显示删除进度。因此，`TotalCount` 和 `RemainingCount` 始终相同，因为系统尚未删除任何数据。您可以使用 `describe-inventory-deletions` 命令来显示删除进度。

```
aws ssm delete-inventory --type-name "Custom:RackSpace"
```

系统将返回类似于以下内容的信息。

```
{
   "DeletionId":"1111-2222-333-444-7777777",
   "DeletionSummary":{
      "RemainingCount":3,           There are three items to delete
      "SummaryItems":[
         {
            "Count":2,              The system found two items that use SchemaVersion 1.0.
            "RemainingCount":2,     
            "Version":"1.0"
         },
         {
            "Count":1,              The system found one item that uses SchemaVersion 2.0.
            "RemainingCount":1,     
            "Version":"2.0"
         }
      ],
      "TotalCount":3                
   },
   "TypeName":"RackSpace"
}
```

### 在 EventBridge 中查看清单删除操作
<a name="delete-custom-inventory-cwe"></a>

您可以配置 Amazon EventBridge，在用户删除自定义清单时创建事件。EventBridge 为自定义清单删除操作提供三种类型的事件：
+ **实例的删除操作**：特定托管式节点的自定义清单是否已成功删除。
+ **删除操作摘要**：删除操作的摘要。
+ **针对已关闭的自定义清单类型的警告**：如果用户对先前关闭的自定义清单类型版本调用了 [PutInventory](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutInventory.html) API 操作，则会发出警告事件。

下面是每个事件的示例。

**实例的删除操作**

```
{
   "version":"0",
   "id":"998c9cde-56c0-b38b-707f-0411b3ff9d11",
   "detail-type":"Inventory Resource State Change",
   "source":"aws.ssm",
   "account":"478678815555",
   "time":"2018-05-24T22:24:34Z",
   "region":"us-east-1",
   "resources":[
      "arn:aws:ssm:us-east-1:478678815555:managed-instance/i-0a5feb270fc3f0b97"
   ],
   "detail":{
      "action-status":"succeeded",
      "action":"delete",
      "resource-type":"managed-instance",
      "resource-id":"i-0a5feb270fc3f0b97",
      "action-reason":"",
      "type-name":"Custom:MyInfo"
   }
}
```

**删除操作摘要**

```
{
   "version":"0",
   "id":"83898300-f576-5181-7a67-fb3e45e4fad4",
   "detail-type":"Inventory Resource State Change",
   "source":"aws.ssm",
   "account":"478678815555",
   "time":"2018-05-24T22:28:25Z",
   "region":"us-east-1",
   "resources":[

   ],
   "detail":{
      "action-status":"succeeded",
      "action":"delete-summary",
      "resource-type":"managed-instance",
      "resource-id":"",
      "action-reason":"The delete for type name Custom:MyInfo was completed. The deletion summary is: {\"totalCount\":2,\"remainingCount\":0,\"summaryItems\":[{\"version\":\"1.0\",\"count\":2,\"remainingCount\":0}]}",
      "type-name":"Custom:MyInfo"
   }
}
```

**针对已关闭的自定义清单类型的警告**

```
{
   "version":"0",
   "id":"49c1855c-9c57-b5d7-8518-b64aeeef5e4a",
   "detail-type":"Inventory Resource State Change",
   "source":"aws.ssm",
   "account":"478678815555",
   "time":"2018-05-24T22:46:58Z",
   "region":"us-east-1",
   "resources":[
      "arn:aws:ssm:us-east-1:478678815555:managed-instance/i-0ee2d86a2cfc371f6"
   ],
   "detail":{
      "action-status":"failed",
      "action":"put",
      "resource-type":"managed-instance",
      "resource-id":"i-0ee2d86a2cfc371f6",
      "action-reason":"The inventory item with type name Custom:MyInfo was sent with a disabled schema version 1.0. You must send a version greater than 1.0",
      "type-name":"Custom:MyInfo"
   }
}
```

可以使用以下过程为自定义清单删除操作创建 EventBridge 规则。此过程向您介绍如何创建向 Amazon SNS 主题发送自定义清单删除操作通知的规则。开始前，请验证您是否拥有 Amazon SNS 主题，如果没有请新建一个。有关更多信息，请参阅 *Amazon Simple Notification Service Developer Guide* 中的[入门](https://docs.aws.amazon.com/sns/latest/dg/GettingStarted.html)。

**为删除清单操作配置 EventBridge**

1. 打开位于 [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/) 的 Amazon EventBridge 控制台。

1. 在导航窗格中，选择**规则**。

1. 选择**创建规则**。

1. 为规则输入名称和描述。

   规则不能与同一区域中的另一个规则和同一事件总线上的名称相同。

1. 对于**事件总线**，请选择要与此规则关联的事件总线。如果您希望此规则响应来自您自己的 AWS 账户的匹配事件，请选择 **defaul**（默认）。当您账户中的某个 AWS 服务发出一个事件时，它始终会发送到您账户的默认事件总线。

1. 对于**规则类型**，选择**具有事件模式的规则**。

1. 选择**下一步**。

1. 对于**事件源**，选择**AWS 事件或 EventBridge 合作伙伴事件**。

1. 在 **Event pattern**（事件模式）部分，选择 **Event pattern form**（事件模式表单）。

1. 对于**事件源**，选择**AWS 服务**。

1. 对于 ** service**（AWS 服务），选择 **Systems Manager**。

1. 对于 **Event type (事件类型)**，选择 **Inventory (清单)**。

1. 对于 **Specific detail type(s)**（具体详细信息类型），选择 **Inventory Resource State Change**（清单资源状态更改）。

1. 选择**下一步**。

1. 对于**目标类型**，选择**AWS 服务**。

1. 对于 **Select a target**（选择一个目标），选择 **SNS topic**（SNS 主题），然后对于 **Topic**（主题），选择您的主题。

1. 在 **Additional settings**（其他设置）部分，对于 **Configure target input**（配置目标输入），请验证已选择 **Matched event**（匹配的事件）。

1. 选择**下一步**。

1. （可选）为规则输入一个或多个标签。有关更多信息，请参阅 *Amazon EventBridge 用户指南*中的[标记 Amazon EventBridge 资源](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-tagging.html)。

1. 选择 **Next（下一步）**。

1. 查看规则详细信息并选择**创建规则**。

# 查看清单历史记录和变更跟踪
<a name="inventory-history"></a>

您可以使用 [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/) 查看所有托管式节点的 AWS Systems Manager Inventory 历史记录和更改跟踪。AWS Config 提供了关于 AWS 账户 中 AWS 资源配置的详细视图。这些信息包括资源之间的关联方式以及资源以前的配置方式，让您了解资源的配置和关系如何随着的时间的推移而更改。要查看清单历史记录和更改跟踪，您必须在 AWS Config 中打开以下资源：
+ SSM:ManagedInstanceInventory
+ SSM:PatchCompliance
+ SSM:AssociationCompliance
+ SSM:FileData

**注意**  
请注意关于 Inventory 历史记录和更改跟踪的以下重要详细信息：  
如果您使用 AWS Config 来跟踪系统中的更改，则必须配置 Systems Manager Inventory 以收集 `AWS:File` 元数据，以便能够查看 AWS Config (`SSM:FileData`) 中的文件更改。如果不进行此配置，则 AWS Config 不会跟踪系统上的文件更改。
通过打开 SSM:PatchCompliance 和 SSM:AssociationCompliance，您可以查看 Systems Manager Patch Manager 修补和 Systems Manager State Manager 关联的合规历史记录及更改跟踪。有关这些资源的合规性管理的更多信息，请参阅 [了解有关合规性的详细信息](compliance-about.md)。

以下过程介绍了如何使用 AWS Command Line Interface (AWS CLI) 在 AWS Config 中打开清单历史记录和更改跟踪记录。有关如何在 AWS Config 中选择和配置这些资源的更多信息，请参阅 *AWS Config Developer Guide *中的[选择哪些资源 AWS Config 记录](https://docs.aws.amazon.com/config/latest/developerguide/select-resources.html)。有关 AWS Config 定价的信息，请参阅 [ 定价](https://aws.amazon.com/config/pricing/)。

**开始之前**

AWS Config 需要 AWS Identity and Access Management (IAM) 权限才能获取有关 Systems Manager 资源的配置详细信息。在以下过程中，您必须为向 Systems Manager 资源提供 AWS Config 权限的 IAM 角色指定 Amazon Resource Name (ARN)。您可以将 `AWS_ConfigRole` 托管式策略附加到分配给 AWS Config 的 IAM 角色。有关该角色的更多信息，请参阅《AWS Config 开发人员指南》中的 [AWS 托管式策略：AWS\$1ConfigRole](https://docs.aws.amazon.com/config/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AWS_ConfigRole)。要了解如何创建 IAM 角色并将 `AWS_ConfigRole` 托管式策略分配给该角色，请参阅《*IAM 用户指南*》中的[创建向 AWS 服务 委托权限的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

**在 AWS Config 中打开清单历史记录和更改跟踪记录**

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 将以下 JSON 示例复制并粘贴到一个简单的文本文件中，并将其另存为 recordingGroup.json。

   ```
   {
      "allSupported":false,
      "includeGlobalResourceTypes":false,
      "resourceTypes":[
         "AWS::SSM::AssociationCompliance",
         "AWS::SSM::PatchCompliance",
         "AWS::SSM::ManagedInstanceInventory",
         "AWS::SSM::FileData"
      ]
   }
   ```

1. 运行以下命令以将 recordingGroup.json 文件加载到 AWS Config 中。

   ```
   aws configservice put-configuration-recorder --configuration-recorder name=myRecorder,roleARN=arn:aws:iam::123456789012:role/myConfigRole --recording-group file://recordingGroup.json
   ```

1. 运行以下命令以开始记录清单历史记录和变更跟踪。

   ```
   aws configservice start-configuration-recorder --configuration-recorder-name myRecorder
   ```

在配置历史记录和更改跟踪后，您可以通过在 Systems Manager 控制台中选择 **AWS Config** 按钮来深入了解某一特定托管式节点的历史记录。您可以从 **Managed Instances**（托管式实例）页面或 **Inventory**（清单）页面访问 **AWS Config** 按钮。根据您的监视器大小，您可能需要滚动到页面右侧以查看该按钮。

# 停止数据收集和删除清单数据
<a name="systems-manager-inventory-delete"></a>

如果您不再需要使用 AWS Systems Manager Inventory 以查看有关 AWS 资源的元数据，可以停止数据收集，并删除已收集到的数据。本节包含以下信息。

**Topics**
+ [停止数据收集](#systems-manager-inventory-delete-association)
+ [删除 Inventory 资源数据同步](#systems-manager-inventory-delete-RDS)

## 停止数据收集
<a name="systems-manager-inventory-delete-association"></a>

当您最初配置 Systems Manager 以收集清单数据时，系统会创建 State Manager 关联，用于定义计划和从中收集元数据的资源。您可以通过删除任何使用 `AWS-GatherSoftwareInventory` 文档的 State Manager 关联，来停止数据收集。

**删除 Inventory 关联**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，请选择 **State Manager**。

1. 选择一个使用 `AWS-GatherSoftwareInventory` 文档的关联，然后选择 **Delete (删除)**。

1. 对于任何其余使用 `AWS-GatherSoftwareInventory` 文档的关联重复步骤 3。

## 删除 Inventory 资源数据同步
<a name="systems-manager-inventory-delete-RDS"></a>

如果您不再需要使用 AWS Systems Manager Inventory 来查看有关您的 AWS 资源的元数据，那么我们还建议您删除用于清单数据收集的资源数据同步。

**删除 Inventory 资源数据同步**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，选择 **Inventory (清单)**。

1. 选择 **Resource Data Syncs (资源数据同步)**。

1. 在列表中，选择一个同步。
**重要**  
确保您选择了用于 Inventory 的同步。Systems Manager 可为多项工具的资源数据同步提供支持。如果选择的同步错误，则可能会导致 Systems Manager Explorer 或 Systems Manager Compliance 的数据聚合中断。

1. 选择 **Delete**（删除）

1. 对您要删除的所有其余资源数据同步，重复这些步骤。

1. 删除存储数据的 Amazon Simple Storage Service (Amazon S3) 存储桶。有关删除 Amazon S3 存储桶的信息，请参阅[删除存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)。

# 将自定义清单元数据分配给某个托管式节点
<a name="inventory-custom-metadata"></a>

以下过程为您演示了使用 AWS Systems Manager [PutInventory](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutInventory.html) API 操作将自定义清单元数据分配给托管式节点的过程。此示例将机架位置信息分配给某个节点。有关自定义清单的更多信息，请参阅 [使用自定义清单](inventory-custom.md)。

**将自定义清单元数据分配给某个节点**

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 运行以下命令，以便将机架位置信息分配给某个节点。

   **Linux**

   ```
   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"}]'
   ```

   **Windows**

   ```
   aws ssm put-inventory --instance-id "ID" --items "TypeName=Custom:RackInfo,SchemaVersion=1.0,CaptureTime=2021-05-22T10:01:01Z,Content=[{RackLocation='Bay B/Row C/Rack D/Shelf F'}]"
   ```

1. 运行以下命令以便查看此节点的自定义清单条目。

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

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

   ```
   {
       "InstanceId": "ID", 
       "TypeName": "Custom:RackInfo", 
       "Entries": [
           {
               "RackLocation": "Bay B/Row C/Rack D/Shelf E"
           }
       ], 
       "SchemaVersion": "1.0", 
       "CaptureTime": "2016-08-22T10:01:01Z"
   }
   ```

1. 运行以下命令以查看自定义清单架构。

   ```
   aws ssm get-inventory-schema --type-name Custom:RackInfo
   ```

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

   ```
   {
       "Schemas": [
           {
               "TypeName": "Custom:RackInfo",
               "Version": "1.0",
               "Attributes": [
                   {
                       "DataType": "STRING",
                       "Name": "RackLocation"
                   }
               ]
           }
       ]
   }
   ```

# 使用 AWS CLI 配置清单数据收集
<a name="inventory-collection-cli"></a>

以下过程为您演示了将 AWS Systems Manager Inventory 配置为从托管式节点收集元数据的过程。在配置清单收集时，应该首先创建 Systems Manager State Manager 关联。Systems Manager 将在关联运行时收集清单数据。如果您不首先创建关联，并尝试使用 Systems Manager Run Command（举例来说）调用 `aws:softwareInventory` 插件，则系统将返回以下错误：

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

**注意**  
一个节点一次只能配置一个清单关联。如果您为一个节点配置了两个或更多清单关联，则关联不会运行，而且系统不会收集清单数据。

## 快速配置 Inventory 的所有托管式节点 (CLI)
<a name="inventory-collection-cli-all"></a>

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

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

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 运行如下命令。

------
#### [ Linux & macOS ]

   ```
   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 ]

   ```
   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
   ```

------

**注意**  
此命令不允许 Inventory 收集 Windows 注册表或文件的元数据。要为这些数据类型启用清单，请使用下一个过程。

## 在托管式节点上手动配置 Inventory (CLI)
<a name="inventory-collection-cli-manual"></a>

通过以下过程，使用节点 ID 或标签在您的托管式节点上手动配置 AWS Systems Manager Inventory。

**手动配置 Inventory 的托管式节点 (CLI)**

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 运行以下命令，创建一个在节点上运行 Systems Manager Inventory 的 State Manager 关联。将每个*示例资源占位符*替换为您自己的信息。此命令将服务配置为每六小时运行一次，并从节点收集网络配置、Windows 更新和应用程序元数据。

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
   --name "AWS-GatherSoftwareInventory" \
   --targets "Key=instanceids,Values=an_instance_ID" \
   --schedule-expression "rate(240 minutes)" \
   --output-location "{ \"S3Location\": { \"OutputS3Region\": \"region_ID, for example us-east-2\", \"OutputS3BucketName\": \"amzn-s3-demo-bucket\", \"OutputS3KeyPrefix\": \"Test\" } }" \
   --parameters "networkConfig=Enabled,windowsUpdates=Enabled,applications=Enabled"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
   --name "AWS-GatherSoftwareInventory" ^
   --targets "Key=instanceids,Values=an_instance_ID" ^
   --schedule-expression "rate(240 minutes)" ^
   --output-location "{ \"S3Location\": { \"OutputS3Region\": \"region_ID, for example us-east-2\", \"OutputS3BucketName\": \"amzn-s3-demo-bucket\", \"OutputS3KeyPrefix\": \"Test\" } }" ^
   --parameters "networkConfig=Enabled,windowsUpdates=Enabled,applications=Enabled"
   ```

------

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

   ```
   {
       "AssociationDescription": {
           "ScheduleExpression": "rate(240 minutes)",
           "OutputLocation": {
               "S3Location": {
                   "OutputS3KeyPrefix": "Test",
                   "OutputS3BucketName": "Test bucket",
                   "OutputS3Region": "us-east-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-02573cafcfEXAMPLE"
                   ],
                   "Key": "InstanceIds"
               }
           ]
       }
   }
   ```

   您可以搭配使用 `Targets` 参数和 EC2 标签来确定大型目标节点组。请参阅以下示例。

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
   --name "AWS-GatherSoftwareInventory" \
   --targets "Key=tag:Environment,Values=Production" \
   --schedule-expression "rate(240 minutes)" \
   --output-location "{ \"S3Location\": { \"OutputS3Region\": \"us-east-2\", \"OutputS3BucketName\": \"amzn-s3-demo-bucket\", \"OutputS3KeyPrefix\": \"Test\" } }" \
   --parameters "networkConfig=Enabled,windowsUpdates=Enabled,applications=Enabled"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
   --name "AWS-GatherSoftwareInventory" ^
   --targets "Key=tag:Environment,Values=Production" ^
   --schedule-expression "rate(240 minutes)" ^
   --output-location "{ \"S3Location\": { \"OutputS3Region\": \"us-east-2\", \"OutputS3BucketName\": \"amzn-s3-demo-bucket\", \"OutputS3KeyPrefix\": \"Test\" } }" ^
   --parameters "networkConfig=Enabled,windowsUpdates=Enabled,applications=Enabled"
   ```

------

   您还可以搭配使用 `files` 和 `windowsRegistry` 清单类型与表达式来清点 Windows Server 节点上的清单文件和 Windows 注册表项。有关这些清单类型的更多信息，请参阅 [使用文件和 Windows 注册表清单](inventory-file-and-registry.md)。

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
   --name "AWS-GatherSoftwareInventory" \
   --targets "Key=instanceids,Values=i-0704358e3a3da9eb1" \
   --schedule-expression "rate(240 minutes)" \
   --parameters '{"files":["[{\"Path\": \"C:\\Program Files\", \"Pattern\": [\"*.exe\"], \"Recursive\": true}]"], "windowsRegistry": ["[{\"Path\":\"HKEY_LOCAL_MACHINE\\Software\\Amazon\", \"Recursive\":true}]"]}' \
   --profile dev-pdx
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
   --name "AWS-GatherSoftwareInventory" ^
   --targets "Key=instanceids,Values=i-0704358e3a3da9eb1" ^
   --schedule-expression "rate(240 minutes)" ^
   --parameters '{"files":["[{\"Path\": \"C:\\Program Files\", \"Pattern\": [\"*.exe\"], \"Recursive\": true}]"], "windowsRegistry": ["[{\"Path\":\"HKEY_LOCAL_MACHINE\\Software\\Amazon\", \"Recursive\":true}]"]}' ^
   --profile dev-pdx
   ```

------

1. 运行以下命令查看关联状态。

   ```
   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"
           }
   ]
   }
   ```

# 演练：使用资源数据同步聚合清单数据
<a name="inventory-resource-data-sync"></a>

以下演练介绍了如何使用 AWS Command Line Interface (AWS CLI) 为 AWS Systems Manager Inventory 创建资源数据同步配置。资源数据同步可将所有托管式节点中的清单数据自动移植到中央 Amazon Simple Storage Service (Amazon S3) 存储桶。每当发现新的清单数据时，同步操作会自动更新中央 Amazon S3 存储桶中的数据。

此演练还介绍了如何使用 Amazon Athena 和 Amazon Quick 查询及分析聚合数据。有关在 AWS 管理控制台 中使用 Systems Manager 创建资源数据同步的信息，请参阅 [演练：使用资源数据同步聚合清单数据](#inventory-resource-data-sync)。有关在 AWS 管理控制台 中使用 Systems Manager 从多个 AWS 区域 和账户中查询清单的信息，请参阅 [查询多个区域和账户的清单数据](systems-manager-inventory-query.md)。

**注意**  
本演练包括有关如何使用 AWS Key Management Service (AWS KMS) 加密同步的信息。Inventory 不收集任何用户特定、专有或敏感数据，因此加密是可选的。有关 AWS KMS 的更多信息，请参阅 [AWS Key Management Service Developer Guide](https://docs.aws.amazon.com/kms/latest/developerguide/)。

**开始前的准备工作**  
在开始本节中的演练之前，请审核或完成以下任务：
+ 从托管式节点收集清单数据。对于本演练中的 Amazon Athena 和 Amazon Quick 章节，我们建议您采集应用程序数据。有关如何收集清单数据的更多信息，请参阅 [配置清单收集](inventory-collection.md) 或 [使用 AWS CLI 配置清单数据收集](inventory-collection-cli.md)。
+ （可选）如果清单数据存储在使用 AWS Key Management Service (AWS KMS) 加密的 Amazon Simple Storage Service (Amazon S3) 存储桶中，您还必须配置 IAM 账户和 `Amazon-GlueServiceRoleForSSM` 服务角色，以便进行 AWS KMS 加密。如果您没有配置 IAM 账户和此角色，则当您选择控制台中的 **Detailed View (详细视图)** 选项卡时，Systems Manager 将显示 `Cannot load Glue tables`。有关更多信息，请参阅 [（可选）配置查看 AWS KMS 加密数据的权限](systems-manager-inventory-query.md#systems-manager-inventory-query-kms)。
+ （可选）如果希望使用 AWS KMS 来加密资源数据同步，则您必须创建包含以下策略的新密钥，或者必须更新现有密钥并向其添加此策略。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Id": "ssm-access-policy",
      "Statement": [
          {
              "Sid": "ssm-access-policy-statement",
              "Action": [
                  "kms:GenerateDataKey"
              ],
              "Effect": "Allow",
              "Principal": {
                  "Service": "ssm.amazonaws.com"
              },
              "Resource": "arn:aws:kms:us-east-1:123456789012:key/KMS_key_id",
              "Condition": {
                  "StringLike": {
                      "aws:SourceAccount": "123456789012"
                  },
                  "ArnLike": {
                      "aws:SourceArn": "arn:aws:ssm:*:123456789012:resource-data-sync/*"
                  }
              }
          }
      ]
  }
  ```

------

**为 Inventory 创建资源数据同步**

1. 通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 创建用来存储聚合清单数据的存储桶。有关更多信息，请参阅 *Amazon Simple Storage Service 用户指南*中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。请记下存储桶名称和创建此存储桶的 AWS 区域。

1. 创建存储桶后，选择 **Permissions** 选项卡，然后选择 **Bucket Policy**。

1. 将下面的存储桶策略复制并粘贴到策略编辑器中。将 amzn-s3-demo-bucket 和 *account-id* 分别替换为您创建的 Amazon S3 存储桶的名称和有效的 AWS 账户 ID。添加多个账户时，请为每个账户添加一个附加条件字符串和 ARN。添加一个账户时，请从示例中删除附加占位符。或者，将 *bucket-prefix* 替换为 Amazon S3 前缀（子目录）的名称。如果您未创建前缀，则从该策略的 ARN 中删除 *bucket-prefix/*。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": " SSMBucketDelivery",
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": "s3:PutObject",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/bucket-prefix/*/accountid=111122223333/*"
               ],
               "Condition": {
                   "StringEquals": {
                       "s3:x-amz-acl": "bucket-owner-full-control",
                       "aws:SourceAccount": [
                           "111122223333",
                           "444455556666",
                           "123456789012",
                           "777788889999"
                       ]
                   },
                   "ArnLike": {
                       "aws:SourceArn": [
                           "arn:aws:ssm:*:111122223333:resource-data-sync/*",
                           "arn:aws:ssm:*:444455556666:resource-data-sync/*",
                           "arn:aws:ssm:*:123456789012:resource-data-sync/*",
                           "arn:aws:ssm:*:777788889999:resource-data-sync/*"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. （可选）如果要加密同步，则必须将以下条件添加到上一步中列出的策略中。将这些内容添加在 `StringEquals` 部分中。

   ```
   "s3:x-amz-server-side-encryption":"aws:kms",
   "s3:x-amz-server-side-encryption-aws-kms-key-id":"arn:aws:kms:region:account_ID:key/KMS_key_ID"
   ```

   示例如下：

   ```
   "StringEquals": {
             "s3:x-amz-acl": "bucket-owner-full-control",
             "aws:SourceAccount": "account-id",
             "s3:x-amz-server-side-encryption":"aws:kms",
             "s3:x-amz-server-side-encryption-aws-kms-key-id":"arn:aws:kms:region:account_ID:key/KMS_key_ID"
           }
   ```

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关更多信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. （可选）如果要加密同步，请运行以下命令，以验证存储桶策略是否强制执行 AWS KMS 密钥要求。将每个*示例资源占位符*替换为您自己的信息。

------
#### [ Linux & macOS ]

   ```
   aws s3 cp ./A_file_in_the_bucket s3://amzn-s3-demo-bucket/prefix/ \
   --sse aws:kms \
   --sse-kms-key-id "arn:aws:kms:region:account_ID:key/KMS_key_id" \
   --region region, for example, us-east-2
   ```

------
#### [ Windows ]

   ```
   aws s3 cp ./A_file_in_the_bucket s3://amzn-s3-demo-bucket/prefix/ ^ 
       --sse aws:kms ^
       --sse-kms-key-id "arn:aws:kms:region:account_ID:key/KMS_key_id" ^
       --region region, for example, us-east-2
   ```

------

1. 运行以下命令，以使用您在此过程开始时创建的 Amazon S3 存储桶创建资源数据同步配置。此命令从您登录的 AWS 区域创建同步。
**注意**  
如果同步和目标 Amazon S3 存储桶位于不同区域中，您可能需要支付数据传输费用。有关更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

------
#### [ Linux & macOS ]

   ```
   aws ssm create-resource-data-sync \
   --sync-name a_name \
   --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=prefix_name, if_specified,SyncFormat=JsonSerDe,Region=bucket_region"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-resource-data-sync ^
   --sync-name a_name ^
   --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=prefix_name, if_specified,SyncFormat=JsonSerDe,Region=bucket_region"
   ```

------

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

------
#### [ Linux & macOS ]

   ```
   aws ssm create-resource-data-sync \
       --sync-name InventoryDataWest \
       --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=HybridEnv,SyncFormat=JsonSerDe,Region=us-west-2" 
       --region us-west-1
   ```

------
#### [ Windows ]

   ```
   aws ssm create-resource-data-sync ^ 
   --sync-name InventoryDataWest ^
   --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=HybridEnv,SyncFormat=JsonSerDe,Region=us-west-2" ^ --region us-west-1
   ```

------

   （可选）如果要使用 AWS KMS 加密同步，请运行以下命令创建同步。如果您加密同步，则 AWS KMS 密钥和 Amazon S3 存储桶必须位于同一区域中。

------
#### [ Linux & macOS ]

   ```
   aws ssm create-resource-data-sync \
   --sync-name sync_name \
   --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=prefix_name, if_specified,SyncFormat=JsonSerDe,AWSKMSKeyARN=arn:aws:kms:region:account_ID:key/KMS_key_ID,Region=bucket_region" \
   --region region
   ```

------
#### [ Windows ]

   ```
   aws ssm create-resource-data-sync ^
   --sync-name sync_name ^
   --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=prefix_name, if_specified,SyncFormat=JsonSerDe,AWSKMSKeyARN=arn:aws:kms:region:account_ID:key/KMS_key_ID,Region=bucket_region" ^
   --region region
   ```

------

1. 运行以下命令查看同步配置的状态。

   ```
   aws ssm list-resource-data-sync 
   ```

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

   ```
   aws ssm list-resource-data-sync --region us-west-1
   ```

1. 在成功创建同步配置后，检查 Amazon S3 中的目标存储桶。清单数据应在几分钟内显示。

**使用 Amazon Athena 中的数据**

以下部分介绍如何在 Amazon Athena 中查看和查询数据。在开始之前，我们建议您首先了解 Athena。有关更多信息，请参阅 *Amazon Athena 用户指南*中的[什么是 Amazon Athena？](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)和[使用数据](https://docs.aws.amazon.com/athena/latest/ug/work-with-data.html)。

**在 Amazon Athena 中查看和查询数据**

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

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

   ```
   CREATE DATABASE ssminventory
   ```

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

1. 将以下语句复制并粘贴到查询编辑器中，然后选择 **Run Query**。将 amzn-s3-demo-bucket 和 *bucket\$1prefix* 分别替换为 Amazon S3 目标的名称和前缀。

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

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

   ```
   MSCK REPAIR TABLE ssminventory.AWS_Application
   ```

   系统将对表进行分区。
**注意**  
如果您从其他 AWS 区域或 AWS 账户中创建资源数据同步，则必须再次运行此命令以更新分区。您可能还需要更新 Amazon S3 存储桶策略。

1. 要预览数据，请选择 `AWS_Application` 表旁边的视图图标。  
![\[Amazon Athena 中的预览数据图标。\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/sysman-inventory-resource-data-sync-walk.png)

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

   ```
   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`（它是 Linux、macOS 和 Windows Server 的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上出现的 AWS 应用程序）的计数。

1. 分别将以下语句复制并粘贴到查询编辑器中，将 amzn-s3-demo-bucket 和 *bucket-prefix* 分别替换为 Amazon S3 的相应信息，然后选择**运行查询**。这些语句将在 Athena 中设置其他清单表。

   ```
   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://amzn-s3-demo-bucket/bucket-prefix/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://amzn-s3-demo-bucket/bucket-prefix/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://amzn-s3-demo-bucket/bucket-prefix/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://amzn-s3-demo-bucket/bucket-prefix/AWS:Network/'
   ```

   ```
   MSCK REPAIR TABLE ssminventory.AWS_Network
   ```

   ```
   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://amzn-s3-demo-bucket/bucket-prefix/AWS:PatchSummary/'
   ```

   ```
   MSCK REPAIR TABLE ssminventory.AWS_PatchSummary
   ```

**使用 Amazon Quick 中的数据**

以下部分进行了概述，并包含用于在 Amazon Quick 中构建可视化内容的链接。

**在 Amazon Quick 中构建可视化内容**

1. 注册 [Amazon Quick](https://quicksight.aws/)，然后登录到 Quick 控制台。

1. 从 `AWS_Application` 表和您创建的任何其他表创建数据集。有关更多信息，请参阅《Amazon Quick 用户指南》中的 [Creating a dataset using Amazon Athena data](https://docs.aws.amazon.com/quicksuite/latest/userguide/create-a-data-set-athena.html)**。

1. 联接表。例如，您可以联接 `AWS_InstanceInformation` 中的 `instanceid` 列，因为它与其他清单表中的 `resourceid` 列匹配。有关联表的更多信息，请参阅《Amazon Quick 用户指南》中的 [Joining data](https://docs.aws.amazon.com/quicksuite/latest/userguide/joining-data.html)**。

1. 构建可视化内容。有关更多信息，请参阅《Amazon Quick 用户指南》**中的 [Analyses and reports: Visualizing data in Amazon Quick Sight](https://docs.aws.amazon.com/quicksuite/latest/userguide/working-with-visuals.html)。

# 对 Systems Manager Inventory 的问题进行故障排除
<a name="syman-inventory-troubleshooting"></a>

本主题包括有关如何排除 AWS Systems Manager Inventory 中常见错误或问题的信息。如果您在 Systems Manager 中查看节点时遇到问题，请参阅 [排除托管式节点可用性的问题](fleet-manager-troubleshooting-managed-nodes.md)。

**Topics**
+ [不支持多次应用所有使用文档“`AWS-GatherSoftwareInventory`”的关联](#systems-manager-inventory-troubleshooting-multiple)
+ [清单执行状态永远不会退出待处理状态](#inventory-troubleshooting-pending)
+ [`AWS-ListWindowsInventory` 文档无法运行](#inventory-troubleshooting-ListWindowsInventory)
+ [控制台不显示 Inventory“控制面板”\$1“详细视图”\$1“设置”选项卡](#inventory-troubleshooting-tabs)
+ [UnsupportedAgent](#inventory-troubleshooting-unsupported-agent)
+ [Skipped](#inventory-troubleshooting-skipped)
+ [失败](#inventory-troubleshooting-failed)
+ [Amazon EC2 实例的库存合规性失败](#inventory-troubleshooting-ec2-compliance)
+ [S3 存储桶对象包含旧数据](#systems-manager-inventory-troubleshooting-s3)

## 不支持多次应用所有使用文档“`AWS-GatherSoftwareInventory`”的关联
<a name="systems-manager-inventory-troubleshooting-multiple"></a>

错误消息 `Multiple apply all associations with document 'AWS-GatherSoftwareInventory' are not supported` 表示：您尝试在其中*为所有节点*配置 Inventory 关联的一个或多个 AWS 区域，已配置有一个适用于所有节点的清单关联。如有必要，您可以删除所有节点的现有清单关联，然后创建新的清单关联。要查看现有清单关联，在 Systems Manager 控制台中选择 **State Manager**，然后找到使用 `AWS-GatherSoftwareInventory` SSM 文档的关联。如果跨多个区域创建了所有节点的现有清单关联，并且您希望创建一个新的清单关联，则必须从现有清单关联存在的每个区域中删除它。

## 清单执行状态永远不会退出待处理状态
<a name="inventory-troubleshooting-pending"></a>

清单收集永远不会退出 `Pending` 状态的原因有两个：
+ 所选 AWS 区域 中没有节点：

  如果您使用 Systems Manager Quick Setup 创建全局清单关联，并且如果所选区域中没有可用节点，则清单关联（`AWS-GatherSoftwareInventory` 文档）的状态将显示 `Pending`。****
+ 权限不足

  如果一个或多个节点没有运行 Systems Manager Inventory 的权限，清单关联将显示 `Pending`。验证并确保 AWS Identity and Access Management (IAM) 实例配置文件包含 **AmazonSSMManagedInstanceCore** 托管式策略。有关如何将此策略添加到实例配置文件的信息，请参阅[EC2 实例权限的替代配置](setup-instance-permissions.md#instance-profile-add-permissions)。

  实例配置文件必须至少拥有以下 IAM 权限。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "ssm:DescribeAssociation",
                  "ssm:ListAssociations",
                  "ssm:ListInstanceAssociations",
                  "ssm:PutInventory",
                  "ssm:PutComplianceItems",
                  "ssm:UpdateAssociationStatus",
                  "ssm:UpdateInstanceAssociationStatus",
                  "ssm:UpdateInstanceInformation",
                  "ssm:GetDocument",
                  "ssm:DescribeDocument"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------

## `AWS-ListWindowsInventory` 文档无法运行
<a name="inventory-troubleshooting-ListWindowsInventory"></a>

`AWS-ListWindowsInventory` 文档已被弃用。请勿使用此文档收集清单，而应使用 [配置清单收集](inventory-collection.md) 中描述的其中一个进程。

## 控制台不显示 Inventory“控制面板”\$1“详细视图”\$1“设置”选项卡
<a name="inventory-troubleshooting-tabs"></a>

仅在提供 Amazon Athena 的 AWS 区域 中提供了 Inventory **Detailed View (详细视图)** 页面。如果在 Inventory 页面上未显示以下选项卡，则意味着 Athena 在该区域中不可用，并且您无法使用 **Detailed View (详细视图)** 查询数据。

![\[显示 Inventory“控制面板”|“详细视图”|“设置”选项卡\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/inventory-detailed-view-for-error.png)


## UnsupportedAgent
<a name="inventory-troubleshooting-unsupported-agent"></a>

如果清单关联的详细状态显示为 **UnsupportedAgent**，并且**关联状态**显示为**失败**，则说明托管式节点上的 AWS Systems Manager SSM Agent 版本不正确。例如，要创建全局清单关联（用于清点 AWS 账户 中的所有节点），您必须使用 SSM Agent 版本 2.0.790.0 或更高版本。您可以在 **Managed Instances**（托管式实例）页面的 **Agent version**（代理版本）列中查看各个节点上运行的代理版本。有关如何在节点上更新 SSM Agent 的信息，请参阅 [使用 Run Command 更新 SSM Agent](run-command-tutorial-update-software.md#rc-console-agentexample)。

## Skipped
<a name="inventory-troubleshooting-skipped"></a>

如果某个节点的清单关联状态显示为**跳过**，则意味着该节点已经有更高优先级清单关联在运行。当多个清单关联可能应用于同一个托管节点时，Systems Manager 会遵循特定的优先顺序。

### 清单关联优先顺序
<a name="inventory-association-priority-order"></a>

Systems Manager 按照以下优先顺序应用清单关联：

1. **Quick Setup清单关联**：使用 Quick Setup 和统一控制台创建的关联。这些关联的名称以 `AWS-QuickSetup-SSM-CollectInventory-` 开头，并以所有托管节点为目标。

1. **显式清单关联**：使用以下方法，以特定托管节点为目标的关联：
   + 实例 ID
   + 标签键值对
   + AWS 资源组

1. **全局清单关联**：以所有托管节点为目标（使用 `--targets "Key=InstanceIds,Values=*"`），但**并非**通过 Quick Setup 创建的关联。

### 常见场景
<a name="inventory-skipped-scenarios"></a>

**场景 1：Quick Setup 关联优先于显式关联**
+ 您拥有一个以所有实例为目标的清单关联 Quick Setup
+ 您通过标签创建一个以特定托管节点为目标的手动关联
+ 结果：手动关联显示为 `Skipped`，详细状态为 `OverriddenByExplicitInventoryAssociation`
+ 该 Quick Setup 关联继续从所有实例收集清单

**场景 2：显式关联优先于全局关联**
+ 您拥有一个以所有实例为目标的全局清单关联（并非通过 Quick Setup 创建）
+ 您创建一个以特定实例为目标的关联
+ 结果：对于特定的目标实例，全局关联显示 `Skipped`
+ 显式关联运行在目标实例上

### 解决步骤
<a name="inventory-skipped-resolution"></a>

**如果您想使用自己的清单关联而非 Quick Setup：**

1. **识别 Quick Setup 关联**：在 Systems Manager 控制台中，转至 State Manager 并查找名字以 `AWS-QuickSetup-SSM-CollectInventory-` 开头的关联。

1. **删除 Quick Setup 配置**：
   + 转至 Systems Manager 控制台中的 Quick Setup。
   + 查找清单收集配置。
   + 删除 Quick Setup 配置（这将移除已关联的清单关联）。
**注意**  
无需手动删除通过 Quick Setup 创建的关联。

1. **验证关联是否运行**：删除 Quick Setup 配置后，显式清单关联应该已成功开始运行。

**如果您要修改现有行为：**
+ 要查看现有所有清单关联，请在 Systems Manager 控制台中选择 **State Manager**，然后找到使用 `AWS-GatherSoftwareInventory` SSM 文档的关联。
+ 请谨记，每个托管节点一次只能有一个活动的清单关联。

**重要**  
当为跳过的节点分配的（更高优先级）清单关联运行时，仍会从跳过的节点收集清单数据。
Quick Setup 清单关联优先于其他所有类型，即使是具有显式目标的类型。
当任何关联被更高优先级的关联覆盖时，无论关联类型如何，都会显示详细的状态消息 `OverriddenByExplicitInventoryAssociation`。

## 失败
<a name="inventory-troubleshooting-failed"></a>

如果某个节点的清单关联状态显示 **Failed**（失败），则意味着节点上分配了多个清单关联。一个节点一次只能分配一个清单关联。清单关联使用 `AWS-GatherSoftwareInventory` AWS Systems Manager 文档（SSM 文档）。可以使用 AWS Command Line Interface (AWS CLI) 运行以下命令来查看节点的关联列表。

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

## Amazon EC2 实例的库存合规性失败
<a name="inventory-troubleshooting-ec2-compliance"></a>

如果为 Amazon Elastic Compute Cloud (Amazon EC2) 实例分配多个库存关联，则该实例的库存合规性可能会失败。

 要解决此问题，请删除分配给实例的一个或多个库存关联。有关更多信息，请参阅[删除关联](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-state-manager-delete-association.html)。

**注意**  
如果您为一个托管式节点创建多个清单关联，请注意以下行为：  
可为每个节点分配一个以*所有*节点为目标的清单关联 (--targets "Key=InstanceIds,Values=\$1")。
还可以为每个节点分配一个特定关联，该关联使用标签键-值对或 AWS 资源组。
如果为某个节点分配了多个清单关联，则对于尚未运行的关联，状态将显示为 *Skipped*（已跳过）。最近运行的关联将显示清单关联的实际状态。
如果为某个节点分配了多个清单关联，并且每个关联都使用标签键 - 值对，则这些清单关联将因标签冲突而无法在该节点上运行。关联仍会在没有标签键 - 值冲突的节点上运行。

## S3 存储桶对象包含旧数据
<a name="systems-manager-inventory-troubleshooting-s3"></a>

清单关联成功并发现新数据后，Amazon S3 存储桶对象中的数据将会更新。关联运行但失败时，每个节点的 Amazon S3 存储桶对象都会更新，但在这种情况下，对象内的数据不会更新。只有当关联成功运行时，Amazon S3 存储桶对象内的数据才会更新。清单关联失败时，将在 Amazon S3 存储桶对象中看到旧数据。