View a markdown version of this page

使用 EC2 Image Builder 组件产品 - AWS Marketplace

AWS Marketplace API 参考已重组。有关支持的 API 操作的更多信息,请参阅 AWS Marketplace API 参考

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

使用 EC2 Image Builder 组件产品

作为 AWS Marketplace 卖家,您可以使用 EC2 Image Builder 组件发布交付给 AWS Marketplace 买家的 AMI-based 产品。要创建组件并发布 AWS Marketplace 清单,请按顺序完成以下部分。

构建和测试您的 Image Builder 组件

在 Image Builder 上构建和测试您的组件。有关说明,请参阅 Image Builder 用户指南中的 Image Builder 镜像开发自定义组件。使用 Image Builder 创建组件时,请确保执行以下操作:

  • 该组件及其所有底层依赖项,例如亚马逊简单存储服务 (Amazon S3) 存储桶、机密或参数,都必须在美国东部(弗吉尼亚北部)(us-east-1) AWS 区域创建。

  • 在组件描述中包括支持的架构和任何软件依赖关系。

  • 通过创建映像管道并部署管道创建的 AMI,在您的 AWS 账户中测试您的组件。

  • 如果您的组件包含从 S3 存储桶复制二进制文件、包或文件的说明,请使用S3Download操作模块。在S3Download模块中source,输入文件在 S3 存储桶中的静态位置。以下示例在组件安装过程中从 S3 存储桶复制二进制文件。

    - name: DownloadMyFile action: S3Download inputs: - source: s3://amzn-s3-demo-source-bucket/path/to/package.zip destination: C:\myfolder\package.zip
  • 使用S3Download操作时,组件可以提取最大 2 GB 的文件。

  • 如果您的组件使用参数,请确保所有参数均具有默认值。例如,如果您有一个名为的参数region,请确保您有一个有效的默认值,例如us-east-1。这些默认值用于 AWS Marketplace 处理和测试。如果不包含默认值,则测试可能会失败。

  • 如果您的组件使用 P AWS Secrets Manager arameter Store 或存储参数的 AWS Systems Manager 功能,请执行以下操作:

    • 要在组件中作为步骤检索值,请在 YAML 配置文件中嵌入 AWS Command Line Interface 命令。

    • 在你的 AWS 账户的 Secrets Manager 或 Parameter Store 中创建相应的条目。使用默认密钥并提供有效值,这将有助于在 AWS Marketplace 测试过程中构建组件。例如,假设你有一个名为的参数,saas_token其默认值为token,它使用参数存储。在这种情况下,请在参数存储中创建键值对。token用作钥匙。为该值输入适用于您的应用程序的有效 SaaS 令牌。

      请注意,存储在您的 AWS Marketplace 卖家账户中的值将仅用于 AWS Marketplace 测试目的。这些价值观不会与买家共享。

    • AWS Marketplace 在组件创建过程中选择的所有兼容操作系统版本中,自动为您的组件生成 Amazon 系统映像 (AMI)。在构建组件时,请至少选择一个兼容的操作系统版本。使用 EC2 Image Builder 管道创建和测试 AMI,验证您的组件与所有选定的操作系统版本的兼容性。

复制组件 ARN

在 Image Builder 上创建并测试组件后,复制并保存组件 ARN。使用 AWS Marketplace 目录 API 发布产品清单时,您将使用 ARN。

复制 Image Builder 组件 ARN
  1. 登录 AWS 管理控制台并打开 Image Builder 控制台,网址为https://console.aws.amazon.com/imagebuilder/

  2. 在左侧导航栏的 “保存的资源” 下,选择 “组件”。

  3. 在 “组件” 页面上,在 “筛选器所有者” 中,选择 “我拥有”。

  4. 选择组件名称。

  5. 在组件详情页面的摘要部分,复制 ARN。

Creating AWS Marketplace IAM 策略

