创建软件包 - AWS Systems Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

创建软件包

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

不同的平台有时可能使用相同的文件,但所有文件 必须列于 Files 章节 清单. 如果您正在使用简单的工作流程在控制台中创建包装, 为您生成清单。您可以附加的最大文件数量 为20。每个文件的最大大小为1GB。更多 有关支持的平台的信息,请参阅 支持的软件包平台和 架构.

当您创建包装时,您要添加一个新的 SSM文件. 文档可让您 将软件包部署至托管实例。

仅用于演示目的,例如包装、 示例Package.zip,可用于 您从我们的网站下载。示例包包括一个已完成的JSM 包含PowerShellv7.0.0安装工具的清单和三个.zip文件。的 安装和卸载脚本不包含有效命令。尽管您 必须将每个软件可安装和脚本压缩到.zip文件中,以创建软件包 在 高级 工作流,您不会将可安装资产压缩到 的 简单 工作流程。

创建 包装(简单)

本节描述了如何在 Distributor 选择 简单 包装创建工作流程 Distributor 话务台。要创建软件包,请准备可安装资产,每个 操作系统平台。创建包至少需要一个文件。的 简单 软件包创建过程生成安装 和卸载脚本、文件井号,以及一个由JSM格式化的清单。的 简单 工作流程处理上传和 压缩可安装文件,并创建新包和关联的 SSM文件. 更多关于 支持的平台,请参阅 支持的软件包平台和 架构.

当您使用简单方法创建包装时, Distributor 创造 installuninstall 脚本 您。但是,当您为就地更新创建包时,您必须提供 您自己 update 脚本内容 更新 脚本 选项卡。当您为 update 脚本, Distributor 在 .压缩包,以及 installuninstall 脚本。

注意

In-place 更新选项可让您添加新文件或更新文件 现有软件包安装,无需使用相关的 应用程序脱机。

创建包装(简单)

  1. 通过以下网址打开 AWS Systems Manager 控制台:https://console.amazonaws.cn/systems-manager/

  2. 在导航面板中,选择 Distributor.

  3. 在 Distributor 主页,选择 创建软件包, 然后选择 简单.

  4. 创建软件包 页面上,为您的 包装。包装名称可包含字母、数字、句点、破折号、 和下划线。名称应足够通用,以适用于所有 包装附件的版本,但足够具体,以识别 包装的目的。

  5. (可选)针对 版本名称,输入版本 名称。版本名称最多可包含512个字符,不能 包含特殊符号。

  6. 对于 位置,使用存储桶 名称及前缀,或使用区间URL。

  7. 对于 上传软件,选择 添加 软件,然后浏览查找可安装的软件文件 有 .rpm, .msi,或 .deb 分机。您可以上传多个 软件文件。

  8. 对于 目标平台,验证目标 每个可安装文件显示的操作系统平台正确。如果 显示的操作系统不正确,请选择正确的操作 系统。

    对于 简单 包装创建工作流程,因为 您仅上传每个可安装文件一次,需要执行额外的步骤 指导 Distributor 以多个操作系统上的单个文件为目标。例如,如果您上传了名为 Logtool_v1.1.1.rpm,您必须更改一些 默认 简单 以相同的目标 软件。何时 针对多个平台,执行以下其中一项操作。

    • 使用 高级 而是使用zip 开始之前,将每个可安装文件添加到.zip文件中,以及 手动编写清单,以便一个可安装文件 针对多个操作系统平台或版本。对于 更多信息,请参阅 创建软件包 (晚期).

    • 在中手动编辑清单文件 简单 工作流,以便.zip文件 针对多个操作系统平台或版本。有关如何操作的详细信息,请参阅步骤4结束 在 步骤2: 创建JSM包 清单.

  9. 对于 平台版本,验证 系统平台版本 _any,a 主要版本后加一个数字符号(7.3*),或 希望软件使用的操作系统版本 适用。有关指定操作系统的更多信息 平台版本,请参阅中的步骤4 步骤2: 创建JSM包 清单.

  10. 对于 架构,选择正确的处理器 各个可安装文件的架构。更多 有关支持的处理器架构的信息,请参阅 支持的软件包平台和 架构.

  11. (可选)展开 脚本,并查看脚本 能够 Distributor 为您的可安装软件生成。

  12. (可选)要提供更新脚本以便与现场更新一起使用, 扩展 脚本,选择 更新 脚本 选项卡,然后输入更新脚本命令。

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

  13. 若要添加更多可安装的软件文件,请选择 添加 软件. 否则,请转到下一步。

  14. (可选)展开 清单,并查看JNS 包裹清单 Distributor 为您的可安装软件生成。如果您从开始以后更改了有关软件的任何信息 程序,例如平台版本或目标平台, 生成清单 以显示更新的包装, 清单.

    如果您想要以软件为目标,您可以手动编辑清单 可在多个操作系统上安装,如步骤8所述。有关编辑清单的详细信息,请参阅 步骤2: 创建JSM包 清单.

  15. 选择 创建软件包.

