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

创建软件包

要创建软件包,请准备好可安装资产的 ZIP 文件(每个操作系统平台一个 ZIP 文件)。需要至少一个 ZIP 文件才能创建软件包。

接下来,创建 JSON 清单。清单包含指向软件包代码文件的指针。将所需的代码文件添加到一个文件夹,并为清单填充正确的值。然后,将软件包上传到 Amazon S3 存储桶。

有时,不同的平台可以使用同一个 ZIP 文件,但附加到软件包的所有 ZIP 文件都必须列在清单的 Files 部分中。最多可以向一个文档附加 20 个 ZIP 文件。每个 ZIP 文件的最大大小为 1 GB。有关支持的平台的更多信息,请参阅 支持的软件包平台和体系结构

您可以从我们的网站下载示例软件包 ExamplePackage.zip。示例软件包中有一个完整的 JSON 清单和三个 ZIP 文件。

步骤 1:创建 ZIP 文件

软件包必须包含至少一个软件或可安装资产的 ZIP 文件。除了可在多个操作系统上安装同一个 ZIP 文件的情况,软件包必须为要支持的每个操作系统包含一个 ZIP 文件。例如,Red Hat Enterprise Linux 和 Amazon Linux 实例通常可以运行相同的 .RPM 可执行文件,因此只需在软件包中附加一个 ZIP 文件就能同时支持这两种操作系统。

每个 ZIP 文件都需要以下项目。

  • installuninstall 脚本。基于 Windows 的实例需要 PowerShell 脚本(名为 install.ps1uninstall.ps1 的脚本)。基于 Linux 的实例需要 Shell 脚本(名为 install.shuninstall.sh 的脚本)。SSM 代理 运行 installuninstall 脚本中的指令。

    例如,您的安装脚本可以运行安装程序,如 RPM 或 MSI,它们可以复制文件或设置配置设置。

  • 可执行文件、安装软件包(RPM、DEB、MSI 等)、其他脚本或配置文件等。

有关 ZIP 文件的示例,包括示例 installuninstall 脚本,请下载示例软件包 ExamplePackage.zip

步骤 2:创建 JSON 软件包清单

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

    "version": "1.0.1",
  3. (可选)添加发布者名称。以下是示例。

    "publisher": "MyOrganization",
  4. 添加软件包。"packages" 部分描述软件包中的 ZIP 文件支持的平台、发布版本和体系结构。有关更多信息,请参阅 支持的软件包平台和体系结构

    platform-version 可以是通配符值 _any。使用它来指示 ZIP 文件支持任何版本的平台。但是,platform-version 值必须与您设定为目标的操作系统 AMI 的版本完全匹配。以下是用于获取正确的操作系统值的推荐资源。

    • 在基于 Windows 的实例上,发布版本可用作 Windows Management Instrumentation (WMI) 数据。您可以在基于 Windows 的实例上运行以下命令提示符命令来获取版本信息,然后解析 version 的结果。此命令不显示 Windows Server Nano 的版本;Windows Server Nano 的版本值为 nano

      wmic OS get /format:list
    • 在基于 Linux 的实例上,可以通过以下方式获取版本:先扫描操作系统版本(以下列表中的第一个命令),然后查找 VERSION_ID 的值。如果这未返回您需要的结果,请运行第二个命令从 /etc/lsb-release 文件获取 LSB 版本信息,并查找 DISTRIB_RELEASE 的值。如果上述方法都不奏效,您通常可以根据发布版查找版本。例如,在 Debian 上,您可以扫描 /etc/debian_version 文件;在 Red Hat Enterprise Linux 上,则可以扫描 /etc/redhat-release 文件。

      cat /etc/os-release lsb_release -a 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 体系结构的实例。2016.09_any 版本都是 amazon 下的条目。只有一个平台 (Amazon Linux),但支持的版本、体系结构和关联的 ZIP 文件不同。

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

    如果某个 ZIP 文件支持多个平台,则可以在清单的 "packages" 部分中多次引用此 ZIP 文件。例如,如果有一个同时支持 Red Hat Enterprise Linux 和 Amazon Linux 的 ZIP 文件,则可以将 "packages" 部分中的两个条目都指向此 ZIP 文件,如以下示例所示。

    { "amazon": { "2018.03": { "x86_64": { "file": "test.zip" } } }, "redhat": { "_any": { "x86_64": { "file": "test.zip" } } } },
  5. 从步骤 4 添加属于此软件包的 ZIP 文件列表。每个文件条目都需要文件名和 sha256 哈希值校验和。清单中的校验和值必须与压缩资产中的 sha256 哈希值匹配,以防软件包安装失败。

    要从可安装资产获取确切的校验和,可以运行以下命令。在 Linux 上,运行 cat file-name.zip | openssl dgst -sha256。在 Windows 上,在 PowerShell 中运行 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-rhel5-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-rhel5-x86.rpm.zip": { "checksums": { "sha256": "EXAMPLE13df60aa3219bf117638167e5bae0a55467e947a363fff0a51EXAMPLE" } }, "test-agent-rhel5-x86_64.rpm.zip": { "checksums": { "sha256": "EXAMPLE7ce8a2c471a23b5c90761a180fd157ec0469e12ed38a7094d1EXAMPLE" } } }
  6. 添加软件包信息后,保存并关闭清单文件。

下面是一个已完成的清单的示例。在此示例中,您有一个 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" } } } }

软件包示例

您可以从我们的网站下载示例软件包 ExamplePackage.zip。示例软件包中有一个完整的 JSON 清单和三个 ZIP 文件。

步骤 3:将软件包和清单上传到 Amazon S3 存储桶

通过将所有 ZIP 文件复制或移动到一个文件夹或目录中来准备软件包。有效的软件包需要您在步骤 2:创建 JSON 软件包清单中创建的清单以及清单文件列表中标识的所有 ZIP 文件。

将软件包和清单上传到 S3

  1. 将清单中指定的所有 ZIP 存档文件复制或移动到一个文件夹或目录中。

  2. 创建存储桶或选择现有的存储桶。有关更多信息,请参阅 Amazon Simple Storage Service 入门指南 中的创建存储桶。有关如何运行 AWS CLI 命令来创建存储桶的更多信息,请参阅 AWS CLI 命令参考 中的 mb

  3. 将此文件夹上传到存储桶。有关更多信息,请参阅 Amazon Simple Storage Service 入门指南 中的将对象添加到存储桶。如果打算将 JSON 清单粘贴到 AWS Systems Manager 控制台,则不要上传清单。有关如何运行 AWS CLI 命令将文件上传到存储桶的更多信息,请参阅 AWS CLI 命令参考 中的 mv

  4. 在存储桶的主页上,选择您上传的文件夹。

  5. 在上传文件夹右侧的属性窗格中,复制此文件夹的 Link (链接) URL,并将其粘贴到一个方便查看的位置。您需要此 URL 才能将软件包添加到 Distributor。