创建以下 IAM 策略以授予对您的 Image Builder 组件和相关资源(例如 Amazon S3 存储桶和密钥)的 AWS Marketplace 访问权限。使用提供的策略示例。您可以将这些策略附加到 I AWS Marketplace AM 角色。有关创建策略的帮助,请参阅 IAM 用户指南中的使用 JSON 编辑器创建策略

  • Image Builder 获取组件策略,允许 AWS Marketplace 在 Image Builder 上访问您的组件。此政策是必需的。将该策略命名为 mp_ib_ingest

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "imagebuilder:GetComponent", "Resource": "*" } ] }
  • Amazon S3 读取访问策略, AWS Marketplace 允许从 S3 存储桶检索二进制文件。只有当您的组件使用S3Download操作模块并将关联的二进制文件存储在 S3 存储桶中时,才需要使用此策略。将该策略命名为 mp_ib_s3_read_only

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "ListObjectsInBucket", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::bucket_name" ] }, { "Sid": "ReadObjectsInBucket", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectAttributes" ], "Resource": [ "arn:aws:s3:::bucket_name/*" ] } ] }
  • Secrets Manager 读取访问策略, AWS Marketplace 允许检索存储在 Secrets Manager 中的机密。只有当您的组件使用 Secrets Manager 存储密钥时,才需要使用此策略。将该策略命名为 mp_ib_sm_read_only。要将策略限制为仅限您的密钥,请将该Resource部分*中的替换为您的密钥。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "*" ] } ] }
  • 参数存储读取权限策略,允许 AWS Marketplace 检索存储在 Parameter Store 中的密钥。只有当您的组件使用 Parameter Store 存储密钥时,才需要使用此策略。将该策略命名为 mp_ib_ssm_parameter_read_only。要将策略限制为仅限您的密钥,请将该Resource部分*中的替换为您的密钥。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": [ "ssm:getParameter" ], "Resource": [ "*" ] } ] }

正在创建 AWS Marketplace IAM 角色

使用以下过程创建一个 AWS Marketplace IAM 角色,该角色具有授予对您的组件及其依赖项的 AWS Marketplace 访问权限的策略。

要创建 AWS Marketplace IAM 角色
  1. 登录 AWS 管理控制台并打开 IAM 控制台,网址为https://console.aws.amazon.com/iam/

  2. 在左侧导航栏中,选择角色

  3. 选择创建角色

  4. 选择 “自定义信任策略”。

  5. 输入以下语句:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "Service": "assets.marketplace.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  6. 选择下一步

  7. 添加您之前创建的 Image Builder 获取组件策略。获取组件策略是必需的。如果您的组件使用这些 AWS 服务,请为 S3、Secrets Manager 和 Parameter Store 添加相关策略。

  8. 选择下一步

  9. 输入角色名称,例如MPEC2IBIngestion

  10. 选择创建角色

Copy(复制) AWS Marketplace IAM 角色 ARN

创建 AWS Marketplace IAM 角色后,复制并保存角色 ARN。使用 AWS Marketplace 目录 API 发布列表时,您将使用 ARN。

要复制 AWS Marketplace IAM 角色 ARN
  1. 在 IAM 控制台的左侧导航栏中,选择角色

  2. 选择您之前创建 AWS Marketplace 的 IAM 角色,例如MPEC2IBIngestion

  3. 在角色详情页面的摘要部分,复制 ARN。

准备好您的 Image Builder 组件清单

在发布 AWS Marketplace 房源之前,请确保准备好以下信息:

  • 产品元数据 — 元数据包括产品徽标、产品标题、最终用户许可协议、支持的实例类型和 AWS 区域。

  • 定价信息 — 您可以免费提供产品,也可以按小时费率提供,也可以按小时费率提供,并有初始免费试用期。不支持自带许可证 (BYOL)。

  • 组件详情 — 详细信息包括组件 Amazon 资源编号 (ARN)、使用情况详情和 AWS Marketplace 将承担处理您的组件的 AWS Identity and Access Management (IAM) 角色。

发布您的 Image Builder 组件产品清单

本主题包含有关 AWS Marketplace 使用 AWS Marketplace 目录 API 发布 EC2 Image Builder 组件列表的说明。

先决条件

在发布 Image Builder 组件产品列表之前,请确保您具备以下信息:

  • 在中注册为卖家 AWS Marketplace。有关更多信息,请参阅注册成为 AWS Marketplace 卖家

  • 具有AWSMarketplaceSellerFullAccess权限的 IAM 用户。

  • 可公开访问的亚马逊简单存储服务 (Amazon S3) 存储桶,用于存放您的公司徽标和最终用户许可协议(如果您的组件中使用)。您将在您的 JS ChangeSet ON 文件中输入 S3 存储桶的网址。

  • AWS Command Line Interface (AWS CLI)。 有关更多信息,请参阅什么是 AWS 命令行界面? 在《AWS Command Line Interface 用户指南》中。

