

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

# 在 Distributor 中创建软件包
<a name="distributor-working-with-packages-create"></a>

要创建软件包，请准备您的可安装软件或资产，每个操作系统平台一个文件。需要至少一个文件才能创建软件包。

有时，不同的平台可以使用同一个文件，但附加到软件包的所有文件都必须列在清单的 `Files` 部分中。如果您在控制台中使用简单工作流创建软件包，则会为您生成清单。最多可以向一个文档附加 20 个文件。每个文件的最大大小为 1 GB。有关支持的平台的更多信息，请参阅 [支持的软件包平台和架构](distributor.md#what-is-a-package-platforms)。

创建软件包时，系统会创建新的 [SSM 文档](documents.md)。借助此文档，您可以将该软件包部署到托管式节点。

仅出于演示目的，您可以从我们的网站下载示例软件包 [ExplePackage.zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/ExamplePackage.zip)。在示例软件包中包括一个完整 JSON 清单和三个 .zip 文件，这些文件包含 PowerShell v7.0.0 的安装程序。安装和卸载脚本不包含有效命令。虽然您必须在 **Advanced (高级)** 工作流中将每个软件可安装文件和脚本压缩为 .zip 文件以创建软件包，但您不会在 **Simple (简单)** 工作流中压缩可安装资产。

**Topics**
+ [使用简单工作流创建软件包](#distributor-working-with-packages-create-simple)
+ [使用高级工作流创建软件包](#distributor-working-with-packages-create-adv)

## 使用简单工作流创建软件包
<a name="distributor-working-with-packages-create-simple"></a>

本节介绍如何通过在 Distributor 控制台中选择**简单**软件包创建工作流在 Distributor 中创建软件包。Distributor 是 AWS Systems Manager 中的一项工具。要创建软件包，请准备您的可安装资产，每个操作系统平台一个文件。需要至少一个文件才能创建软件包。**简单**软件包创建过程为您生成安装和卸载脚本、文件哈希以及 JSON 格式的清单。**简单**工作流处理上传和压缩可安装文件以及创建新软件包和关联的 [SSM 文档](documents.md)的过程。有关支持的平台的更多信息，请参阅 [支持的软件包平台和架构](distributor.md#what-is-a-package-platforms)。

在使用简单方法创建软件包时，Distributor 将为您创建 `install` 和 `uninstall` 脚本。但是，当您为就地更新创建软件包时，您必须在 **Update script (更新脚本)** 选项卡上提供自己的 `update` 脚本内容。在为 `update` 脚本添加输入命令时，Distributor 将该脚本与 `install` 和 `uninstall` 脚本一起包含在它创建的 .zip 包中。

**注意**  
使用 `In-place` 更新选项，可将新文件或更新的文件添加到现有的软件包安装中，而无需使关联的应用程序离线。

**若要使用简单工作流创建软件包**

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

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

1. 在 Distributor 主页上，选择 **Create package (创建软件包)**，然后选择**简单**。

1. 在 **Create package (创建软件包)** 页面上，输入软件包的名称。软件包名称可以包含字母、数字、句点、短划线和下划线。名称应足够通用，以适用于所有版本的软件包附件，但又足够具体，可用于识别软件包的用途。

1. （可选）对于 **Version name (版本名称)**，请输入版本名称。版本名称最多可以包含 512 个字符，并且不能包含特殊字符。

1. 对于 **Location (位置)**，请使用存储桶名称和前缀或存储桶 URL 选择一个存储桶。

1. 对于 **Upload software**（上载软件），选择 **Add software**（添加软件），然后导航到具有 `.rpm`、`.msi` 或 `.deb` 扩展名的可安装软件文件。如果文件名包含空格，则上载将失败。您可以在单个操作中上传多个软件文件。

1. 对于**目标平台**，请验证为每个可安装文件显示的目标操作系统平台是否正确。如果显示的操作系统不正确，请从下拉列表中选择正确的操作系统。

   对于**简单**软件包创建工作流中，由于您仅将每个可安装文件上传一次，因此，需要使用额外的步骤以指示 Distributor 在多个操作系统上将单个文件指定为目标。例如，如果您上传名为 `Logtool_v1.1.1.rpm` 的可安装软件文件，则必须更改**简单**工作流中的某些默认值，以同时在受支持的 Amazon Linux 和 Ubuntu Server 操作系统版本上将相同的软件指定为目标。在针对多个平台时，请执行以下操作之一。
   + 改用**高级**工作流，在开始之前将每个可安装文件压缩为 .zip 文件，然后手动编写清单，以便在多个操作系统平台或版本中将一个可安装文件指定为目标。有关更多信息，请参阅 [使用高级工作流创建软件包](#distributor-working-with-packages-create-adv)。
   + 在**简单**工作流中手动编辑清单文件，以便在多个操作系统平台或版本中将 .zip 文件指定为目标。有关如何执行此操作的更多信息，请参阅 [步骤 2：创建 JSON 软件包清单](#packages-manifest) 中步骤 4 的末尾。

1. 对于 **Platform version (平台版本)**，验证并确保所显示的操作系统平台版本是 **\_any**（主要发行版本后跟一个通配符 (7.\*)），或您希望软件适用于的确切操作系统发行版本。有关指定操作系统平台版本的更多信息，请参阅 [步骤 2：创建 JSON 软件包清单](#packages-manifest) 中的步骤 4。

1. 对于 **Architecture (架构)**，请从下拉列表中为每个可安装文件选择正确的处理器架构。有关支持的处理器架构的更多信息，请参阅 [支持的软件包平台和架构](distributor.md#what-is-a-package-platforms)。

1. （可选）展开 **Scripts (脚本)**，然后查看 Distributor 为可安装软件生成的脚本。

1. （可选）要提供用于就地更新的更新脚本，请展开 **Scripts（脚本）**，选择 **Update script（更新脚本）**选项卡，然后输入更新脚本命令。

   Systems Manager 不会代表您生成更新脚本。

1. 要添加更多可安装的软件文件，请选择 **Add software (添加软件)**。否则，转到下一步。

1. （可选）展开**清单**，然后审核 Distributor 为您的可安装软件包生成的 JSON 清单。如果您在开始此过程后更改了有关软件的任何信息（例如平台版本或目标平台），请选择 **Generate manifest (生成清单)** 以显示更新的软件包清单。

   如果要将可在多个操作系统上安装的软件指定为目标，则可以手动编辑清单，如步骤 8 中所述。有关编辑该清单的更多信息，请参阅 [步骤 2：创建 JSON 软件包清单](#packages-manifest)。

1. 选择 **Create package (创建软件包)**。

等待 Distributor 完成上传软件和创建软件包。 Distributor 显示每个可安装文件的上传状态。根据要添加的软件包的数量和大小，这可能需要几分钟时间。Distributor 会自动将您重定向到新软件包的 **Package details (软件包详细信息)** 页面，但您可以选择在上载软件之后自行打开此页面。**Package details (软件包详细信息)** 页面不会显示有关软件包的所有信息，直到 Distributor 完成软件包创建过程为止。要停止上传和软件包创建过程，请选择**取消**。

如果 Distributor 无法上载任何软件可安装文件，它会显示 **Upload failed (上载失败)** 消息。要重试上传，请选择 **Retry upload (重试上传)**。有关如何排除软件包创建失败的更多信息，请参阅 [AWS Systems Manager Distributor 故障排除](distributor-troubleshooting.md)。

## 使用高级工作流创建软件包
<a name="distributor-working-with-packages-create-adv"></a>

在本节中，了解高级用户在将压缩有安装和卸载脚本的可安装资产以及 JSON 清单文件上载到 Amazon S3 存储桶后，如何能在 Distributor 中创建软件包。

要创建软件包，请准备可安装资产的 .zip 文件（每个操作系统平台一个 .zip 文件）。需要具有至少一个 .zip 文件才能创建软件包。接下来，创建 JSON 清单。清单包含指向软件包代码文件的指针。在将所需的代码文件添加到一个文件夹或目录，并为清单填充正确的值后，将软件包上载到 Amazon S3 存储桶。

您可以从我们的网站下载示例软件包 [ExamplePackage.zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/ExamplePackage.zip)。在示例软件包中包含一个完整 JSON 清单和三个 .zip 文件。

**Topics**
+ [步骤 1：创建 ZIP 文件](#packages-zip)
+ [步骤 2：创建 JSON 软件包清单](#packages-manifest)
+ [步骤 3：将软件包和清单上载到 Amazon S3 存储桶](#packages-upload-s3)
+ [步骤 4：将软件包添加到 Distributor](#distributor-working-with-packages-add)

### 步骤 1：创建 ZIP 文件
<a name="packages-zip"></a>

软件包至少包含软件或可安装资产的一个 .zip 文件。对于要支持的每个操作系统，软件包包含一个 .zip 文件，除非可以在多个操作系统上安装一个 .zip 文件。例如，受支持的 Red Hat Enterprise Linux 和 Amazon Linux 实例版本通常可以运行相同的 .RPM 可执行文件。因此，只需在软件包中附加一个 .zip 文件即可支持这两种操作系统。

**所需的文件**  
需要在每个 .zip 文件中包含以下项目：
+ **install** 和 **uninstall** 脚本。基于 Windows Server 的托管式节点需要使用 PowerShell 脚本（名为 `install.ps1` 和 `uninstall.ps1` 的脚本）。基于 Linux 的托管式节点需要使用 Shell 脚本（名为 `install.sh` 和 `uninstall.sh` 的脚本）。SSM Agent 运行 **install** 和 **uninstall** 脚本中的指令。

  例如，安装脚本可能会运行安装程序（例如 .rpm 或 .msi），它们可能会复制文件，或者它们可能会设置配置。
+ 可执行文件、安装程序软件包（.rpm、.deb、.msi 等）、其他脚本或配置文件。

**可选的文件**  
以下项目在每个 .zip 文件中是可选的：
+ **update** 脚本。通过提供更新脚本，您可以使用 `In-place update` 选项安装软件包。如果要将新文件或更新的文件添加到现有的软件包安装中，`In-place update` 选项不会在执行更新时使软件包应用程序离线。基于 Windows Server 的托管式节点需要使用 PowerShell 脚本（名为 `update.ps1` 的脚本）。基于 Linux 的托管式节点需要使用 shell 脚本（名为 `update.sh` 的脚本）。SSM Agent 运行 **update** 脚本中的指令。

有关安装或更新软件包的更多信息，请参阅 [安装或更新 Distributor 软件包](distributor-working-with-packages-deploy.md)。

有关 .zip 文件的示例（包括示例 **install** 和 **uninstall** 脚本），请下载示例软件包 [ExamplePackage.zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/ExamplePackage.zip)。

### 步骤 2：创建 JSON 软件包清单
<a name="packages-manifest"></a>

准备并压缩可安装文件后，需要创建一个 JSON 清单。模板如下。本节中的过程将对清单模板的各个部分进行说明。您可以使用 JSON 编辑器在单独的文件中创建此清单。或者，也可以在创建软件包时在 AWS Systems Manager 控制台中创建清单。

```
{
  "schemaVersion": "2.0",
  "version": "{{your-version}}",
  "publisher": "{{optional-publisher-name}}",
  "packages": {
    "{{platform}}": {
      "{{platform-version}}": {
        "{{architecture}}": {
          "file": "{{.zip-file-name-1}}.zip"
        }
      }
    },
    "{{another-platform}}": {
      "{{platform-version}}": {
        "{{architecture}}": {
          "file": "{{.zip-file-name-2}}.zip"
        }
      }
    },
    "{{another-platform}}": {
      "{{platform-version}}": {
        "{{architecture}}": {
          "file": "{{.zip-file-name-3}}.zip"
        }
      }
    }
  },
  "files": {
    "{{.zip-file-name-1}}.zip": {
      "checksums": {
        "sha256": "{{checksum}}"
      }
    },
    "{{.zip-file-name-2}}.zip": {
      "checksums": {
        "sha256": "{{checksum}}"
      }
    }
  }
}
```

**创建 JSON 软件包清单**

1. 将架构版本添加到清单。在此版本中，架构版本始终为 `2.0`。

   ```
   { "schemaVersion": "2.0",
   ```

1. 将用户定义的软件包版本添加到清单。这也是您在将软件包添加到 Distributor 时指定的 **Version name (版本名称)** 的值。添加软件包时，它将成为 Distributor 创建的 AWS Systems Manager 文档的一部分。您还可以在 `AWS-ConfigureAWSPackage` 文档中将此值作为输入提供，以安装除最新版本以外的软件包版本。`version` 值可以包含字母、数字、下划线、连字符和句点，最大长度为 128 个字符。建议使用易读的软件包版本，以便您和其他管理员在部署时更轻松地指定确切的软件包版本。示例如下：

   ```
   "version": "1.0.1",
   ```

1. （可选）添加发布者名称。示例如下：

   ```
   "publisher": "MyOrganization",
   ```

1. 添加软件包。`"packages"` 部分描述软件包中的 .zip 文件支持的平台、发行版本和架构。有关更多信息，请参阅 [支持的软件包平台和架构](distributor.md#what-is-a-package-platforms)。

   {{platform-version}} 可以是通配符值 `_any`。可以使用它指示 .zip 文件支持任何平台版本。您还可以指定一个主要发行版本，后跟通配符，以使所有次要版本受到支持，例如 7.\*。如果您选择为某一特定操作系统版本指定 {{platform-version}} 值，请确保它与您设为目标的操作系统 AMI 的确切发行版本匹配。以下是用于获取正确的操作系统值的推荐资源。
   + 在基于 Windows Server 的托管式节点上，发行版本可用作 Windows Management Instrumentation (WMI) 数据。您可以运行以下命令提示符命令来获取版本信息，然后解析 `version` 的结果。

     ```
     wmic OS get /format:list
     ```
   + 在基于 Linux 的托管式节点上，可以通过先扫描操作系统版本（下面的命令）来获取版本。然后查找 `VERSION_ID` 的值。

     ```
     cat /etc/os-release
     ```

     如果这未返回您需要的结果，请运行下面的命令，以从 `/etc/lsb-release` 文件获取 LSB 版本信息，并查找 `DISTRIB_RELEASE` 的值。

     ```
     lsb_release -a
     ```

     如果上述方法都不奏效，您通常可以根据分发软件包查找版本。例如，在 Debian Server 上，您可以扫描 `/etc/debian_version` 文件；在 Red Hat Enterprise Linux 上，则可以扫描 `/etc/redhat-release` 文件。

     ```
     hostnamectl
     ```

   ```
   "packages": {
       "{{platform}}": {
         "{{platform-version}}": {
           "{{architecture}}": {
             "file": "{{.zip-file-name-1}}.zip"
           }
         }
       },
       "{{another-platform}}": {
         "{{platform-version}}": {
           "{{architecture}}": {
             "file": "{{.zip-file-name-2}}.zip"
           }
         }
       },
       "{{another-platform}}": {
         "{{platform-version}}": {
           "{{architecture}}": {
             "file": "{{.zip-file-name-3}}.zip"
           }
         }
       }
     }
   ```

   示例如下：在该示例中，操作系统平台为 `amazon`，支持的发行版本为 `2016.09`，架构为 `x86_64`，支持该平台的 .zip 文件为 `test.zip`。

   ```
   {
       "amazon": {
           "2016.09": {
               "x86_64": {
                   "file": "test.zip"
               }
           }
       }
   },
   ```

   您可以添加通配符值 `_any` 来指示此软件包支持父元素的所有版本。例如，要指示 Amazon Linux 的任何发行版本都支持此软件包，您的软件包语句应与以下内容相似。您可以在版本或架构级别使用 `_any` 通配符来支持平台的所有版本、某个版本的所有架构或某个平台的所有版本和所有架构。

   ```
   {
       "amazon": {
           "_any": {
               "x86_64": {
                   "file": "test.zip"
               }
           }
       }
   },
   ```

   以下示例添加 `_any` 来表明 Amazon Linux 2016.09 的所有架构都支持第一个软件包 `data1.zip`。Amazon Linux 的所有版本都支持第二个软件包 `data2.zip`，但此软件包仅适用于采用 `x86_64` 架构的托管式节点。`2023.8` 和 `_any` 版本都是 `amazon` 下的条目。具有一个平台 (Amazon Linux)，但支持的版本、架构和关联的 .zip 文件不同。

   ```
   {
       "amazon": {
           "2023.8": {
               "_any": {
                   "file": "data1.zip"
               }
           },
           "_any": {
               "x86_64": {
                   "file": "data2.zip"
               }
           }
       }
   }
   ```

   如果 .zip 文件支持多个平台，您可以在清单的 `"packages"` 部分中多次引用该 .zip 文件。例如，如果您有一个同时支持 Red Hat Enterprise Linux 8.x 版本和 Amazon Linux 的 .zip 文件，您可以在 `"packages"` 部分中包含两个指向相同 .zip 文件的条目，如以下示例中所示。

   ```
   {
       "amazon": {
           "2023.8.20250715 ": {
               "x86_64": {
                   "file": "test.zip"
               }
           }
       },
       "redhat": {
           "8.*": {
               "x86_64": {
                   "file": "test.zip"
               }
           }
       }
   },
   ```

1. 添加属于步骤 4 中的软件包的 .zip 文件列表。每个文件条目都需要文件名和 `sha256` 哈希值校验和。清单中的校验和值必须与压缩资产中的 `sha256` 哈希值匹配，以防软件包安装失败。

   要从可安装资产获取确切的校验和，可以运行以下命令。在 Linux 上，运行 `shasum -a 256 {{file-name}}.zip` 或 `openssl dgst -sha256 {{file-name}}.zip`。在 Windows 上，在 [PowerShell](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-filehash?view=powershell-6) 中运行 `Get-FileHash -Path {{path-to-.zip-file}}` cmdlet。

   清单的 `"files"` 部分包含对软件包中的每个 .zip 文件的引用。

   ```
   "files": {
           "test-agent-x86.deb.zip": {
               "checksums": {
                   "sha256": "EXAMPLE2706223c7616ca9fb28863a233b38e5a23a8c326bb4ae241dcEXAMPLE"
               }
           },
           "test-agent-x86_64.deb.zip": {
               "checksums": {
                   "sha256": "EXAMPLE572a745844618c491045f25ee6aae8a66307ea9bff0e9d1052EXAMPLE"
               }
           },
           "test-agent-x86_64.nano.zip": {
               "checksums": {
                   "sha256": "EXAMPLE63ccb86e830b63dfef46995af6b32b3c52ce72241b5e80c995EXAMPLE"
               }
           },
           "test-agent-rhel8-x86.nano.zip": {
               "checksums": {
                   "sha256": "EXAMPLE13df60aa3219bf117638167e5bae0a55467e947a363fff0a51EXAMPLE"
               }
           },
           "test-agent-x86.msi.zip": {
               "checksums": {
                   "sha256": "EXAMPLE12a4abb10315aa6b8a7384cc9b5ca8ad8e9ced8ef1bf0e5478EXAMPLE"
               }
           },
           "test-agent-x86_64.msi.zip": {
               "checksums": {
                   "sha256": "EXAMPLE63ccb86e830b63dfef46995af6b32b3c52ce72241b5e80c995EXAMPLE"
               }
           },
           "test-agent-rhel8-x86.rpm.zip": {
               "checksums": {
                   "sha256": "EXAMPLE13df60aa3219bf117638167e5bae0a55467e947a363fff0a51EXAMPLE"
               }
           }
       }
   ```

1. 添加软件包信息后，保存并关闭清单文件。

下面是一个已完成的清单的示例。在该示例中，您具有一个 .zip 文件 `NewPackage_LINUX.zip`，它支持多个平台，但仅在 `"files"` 部分中引用一次。

```
{
    "schemaVersion": "2.0",
    "version": "1.7.1",
    "publisher": "Amazon Web Services",
    "packages": {
        "windows": {
            "_any": {
                "x86_64": {
                    "file": "NewPackage_WINDOWS.zip"
                }
            }
        },
        "amazon": {
            "_any": {
                "x86_64": {
                    "file": "NewPackage_LINUX.zip"
                }
            }
        },
        "ubuntu": {
            "_any": {
                "x86_64": {
                    "file": "NewPackage_LINUX.zip"
                }
            }
        }
    },
    "files": {
        "NewPackage_WINDOWS.zip": {
            "checksums": {
                "sha256": "EXAMPLEc2c706013cf8c68163459678f7f6daa9489cd3f91d52799331EXAMPLE"
            }
        },
        "NewPackage_LINUX.zip": {
            "checksums": {
                "sha256": "EXAMPLE2b8b9ed71e86f39f5946e837df0d38aacdd38955b4b18ffa6fEXAMPLE"
            }
        }
    }
}
```

#### 软件包示例
<a name="package-manifest-examples"></a>

您可以从我们的网站下载示例软件包 [ExamplePackage.zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/ExamplePackage.zip)。在示例软件包中包含一个完整 JSON 清单和三个 .zip 文件。

### 步骤 3：将软件包和清单上载到 Amazon S3 存储桶
<a name="packages-upload-s3"></a>

将所有 .zip 文件复制或移动到一个文件夹或目录以准备软件包。有效的软件包需要具有在[步骤 2：创建 JSON 软件包清单](#packages-manifest)中创建的清单以及在清单文件列表中指定的所有 .zip 文件。

**将软件包和清单上载到 Amazon S3**

1. 将清单中指定的所有 .zip 存档文件复制或移动到一个文件夹或目录中。不要压缩您要将 .zip 归档文件和清单文件移动到的文件夹或目录。

1. 创建存储桶或选择现有的存储桶。有关更多信息，请参阅 *Amazon Simple Storage Service 入门指南*中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html)。有关如何运行 AWS CLI 命令创建存储桶的更多信息，请参阅 *AWS CLI 命令参考*中的 [https://docs.aws.amazon.com/cli/latest/reference/s3/mb.html](https://docs.aws.amazon.com/cli/latest/reference/s3/mb.html)。

1. 将此文件夹或目录上载到存储桶。有关更多信息，请参阅 *Amazon Simple Storage Service 入门指南*中的[向存储桶添加对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/PuttingAnObjectInABucket.html)。如果打算将 JSON 清单粘贴到 AWS Systems Manager 控制台，请不要上载该清单。有关如何运行 AWS CLI 命令以将文件上载到存储桶的更多信息，请参阅 *AWS CLI 命令参考*中的 [https://docs.aws.amazon.com/cli/latest/reference/s3/mv.html](https://docs.aws.amazon.com/cli/latest/reference/s3/mv.html)。

1. 在存储桶的主页上，选择您上载的文件夹或目录。如果您将文件上传到存储桶中的子文件夹，请务必记下子文件夹（也称为*前缀*）。您需要此前缀以将软件包添加到 Distributor。

### 步骤 4：将软件包添加到 Distributor
<a name="distributor-working-with-packages-add"></a>

您可以使用 AWS Systems Manager 控制台、AWS 命令行工具（AWS CLI 和 AWS Tools for PowerShell）或 AWS 开发工具包将新软件包添加到 Distributor。添加软件包时，您将添加一个新的 [SSM 文档](documents.md)。使用此文档，可以将该软件包部署到托管式节点。

**Topics**
+ [使用控制台添加软件包](#create-pkg-console)
+ [使用 AWS CLI 添加软件包](#create-pkg-cli)

#### 使用控制台添加软件包
<a name="create-pkg-console"></a>

可使用 AWS Systems Manager 控制台创建软件包。准备好您在[步骤 3：将软件包和清单上载到 Amazon S3 存储桶](#packages-upload-s3)中将软件包上传到的存储桶的名称。

**将软件包添加到 Distributor（控制台）**

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

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

1. 在 Distributor 主页上，选择 **Create package (创建软件包)**，然后选择**高级**。

1. 在 **Create package (创建软件包)** 页面上，输入软件包的名称。软件包名称可以包含字母、数字、句点、短划线和下划线。名称应足够通用，以适用于所有版本的软件包附件，但又足够具体，可用于识别软件包的用途。

1. 对于 **Version name (版本名称)**，请输入清单文件中的 `version` 条目的确切值。

1. 对于 **S3 bucket name (S3 存储桶名称)**，请选择在[步骤 3：将软件包和清单上载到 Amazon S3 存储桶](#packages-upload-s3)中将 .zip 文件和清单上传到的存储桶的名称。

1. 对于 **S3 key prefix (S3 键前缀)**，请输入存储 .zip 文件和清单的存储桶子文件夹。

1. 对于 **Manifest (清单)**，请选择 **Extract from package (从软件包提取)** 以使用随 .zip 文件上载到 Amazon S3 存储桶的清单。

   （可选）如果未将 JSON 清单上载到存储 .zip 文件的 Amazon S3 存储桶，请选择 **New manifest (新建清单)**。您可以在 JSON 编辑器字段中编写或粘贴整个清单。有关如何创建 JSON 清单的更多信息，请参阅 [步骤 2：创建 JSON 软件包清单](#packages-manifest)。

1. 当您处理完清单后，选择 **Create package (创建软件包)**。

1. 等待 Distributor 从 .zip 文件和清单中创建软件包。根据要添加的软件包的数量和大小，这可能需要几分钟时间。Distributor 会自动将您重定向到新软件包的 **Package details (软件包详细信息)** 页面，但您可以选择在上传软件之后自行打开此页面。**Package details (软件包详细信息)** 页面不会显示有关软件包的所有信息，直到 Distributor 完成软件包创建过程为止。要停止上传和软件包创建过程，请选择**取消**。

#### 使用 AWS CLI 添加软件包
<a name="create-pkg-cli"></a>

可使用 AWS CLI 创建软件包。准备好您在[步骤 3：将软件包和清单上载到 Amazon S3 存储桶](#packages-upload-s3)中将软件包上传到的存储桶的 URL。

**若要使用 AWS CLI 将软件包添加到 Amazon S3**

1. 要使用 AWS CLI 创建软件包，请运行以下命令，将 {{package-name}} 替换为您的软件包名称，将 {{path-to-manifest-file}} 替换为 JSON 清单文件的文件路径。amzn-s3-demo-bucket 是存储整个软件包的 Amazon S3 存储桶的 URL。在 Distributor 中运行 **create-document** 命令时，为 `--document-type` 指定 `Package` 值。

   如果未将清单文件添加到 Amazon S3 存储桶，则 `--content` 参数值将是 JSON 清单文件的文件路径。

   ```
   aws ssm create-document \
       --name "{{package-name}}" \
       --content file://{{path-to-manifest-file}} \
       --attachments Key="SourceUrl",Values="{{amzn-s3-demo-bucket}}" \
       --version-name {{version-value-from-manifest}} \
       --document-type Package
   ```

   示例如下：

   ```
   aws ssm create-document \
       --name "ExamplePackage" \
       --content file://{{path-to-manifest-file}} \
       --attachments Key="SourceUrl",Values="https://s3.amazonaws.com/amzn-s3-demo-bucket/ExamplePackage" \
       --version-name 1.0.1 \
       --document-type Package
   ```

1. 通过运行以下命令验证软件包是否已添加并显示软件包清单，将 {{package-name}} 替换为您的软件包名称。要获取文档的特定版本（不同于软件包的版本），可以添加 `--document-version` 参数。

   ```
   aws ssm get-document \
       --name "{{package-name}}"
   ```

有关可以与 **create-document** 命令结合使用的其他选项的信息，请参阅 *AWS CLI 命令参考* AWS Systems Manager 一节中的 [https://docs.aws.amazon.com/cli/latest/reference/ssm/create-document.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/create-document.html)。有关可以与 **get-document** 命令配合使用的其他选项的信息，请参阅 [https://docs.aws.amazon.com/cli/latest/reference/ssm/get-document.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-document.html)。