等待 Distributor 完成上传您的软件并创建包裹。 Distributor 显示每个可安装文件的上传状态。取决于 以及要添加的包装尺寸,这可能需要几分钟时间。 Distributor 自动将您重定向到 包装详情 页面 新的包装,但您可以选择在 软件已上传。的 包装详情 页面不会 显示包裹的所有信息,直到 Distributor 完成包装 创建流程。要停止上传和包创建过程,请选择 取消.

如果 Distributor 无法上传任何软件可安装文件,它将显示 一个 上传失败 信息。若要重新上传,请选择 重试上传. 有关如何 解决包创建故障,请参阅 故障排除 AWS Systems Manager Distributor.

创建软件包 (晚期)

在本节中,了解高级用户如何在 Distributor 上传随安装压缩的可安装资产后,以及 卸载脚本和JXM清单文件到S3bucket。

要创建软件包,请准备可安装资产的.zip文件,一个.zip 文件。至少需要一个.zip文件才能创建 包装。接下来,创建JSM清单。该清单包括指向您的 包代码文件。当您将所需的代码文件添加到文件夹时, 并且清单中填入了正确的值,将包裹上传到S3 桶。

示例包, 示例Package.zip,您可以从我们的 网站。示例包包括一个已完成的JXM清单和三个.zip 文件。

步骤1: 创建ZIP文件

您软件包的基础是至少一个软件.zip文件或 可安装资产。每个操作系统的一个文件包包含一个.zip文件 您想支持的,除非可以在多个 操作系统。例如, Red Hat Enterprise Linux 和 Amazon Linux 实例通常可以 运行相同的.RPM可执行文件,因此您只需附加一个.zip文件 支持两个操作系统。

所需文件

每个.zip文件中都需要以下项目:

  • install 以及 uninstall 脚本。 Windows Server基于的实例需要PowerShell脚本(脚本 已命名 install.ps1uninstall.ps1)。基于Linux的实例 需要shell脚本(名称 install.shuninstall.sh)。 SSM 代理 运行 中的说明 installuninstall 脚本。

    例如,您的安装脚本可能会运行安装程序 (例如.rpm或.msi),他们可能会复制文件,或者 配置。

  • 可执行文件、安装文件包(.rpm、.deb、.msi等), 其他脚本或配置文件。

可选文件

每个.zip文件中的以下项目是可选的:

  • update 脚本。提供更新脚本 使您能够使用 In-place update 选项安装包。您想添加新内容或更新内容时 文件到现有软件包安装, In-place update 选项不会使用软件包应用程序 执行更新。 Windows Server基于实例 需要PowerShell脚本(标语名为 update.ps1)。基于Linux的实例需要 一个shell脚本(标语名为 update.sh)。 SSM 代理 执行 update 脚本。

有关安装或更新软件包的更多信息,请参阅 安装或更新 包装.

有关.zip文件的示例,包括示例 installuninstall 脚本,下载示例包, 示例Package.zip.

步骤2: 创建JSM包 清单

准备并压缩可安装文件后,创建JJSM清单。以下是模板。清单模板的部分是 描述于本节的程序中。您可以使用JSMEditor 在单独的文件中创建此清单。或者,您可以编写 表现在 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" } } } }