在上创建 Image Builder 组件产品 AWS Marketplace

要 AWS Marketplace 使用目录 API 创建 EC2 Image Builder 组件产品,请参阅创建产品

更新 Image Builder 组件产品信息

您可以在 AWS Marketplace 管理门户上更新有关 Image Builder 组件产品的信息。

更新 Image Builder 组件产品信息
  1. 打开 AWS Marketplace 管理门户,登录到卖家账户。

  2. 在 “产品” 菜单上,选择 “服务器”。

  3. 服务器产品页面上,选择产品。

  4. 在商品详情页面的请求更改菜单上,选择与您要更新的信息相对应的商品。

  5. 提交任何更改后,该请求将以 “正在审核” 状态显示在 “申请” 选项卡上,完成后将变为 “成功”。

向现有 Image Builder 组件产品添加新版本

您可以通过 AWS Marketplace 使用向 Image Builder 组件产品添加新版本 AWS Marketplace Catalog API。

要添加新版本,请执行以下操作:
  1. 从 AWS Marketplace 管理门户中获取产品 ID。

    1. 打开 AWS Marketplace 管理门户,登录到卖家账户。

    2. 在 “产品” 菜单上,选择 “服务器”。

    3. 服务器产品页面上,选择产品。

    4. 产品摘要中,复制产品 ID

  2. 使用以下代码示例,创建 JSON 格式的变更集文件。在示例中,your-product-ID替换为您在步骤 1 中获得的产品 ID。new-version-name替换为你的版本标题。替换new-delivery-option-title为您的配送选项标题。

    [ { "ChangeType": "AddDeliveryOptions", "Entity": { "Identifier": "your-product-ID", "Type": "AmiProduct@1.0" }, "DetailsDocument": { "Version": { "VersionTitle": "new-version-name", "ReleaseNotes": "Release notes goes here." }, "DeliveryOptions": [ { "DeliveryOptionTitle": "new title", "Details": { "Ec2ImageBuilderComponentDeliveryOptionDetails": { "UsageInstructions": "Test usage instructions for IB", "AccessRoleArn": "arn:aws:iam::123456789:role/sample", "ComponentArn": "arn:aws:imagebuilder:us-east-1:123456789:component/sample/2.0.0/1" } } } ] } } ]
  3. 使用名称保存变更集文件。addIBversion.json

  4. 在您的终端或中 AWS CloudShell,运行以下命令:

    aws marketplace-catalog start-change-set --catalog AWSMarketplace --region us-east-1 --change-set file://addIBversion.json

start-change-set命令将返回一个ChangeSetId值。要监控更改集,请参阅监控变更集

异步错误

以下错误特定于中的AddDeliveryOptions操作 AWS Marketplace Catalog API。当您在处理更改集DescribeChangeSet之后调用时,会返回这些错误。有关使用DescribeChangeSet获取变更请求状态的更多信息,请参阅使用变更集

注意

以下错误代码特定于 Image Builder 交付方式。有关、和等字段的现有错误消息 Usage Instructions Recommended Instance typeAccessRoleArn,请参阅添加新版本

错误代码 错误消息

未找到资产

检查 [account-id] AWS 账户中是否存在 [组件 arn],以及提供的 AccessArn [ARN] 是否有权与之共享此 Image Builder 组件。 AWS Marketplace

未找到资产

组件 [x] 中指定的 S3 链接 [x] 不存在。在组件内提供有效的 S3 链接。

重复组件名称

组件名称 [x] 已存在于同一版本中。提供不同的组件名称。

重复组件名称

您提供的组件名称 [x] 已被其他产品使用。提供不同的组件名称。

DUPLICATE_COMPONENT_ARN

组件 Arn [x] 必须与本产品相同版本的其他配送选项中使用的组件 Arn 不同。

DUPLICATE_COMPONENT_ARN

组件 ARN [x] 必须与本产品其他版本中使用的组件 ARN 不同。

SCAN_ERROR

修复组件 [x] 上的安全漏洞 [y]。

资产访问异常

我们没有必要的权限来读取指定 S3 存储桶 [x] 中的内容。确保 S3 存储桶具有适当的读取权限。

