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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建软件包

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

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

创建软件包时,您添加的是一个新的 SSM 文档。此文档让您能够将软件包部署到托管实例。

仅出于演示目的,您可以从我们的网站下载示例软件包 ExplePackage.zip。在示例软件包中包括一个完整 JSON 清单和三个 .zip 文件,这些文件包含 PowerShell v7.0.0 的安装程序。安装和卸载脚本不包含有效命令。虽然您必须在高级工作流程中将每个软件可安装文件和脚本压缩为 .zip 文件以创建软件包,但您不会在简单工作流程中压缩可安装资产。

创建软件包(简单)

本小节介绍如何在分发服务器中创建软件包,方法是选择简便分发服务器控制台中的软件包创建工作流。分销商是Amazon Web Services Systems Manager。要创建软件包,请准备您的可安装资产,每个操作系统平台一个文件。需要至少一个文件才能创建软件包。简单软件包创建过程为您生成安装和卸载脚本、文件哈希以及 JSON 格式的清单。简单工作流程处理上传和压缩可安装文件以及创建新软件包和关联的 SSM 文档的过程。有关支持的平台的更多信息,请参阅 支持的软件包平台和架构

在使用简单方法创建软件包时,分发服务器将创建installuninstall脚本。但是,当您为就地更新创建包时,您必须提供自己的update脚本内容更新脚本选项卡。当您添加输入命令update脚本,Distributor 会将此脚本与其创建的 .zip 包一起包含在 .zip 包中。installuninstall脚本。

注意

通过使用 In-place 更新选项,您可以将新文件或更新的文件添加到现有的软件包安装中,而无需将关联的应用程序脱机。

创建软件包(简单)

  1. 打开Amazon Web Services Systems Manager控制台https://console.aws.amazon.com/systems-manager/

  2. 在导航窗格中,选择Distributor

  3. 在分发服务器主页上,选择创建程序包,然后选择简便

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

  5. (可选)对于 Version name (版本名称),请输入版本名称。版本名称最多为 512 个字符,并且不能包含特殊字符。

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

  7. 对于 Upload software (上传软件),请选择 Add software (添加软件),然后浏览具有 .rpm.msi.deb 扩展名的可安装软件文件。如果文件名包含空格,则上载将失败。您可以在单个操作中上传多个软件文件。

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

    对于简便软件包创建工作流程中,由于您仅将每个可安装文件上传一次,因此,需要使用额外的步骤以指示分发器在多个操作系统上将单个文件指定为目标。例如,如果您上传名为 Logtool_v1.1.1.rpm 的可安装软件文件,则必须更改简单工作流程中的某些默认值,以同时在 Amazon Linux 和 Ubuntu 操作系统上将相同的软件指定为目标。在针对多个平台时,请执行以下操作之一。

    • 改用高级工作流程,在开始之前将每个可安装文件压缩为 .zip 文件,然后手动编写清单,以便在多个操作系统平台或版本中将一个可安装文件指定为目标。有关更多信息,请参阅 创建软件包(高级)

    • 简单工作流程中手动编辑清单文件,以便在多个操作系统平台或版本中将 .zip 文件指定为目标。有关如何执行此操作的更多信息,请参阅第 2 步:创建 JSON 软件包清单中步骤 4 的末尾。

  9. 适用于平台版本,请验证显示的操作系统平台版本是否为_any(后跟通配符 (7.*) 的主要发行版本)或您希望软件应用的确切的操作系统发行版本。有关指定操作系统平台版本的更多信息,请参阅第 2 步:创建 JSON 软件包清单中的步骤 4。

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

  11. (可选) 展开脚本,然后查看分发服务器为您的可安装软件生成的脚本。

  12. (可选)要提供用于就地更新的更新脚本,请展开 Scripts (脚本),选择Update script (更新脚本) 选项卡,然后输入更新脚本命令。

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

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

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

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

  15. 选择 Create package (创建软件包)

等待分销商完成上传软件和创建软件包。分发服务器显示每个可安装文件的上传状态。根据要添加的软件包数量和大小,此操作可能需要几分钟的时间。分发服务器会自动将您重定向到程序包详细信息页面,但您可以选择在上传软件之后自行打开此页面。这些区域有:程序包详细信息页面不会显示有关软件包的所有信息,直到 Distributor 完成软件包创建过程。要停止上传和软件包创建过程,请选择取消

如果分发服务器无法上传任何软件可安装文件,它会显示上传失败消息。要重试上传,请选择 Retry upload (重试上传)。有关如何排除软件包创建失败的更多信息,请参阅故障排除Amazon Web Services Systems ManagerDistributor

创建软件包(高级)

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

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

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

第 1 步:创建 ZIP 文件

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

所需的文件

需要在每个 .zip 文件中包含以下项目:

  • installuninstall 脚本。基于 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 脚本),请下载示例软件包 ExamplePackage.zip

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