创建Jsonpackage清单

  1. 将方案版本添加到清单中。在此版本中, 方案版本始终 2.0.

    { "schemaVersion": "2.0",
  2. 将用户定义包装版本添加到清单中。这也是 价值 版本名称 具体说明何时 将包裹添加到 Distributor. 它将成为 AWS Systems Manager 文档 Distributor 会在您添加包裹时创建。您还 将该值作为输入 AWS-ConfigureAWSPackage 要安装的文档 一个版本的软件包,而不是最新的。A version 值可包含字母、数字、 下划线、连字符和句点,最多128个 个字符长度。我们建议您使用 包版本,使您和其他管理员更容易 在部署时指定确切的软件包版本。以下是 示例。

    "version": "1.0.1",
  3. (可选)添加出版商名称。以下是 示例。

    "publisher": "MyOrganization",
  4. 添加包。的 "packages" 章节描述了 平台、版本和架构,由.zip支持 文件。更多信息,请参阅 支持的软件包平台和 架构.

    platform-version 可能是 星号值, _any。使用它来表示.zip 文件支持平台的任何版本。您还可以指定 主要发行版本后加一个星号,因此所有次要版本 支持,例如7.*。如果您选择指定 platform-version 特定 操作系统版本,确保它与 您正在定位的操作系统AMI版本。的 以下是获得正确价值的建议资源 操作系统。

    • 在 Windows Server基于实例,发行版本为 提供WindowsManagementInstrumentation(WMI)数据。您可以在 Windows Server基于实例以获取版本信息,然后 解析结果 version。该命令 未显示 Windows Server Nano;版本 价值 Windows Server Nano是 nano.

      wmic OS get /format:list
    • 在基于Linux的实例中,先获取版本 操作系统版本的扫描(以下 命令)。寻找价值 VERSION_ID.

      cat /etc/os-release

      如果这无法返回您需要的结果,则运行 从 /etc/lsb-release 文件,并寻找 价值 DISTRIB_RELEASE.

      lsb_release -a

      如果这些方法失败,您通常可以找到 基于分布。例如,在Debian,您可以 扫描 /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 以表明 第一个包装, data1.zip支持所有 的架构 Amazon Linux 2016.09. 第二个包装, data2.zip支持所有版本的 Amazon Linux,但仅适用于 x86_64 架构。同时 2016.09_any 版本是 条目 amazon。有一个平台(Amazon Linux),但 支持的不同版本、架构和相关.zip 文件。

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

    您可以在 "packages" 如果.zip 文件支持多个平台。例如,如果您的 .zip文件,支持 Red Hat Enterprise Linux 7.x版本和 Amazon Linux,您 有两个条目 "packages" 需要 到相同的.zip文件,如以下示例所示。

    { "amazon": { "2018.03": { "x86_64": { "file": "test.zip" } } }, "redhat": { "7.*": { "x86_64": { "file": "test.zip" } } } },
  5. 从步骤中添加属于此软件包一部分的.zip文件列表 4. 每个文件条目都需要文件名和 sha256 井号值校验和。清单中的校验和值必须与 sha256 来防止 程序包安装失败。

    要获得安装设备的准确校验和,您可以运行 下列命令。在Linux上,运行 cat file-name.zip | openssl dgst -sha256。在Windows上,运行 Get-FileHash -Path path-to-.zip-file cmdlet 在 PowerShell.

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

包装示例

示例包, 示例Package.zip,您可以从以下位置下载 我们的网站。示例包包括一个已完成的JXM清单和 三个.zip文件。

步骤3: 上传包裹和清单 S3bucket

将.zip文件复制到文件夹或 目录。有效包裹需要您创建的清单 步骤2: 创建JSM包 清单 和所有 在清单文件列表中识别的.zip文件。

将包裹和清单上传到 Amazon S3

  1. 复制或移动您在 清单到文件夹或目录。请勿压缩文件夹或 您移动.zip存档文件和清单文件的目录 至。

  2. 创建时段或选择现有时段。更多 信息,请参阅 创建任务包Amazon Simple Storage Service 获得 开始指南. 有关如何运行的更多信息 一个 AWS CLI 创建存储段的命令,请参阅 mb 在 的 AWS CLI 命令参考.

  3. 将文件夹上传到存储桶。更多信息,请参阅 将对象添加到 a水桶Amazon Simple Storage Service 入门指南 指南. 如果您计划将您的JNS清单粘贴到 的 AWS Systems Manager 请勿上传清单。更多 如何运行 AWS CLI 命令将文件上传到 ,请参阅 mvAWS CLI 命令参考.

  4. 在存储桶的主页上,选择您上传的文件夹。如果 您把文件上传到一个存储桶中的子文件夹,请务必注意 子文件夹(也称为 前缀)。您 需要前缀以将包裹添加到 Distributor.

步骤4: 添加 包装到 Distributor

您可以使用 AWS Systems Manager 话务台,AW指令行工具(AWS CLI 和 适用于 PowerShell 的 AWS 工具),或者使用AWSDK添加新软件包 AWS Systems Manager Distributor. 何时 添加包装,您正在添加新 SSM 文档. 文档允许您将软件包部署至已管理 实例。

添加程序包(孔)

您可以使用 AWS Systems Manager 创建包装。准备好了 将包裹上传到的存储桶名称 步骤3: 上传包裹和清单 S3bucket.

要将包裹添加到 Distributor (孔)

  1. 通过以下网址打开 AWS Systems Manager 控制台:https://console.amazonaws.cn/systems-manager/

  2. 在导航面板中,选择 Distributor.

  3. 在 Distributor 主页,选择 创建 包装,然后选择 高级.

  4. 创建软件包 页面,输入名称 包裹。包装名称可包含字母、数字、 句点、短划线和下划线。名称应通用 足以适用于所有版本的包装附件,但 足以确定包装的目的。

  5. 对于 版本名称,输入确切值 的 version 输入清单文件。

  6. 对于 S3bucket名称,选择 将.zip文件和清单上传到的时段 步骤3: 上传包裹和清单 S3bucket.

  7. 对于 S3密钥前缀,输入 存储.zip文件和清单的存储时段。

  8. 对于 清单,选择 提取 包装 使用您拥有的 上传到S3bucket和您的.zip文件。

    (可选)如果您未将JNS清单上传到S3 存储.zip文件的地方,请选择 新 清单. 您可以编写或粘贴整个 出现在JSMEditor字段中。更多关于 如何创建JNS清单,请参阅 步骤2: 创建JSM包 清单.

  9. 完成清单后,选择 创建软件包.

  10. 等待 Distributor 从您的.zip文件创建包裹 和。取决于包裹的数量和大小 正在添加,这可能需要几分钟时间。 Distributor 自动 会将您重定向到 包装详情 页面 但您可以选择打开此页面 软件上传后自己。的 包装 详情 页面未显示有关 直到 Distributor 完成包装创建 流程。要停止上传和包创建过程,请选择 取消.

添加程序包(AWS CLI)

您可以使用 AWS CLI 创建程序包。从 将包裹上传到的时段 步骤3: 上传包裹和清单 S3bucket.

要将包裹添加到 Amazon S3 (AWS CLI)

  1. 使用 AWS CLI 创建程序包,运行以下 命令,替换 package-name 有 包裹的名称,以及 path-to-manifest-file 与 的JXM清单文件路径。S3-bucket-URL-of-package 是 存储整个包的S3bucket的URL。何时 您负责 create-document 命令 Distributor,您指定 Package 价值 --document-type.

    如果您未将您的清单文件添加到S3区间, --content 参数值是 .

    aws ssm create-document \ --name "package-name" \ --content file://path-to-manifest-file \ --attachments Key="SourceUrl",Values="S3-bucket-URL-of-package" \ --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/mybucket/ExamplePackage" \ --version-name 1.0.1 \ --document-type Package
  2. 确认已添加包裹并显示包裹 通过运行下列命令,替换 package-name 名称是 包裹。获取文档的特定版本(而不是 与包的版本相同),您可以添加 --document-version 参数。

    aws ssm get-document \ --name "package-name"

有关其他选项的信息,您可以使用 create-document 命令,请参阅 create-document 在 AWS Systems Manager 章节 AWS CLI Command Reference. 供参考 介绍您可以与 get-document 命令,请参阅 get-document.