资产访问异常

我们没有必要的权限来读取指定组件 ARN [x] 的内容。确保组件 ARN 具有相应的读取权限。

资产访问异常

我们没有读取指定包 URI [x] 内容所需的权限。确保软件包 URI 具有相应的读取权限。

资产访问异常

无法从 HTTP 源 [x] 读取。验证所提供的 HTTP 源是否正确。

IMAGE_BUILDER_COMPONENT_PACKAGE 无效

组件资源超过了摄取的大小限制。减小 S3/web 下载量或删除不必要的下载以继续。

IMAGE_BUILDER_COMPONENT_PACKAGE 无效

组件资源需要很长时间才能摄取。确保您的网络连接稳定且有足够的带宽。

图片生成器组件太多了

每个产品最多支持 5 个唯一的组件名称,限制了其他交付选项。

卖家的公开资料不完整

您的卖家公开资料不完整。在向产品添加版本之前,请先完成您的公开个人资料。

无效描述

描述缺失。在组件 [x] 中提供少于 1024 个字符的描述。

组件名称无效

提供少于 [x] 个字符的组件名称。

支持的操作系统版本无效

缺少操作系统版本。在组件 [x] 中提供支持的有效操作系统版本。

路径格式无效

阶段 [PHASE_NAME] 中的步骤 [STEP_NAME] 不允许使用 S3 或 Web 网址进行操作。 InstallMSI/UninstallMSI 确保指定的路径是可从执行操作的系统访问的有效本地路径。

不兼容_OS_TYPE

指定的组件操作系统类型 [x] 与基础映像的平台不兼容。提供与基础映像兼容的操作系统类型。

资产访问异常

我们没有必要的权限来读取指定 SSM 参数 [x] 中的内容。确保 API 输入中提供的 IAM 访问角色具有所需的读取权限。

资产访问异常

我们没有必要的权限来读取指定 SecretsManager 密钥 [x] 中的内容。确保 API 输入中提供的 IAM 访问角色具有所需的读取权限。

无效_IB_COMPONENT_BUILD_VERSION

组件 ARN [x] 的编译版本为 [y]。 AWS Marketplace 仅支持构建版本 1。使用构建版本 1 创建新的 EC2 Image Builder 版本,然后重试 AWS Marketplace

无效_IB_组件_参数

无法解析输入 [x] 中组件 [y] 的 SSM 参数。

无效_IB_组件_参数

无法解析输入 [x] 中组件 [y] 的 SecretsManager 密码。

缺少_IB_COMPONENT_参数

在组件 [x] 中找不到用于输入 [y] 的参数

无效_IB_组件_参数

为组件 [y] 中的参数 [x] 提供默认值。

LAUNCH_TEST 失败

组件 [x] 的启动测试失败。错误消息:[z]

SSHAuthFailedForUserAndKeypair

无法使用操作系统默认用户名 [X] 登录实例。

无效的 IB_COMPONENT

需要一个组件构建阶段。为组件 [x] 添加有效的构建阶段

重复版本标题

版本标题必须与本产品的任何其他版本标题不同。

版本标题无效

删除商标符号前的空格。

版本标题无效

移除不支持的字符:[x、y、z]

版本标题无效

删除版本标题开头的空格。

版本标题无效

提供少于 [x] 个字符的版本标题。

无效的发行说明

删除商标符号前的空格。

无效的发行说明

移除不支持的字符:[x、y、z]

无效的发行说明

删除发行说明开头的空格。

无效的发行说明

提供少于 (x) 个字符的发行说明。

无效_使用_指令

删除商标符号前的空格。

无效_使用_指令

移除不支持的字符:[x、y、z]

无效_使用_指令

提供少于 (x) 个字符的使用说明。

重复配送选项标题

提供唯一的配送选项标题。

无效的配送选项标题

配送选项标题已存在,请使用其他标题重试。

更新有关现有版本的信息