准备并压缩可安装文件后,需要创建一个 JSON 清单。模板如下。本节中的过程将对清单模板的各个部分进行说明。您可以使用 JSON 编辑器在单独的文件中创建此清单。或者,也可以在创建软件包时在 Amazon Web Services 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. 将用户定义的软件包版本添加到清单。这也是版本名称当您将软件包添加到分发服务器时指定的。它成为Amazon Web Services Systems Manager添加软件包时,分发器创建的文档。您还可以在 AWS-ConfigureAWSPackage 文档中将此值作为输入提供,以安装除最新版本以外的软件包版本。version 值可以包含字母、数字、下划线、连字符和句点,最大长度为 128 个字符。建议使用易读的软件包版本,以便您和其他管理员在部署时更轻松地指定确切的软件包版本。以下是示例。

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

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

    platform-version 可以是通配符值 _any。可以使用它指示 .zip 文件支持任何平台版本。您还可以指定主要发行版本,后跟通配符,以便支持所有次要版本,例如 7.*。如果您选择指定platform-version值,请确保它与操作系统的版本完全匹配。AMI你正在定位的。以下是用于获取正确的操作系统值的推荐资源。

    • 在基于 Windows Server 的实例上,发行版本可用作 Windows Management Instrumentation (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 文件获取 LSB 版本信息,并查找 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的所有架构都受支持。第二个一揽子方案,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" } } } }

    如果 .zip 文件支持多个平台,您可以在清单的 "packages" 部分中多次引用该 .zip 文件。例如,如果您有一个支持Red Hat Enterprise Linux7.x 版本和亚马逊 Linux 版本,您在"packages"部分,它指向同一 .zip 文件,如以下示例所示。

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

    要从可安装资产获取确切的校验和,可以运行以下命令。在 Linux 上,运行shasum -a 256 file-name.zip或者openssl dgst -sha256 file-name.zip。在 Windows 中,运行Get-FileHash -Path path-to-.zip-filecmdletPowerShell

    清单的 "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 文件。

将软件包和清单上传到 Amazon S3

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

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

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

  4. 在存储桶的主页上,选择您上传的文件夹。如果您将文件上传到存储桶中的子文件夹,请务必记下子文件夹(也称为前缀)。您需要此前缀以将软件包添加到分销商。

第 4 步:将软件包添加到分销商中

您可以使用Amazon Web Services Systems Manager控制台、Amazon命令行工具 (AmazonCLI 和AmazonTools for PowerShell)或Amazon将新软件包添加到分发服务器的开发工具包。添加软件包时,您添加的是一个新的 SSM 文档。此文档让您能够将软件包部署到托管实例。

添加软件包(控制台)

可使用 Amazon Web Services Systems Manager 控制台创建软件包。准备好您在第 3 步:将软件包和清单上传到 Amazon S3 存储桶中将软件包上传到的存储桶的名称。

将软件包添加到分发服务器(控制台)

  1. 打开Amazon Web Services Systems Manager控制台https://console.aws.amazon.com/systems-manager/

  2. 在导航窗格中,选择Distributor

  3. 在分发服务器主页上,选择创建程序包,然后选择Advanced

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

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

  6. 对于 S3 bucket name (S3 存储桶名称),请选择在第 3 步:将软件包和清单上传到 Amazon S3 存储桶中将 .zip 文件和清单上传到的存储桶的名称。

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

  8. 适用于清单中,选择从软件包中提取以使用已通过 .zip 文件上传到 Amazon S3 存储桶的清单。

    (可选)如果未将 JSON 清单上传到存储 .zip 文件的 S3 存储桶,请选择 New manifest (新建清单)。您可以在 JSON 编辑器字段中编写或粘贴整个清单。有关如何创建 JSON 清单的更多信息,请参阅第 2 步:创建 JSON 软件包清单

  9. 当您处理完清单后,选择 Create package (创建软件包)

  10. 等待分发服务器从 .zip 文件和清单中创建软件包。根据要添加的软件包数量和大小,此操作可能需要几分钟的时间。分发服务器会自动将您重定向到程序包详细信息页面,但您可以选择在上传软件之后自行打开此页面。这些区域有:程序包详细信息页面不会显示有关软件包的所有信息,直到 Distributor 完成软件包创建过程。要停止上传和软件包创建过程,请选择取消

添加软件包 (AmazonCLI)

您可以使用AmazonCLI 创建程序包。准备好您在第 3 步:将软件包和清单上传到 Amazon S3 存储桶中将软件包上传到的存储桶的 URL。

将软件包添加到 Amazon S3 (AmazonCLI)

  1. 使用AmazonCLI 创建软件包,请运行以下命令,将程序包名称替换为软件包的名称,清单文件的路径替换为 JSON 清单文件的文件路径。文档示例存储桶是用于存储整个软件包的 Amazon S3 存储桶的 URL。当您运行create-document命令时,您可以指定Package--document-type

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

    aws ssm create-document \ --name "package-name" \ --content file://path-to-manifest-file \ --attachments Key="SourceUrl",Values="DOC-EXAMPLE-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/DOC-EXAMPLE-BUCKET/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中的Amazon Web Services Systems Manager的 部分AmazonCLI 命令参考。有关可以与 get-document 命令配合使用的其他选项的信息,请参阅 get-document