更新有关现有版本的信息
  1. 从 AWS Marketplace 管理门户中获取产品 ID。

    1. 打开 AWS Marketplace 管理门户,登录到卖家账户。

    2. 在 “产品” 菜单上,选择 “服务器”。

    3. 服务器产品页面上,选择产品。

    4. 产品摘要中,复制产品 ID

  2. 在您的终端中,运行以下命令。在命令中,your-product-ID替换为在步骤 1 中获得的 ID。

    aws marketplace-catalog describe-entity --catalog AWSMarketplace --region us-east-1 --entity-id 'your-product-ID'
  3. 在返回的输出中,转到DetailsDocumentVersions部分。复制要更新的版本的DeliveryOptionsId值。

  4. 使用以下代码示例,创建 JSON 格式的变更集文件。在示例中,your-product-ID替换为您在步骤 1 中获得的产品 ID。your-release-notes替换为您的发行说明。your-delivery-option-ID替换为您在步骤 3 中获得的配送选项的 ID。your-usage-instructions替换为您的使用说明。

    [ { "ChangeType": "UpdateDeliveryOptions", "Entity": { "Identifier": "your-product-ID", "Type": "AmiProduct@1.0" }, "DetailsDocument": { "Version": { "ReleaseNotes": "your-release-notes" }, "DeliveryOptions": [ { "Id": "your-delivery-option-ID", "Details": { "Ec2ImageBuilderComponentDeliveryOptionDetails": { "UsageInstructions": "your-usage-instructions" } } } ] } } ]
  5. 使用名称保存变更集文件。updateVersionInfo.json

  6. 在您的终端或中 AWS CloudShell,运行以下命令:

    aws marketplace-catalog start-change-set --catalog AWSMarketplace --region us-east-1 --change-set file://updateVersionInfo.json

start-change-set命令将返回一个ChangeSetId值。要监控更改集,请参阅监控变更集

限制 Image Builder 组件产品版本

限制版本会使买家无法使用该版本。您可以使用 AWS Marketplace 目录 API 限制您的 Image Builder 组件产品的某个版本。 AWS Marketplace 您必须让您的产品至少有一个版本不受限制。 AWS Marketplace您不能限制对唯一的公共版本的访问。

更新有关现有版本的信息
  1. 从 AWS Marketplace 管理门户中获取产品 ID。

    1. 打开 AWS Marketplace 管理门户,登录到卖家账户。

    2. 在 “产品” 菜单上,选择 “服务器”。

    3. 服务器产品页面上,选择产品。

    4. 产品摘要中,复制产品 ID

  2. 在您的终端中,运行以下命令。在命令中,your-product-ID替换为在步骤 1 中获得的 ID。

    aws marketplace-catalog describe-entity --catalog AWSMarketplace --region us-east-1 --entity-id 'your-product-ID'
  3. 在返回的输出中,转到DetailsDocumentVersions部分。复制要更新的版本的DeliveryOptionsId值。

  4. 使用以下代码示例,创建 JSON 格式的变更集文件。在示例中,your-product-ID替换为您在步骤 1 中获得的产品 ID。your-delivery-option-ID替换为您在步骤 3 中获得的配送选项的 ID。

    [ { "ChangeType": "RestrictDeliveryOptions", "Entity": { "Identifier": "your-product-ID", "Type": "AmiProduct@1.0" }, "DetailsDocument": { "DeliveryOptionIds": [ "your-delivery-option-ID" ] } } ]
  5. 使用名称保存变更集文件。restrictec2ibversion.json

  6. 在您的终端或中 AWS CloudShell,运行以下命令:

    aws marketplace-catalog start-change-set --catalog AWSMarketplace --region us-east-1 --change-set file://restrictec2ibversion.json

start-change-set命令将返回一个ChangeSetId值。要监控更改集,请参阅监控变更集

监控变更集

start-change-set命令将返回一个ChangeSetId值。您可以通过以下方式监控变更集的进度:

  • 在终端中运行以下命令。在命令中。changeset-ID替换为start-change-set命令返回的ChangeSetId值。

    aws marketplace-catalog describe-change-set ‐‐catalog AWSMarketplace ‐‐change-set-id changesetID
  • AWS Marketplace 管理门户的 “请求” 选项卡上查看请求状态。

保护软件下载

为了保护 ISV 软件的知识产权并确保向 AWS Marketplace 买家提供稳定、一致的软件交付,请 AWS Marketplace 自动解析S3DownloadWebDownload操作组件中的模块。然后,引用的文件将安全地存储在由管理的私有 Amazon S3 存储桶中 AWS Marketplace。要选择退出此摄取过程并独立管理软件下载,请运行使用wgetcurl下载命令的 bash 脚本。