使用 AWS Marketplace Metering Service 对容器产品配置自定义计量
AWS Marketplace 容器产品可以对每种产品多达 24 种不同的定价维度进行自定义计量。每个维度都可以具有与之相关的长期合同价格。要启用自定义计量,请将您的容器产品与 AWS Marketplace Metering Service 集成。您可以使用 MeterUsage
API 操作为该用量定义自己的定价单位和自定义计量以便 AWS 进行计费。以下部分将介绍如何为容器产品配置自定义计量。
价格维度在两个位置定义,一次是在产品加载表单中,一次是通过 MeterUsage
API 操作。此双因素方法可确保后续的产品在向公众提供之前按预期工作。
要设置自定义计量,您需要选择使用类别、单位类型和定价维度:
-
用户类别 - 用户类别可帮助买家了解您的产品是什么以及如何使用它。
-
单位类型 - 单位类型定义计费的计量单位。例如,以 GBps 或 MBps 为单位测量的带宽、主机数量或以 MB、GB 或 TB 为单位测量的数据。
-
定价维度 - 定价维度表示已为其设置每单位价格的特征或服务(例如,用户、扫描、vCPU 或已部署的代理)。定价维度是公开的。但是,您仍然可以为公开产品定义专属和自带许可 (BYOL) 优惠。请勿在计量记录中发送定价。您可以计量单位数量,我们将其与您在创建产品时定义的价格一起使用,以计算买家的账单。
如果您的产品定价不符合任何预定义类别或单位类型,您可以选择通用单位类别。然后,使用维度描述来描述单位是什么。
或者,您可以按您跟踪的属性将用量分发到分配中。分配以标签形式呈现给买家。这些标签允许买家按标签值查看按用量划分的费用。例如,如果您按用户收费,并且用户具有“部门”属性,则可以使用键为“部门”的标签创建使用分配,每个值一个分配。这不会更改您报告的价格、维度或总用量,但允许您的客户按与您的产品相应类别查看其成本。
我们建议您每小时发送一次计量记录。但是,您也可以汇总每日或每月的用量。如果您遇到中断,您可以聚合买家的软件用量,并在接下来的小时计量中发送。每小时不能发送多条记录。
重要
免费试用和预付费权利按小时进行跟踪。因此,单独发送这些记录可能会导致买家被多收费用。
主题
自定义计量先决条件
发布产品之前,您必须首先完成以下操作:
-
在 AWS Marketplace 管理门户 中创建新的容器产品,并记下其产品代码。
-
填写产品加载表单以及必要的维度信息,并将其返回给我们进行处理。
-
将用于运行应用程序的任务或容器组 (pod) 的 AWS Identity and Access Management IAM 角色与调用
MeterUsage
所需的 IAM 权限搭配使用。IAM 托管策略AWSMarketplaceMeteringRegisterUsage
具有这些权限。 -
(可选)如果要查看日志记录,建议您在任务或容器组 (pod) 定义中启用 AWS CloudTrail 日志记录。
-
使用您定义的所有定价维度的记录对
MeterUsage
API 操作进行测试调用。
自定义计量的产品加载表单
填写产品加载表单进行自定义计量时,每种产品最多可以有 24 个维度。维度在以下字段中定义:
-
唯独名称 – 容器应用程序将计量记录发送到 AWS Marketplace Metering Service 时使用的名称。此名称指示买家将使用的维度。此名称会显示在账单报告中。名称一旦设置便无法更改。
-
维度描述 – 维度的面向买家的描述。描述不能超过 70 个字符。产品向买家公开发布后,此字段无法更改。
-
维度费率 – 当买家按需支付费用时,此产品的单位软件价格。该字段支持三个小数位数。
-
维度长期费率 – 买家预先付款时,长期合同中的软件总价格。
-
长期期限(天) - 长期合同的期限(以天为单位)。
测试 MeterUsage
集成和预览模式
在将映像提交到 AWS Marketplace 以进行发布之前,您可以使用 MeterUsage
操作测试您的集成。
预览模式的运行方式与生产模式完全相同,但预览模式不验证对您的产品的使用权。要在预览模式下调用 MeterUsage
,请使用您用于在 AWS Marketplace 上列出产品的 AWS 账户在 Amazon Elastic Container Service (Amazon ECS) 或 Amazon Elastic Kubernetes Service (Amazon EKS) 上运行您的产品,从而从容器映像中调用 MeterUsage
。您的计量集成必须动态设置 AWS 区域,而不是对其进行硬编码。但是,在测试时,请至少在美国东部(弗吉尼亚州北部)区域启动一个包含您的付费容器的 Amazon ECS 任务或 Amazon EKS 容器组 (pod),以便 AWS Marketplace 运营团队可以使用该区域的日志验证您的工作。
注意
-
如果您的产品同时支持 Amazon ECS 和 Amazon EKS,则您只需在 Amazon EKS 中启动,我们便能验证您的集成。
-
在向公众发布产品之前和添加新维度之后,对每个维度进行测试。如果您没有发送与容器产品关联的每个维度的计量记录,则会导致错误并导致请求失败。
在使用所有必需的元数据和定价信息发布您的产品之前,您无法完全测试集成。根据请求,AWS Marketplace 目录运营团队可以验证在预览模式下收到的计量记录。
MeterUsage
中的错误处理
如果您的容器映像与 MeterUsage
操作集成并在容器启动时收到 ThrottlingException
之外的异常,您应终止容器以防止未经授权的使用。
仅在初始调用 MeterUsage
时引发 ThrottlingException
以外的异常。从同一 Amazon ECS 任务或 Amazon EKS 容器组 (pod) 进行的后续调用不会引发 CustomerNotSubscribedException
,即使客户在任务或 容器组 (pod) 仍在运行时取消订阅也是如此。这些客户在取消订阅并跟踪其使用情况后仍需支付运行容器的费用。
有关 MeterUsage
常见错误的详细描述,请参阅《AWS Marketplace Metering Service API 参考》中的 MeterUsage。每个 AWS SDK 编程语言都有一组错误处理准则,您可以参阅它们来了解其他信息。
供应商计量标记(可选)
供应商计量标记可帮助独立软件供应商 (ISV) 让买家更精细地了解其软件使用情况并帮助他们进行成本分配。
有许多方法可以标记买家的软件使用情况。一种方法是先询问买家他们希望在成本分配中看到什么。然后,您可以在为买家帐户跟踪的属性之间分配使用情况。属性的示例包括 AccountId
、Business Unit
、Cost Centers
,以及您的产品的其他相关元数据。这些属性作为标签展示给买家。使用标签,买家可以在 AWS Billing 控制台 (https://console.aws.amazon.com/billing/
在常见情形中,买家会通过一个 AWS 账户订阅您的产品。买家还有许多与同一产品订阅相关的用户。您可以使用具有 AccountId
键的标签创建用量分配,然后将用量分配给每个用户。在这种情况下,买家可以在其账单与成本管理控制台中激活 AccountId
标签并分析个人用户的使用情况。
卖家体验
卖家可以汇总具有相同标签集的资源的计量记录,而不是汇总所有资源的使用情况。例如,卖家可以构造包含不同的 UsageAllocations
存储桶的计量记录。每个存储桶代表一组标签的 UsageQuantity
,例如 AccountId
和 BusinessUnit
。
在下图中,资源 1 具有一组唯一的 AccountId
和 BusinessUnit
标签,并作为单个条目出现在计量记录中。
资源 2 和资源 3 都具有相同的 AccountId
标签 2222
和相同的 BusinessUnit
标签 Operations
。因此,它们在计量记录中合并为一个 UsageAllocations
条目。
卖家还可以将没有标签的资源组合成一个包含分配用量的 UsageAllocation
,然后将其作为 UsageAllocations
中的一个条目发送。
限制包括:
-
标签数 – 5
-
UsageAllocations
(基数)的大小 – 2500
验证包括:
-
标签键和值允许的字符 – a-zA-Z0-9+ -=._:\/@
-
UsageAllocation
列表中的最大标签数 – 5 -
两个
UsageAllocations
的标签不能相同(也就是说,标签键和值的组合相同)。如果是这样的话,他们必须使用相同的UsageAllocation
。 -
UsageAllocation
的AllocatedUsageQuantity
之和必须等于UsageQuantity
,即聚合用量。
买家体验
下表显示了买家激活 AccountId
和 BusinessUnit
供应商标签后的买家体验示例。
在此示例中,买家可以在其成本使用报告中看到分配的用量。供应商计量标签使用前缀 “aws:marketplace:isv”
。在账单与成本管理中,买家可以再成本分配标签下的 AWS 生成的成本分配标签中激活它们。
成本使用报告的第一行和最后一行与卖家向 Metering Service 发送的内容相关(如 卖家体验 示例所示)。
ProductCode | 买家 | UsageDimension | UsageQuantity | aws:marketplace:isv:AccountId |
aws:marketplace:isv:BusinessUnit |
---|---|---|---|---|---|
xyz | 111122223333 | 网络:每 (GB) 检查一次 | 70 | 2222 | 操作 |
xyz | 111122223333 | 网络:每 (GB) 检查一次 | 30 | 3333 | 财务 |
xyz | 111122223333 | 网络:每 (GB) 检查一次 | 20 | 4444 | IT |
xyz | 111122223333 | 网络:每 (GB) 检查一次 | 20 | 5555 | 市场营销 |
xyz | 111122223333 | 网络:每 (GB) 检查一次 | 30 | 1111 | 市场营销 |
有关代码示例,请参阅 带有用量分配标签的 MeterUsage 代码示例(可选)。
代码示例
提供了以下代码示例来帮助您将容器产品与发布和维护产品所需的 AWS Marketplace API 集成。
带有用量分配标签的 MeterUsage
代码示例(可选)
以下代码示例与具有消费定价模式的容器产品相关。Python 示例向 AWS Marketplace 发送具有相应用量分配标签的计量记录,以便向客户收取即用即付费用。
# NOTE: Your application will need to aggregate usage for the # customer for the hour and set the quantity as seen below. # AWS Marketplace can only accept records for up to an hour in the past. # # productCode is supplied after the AWS Marketplace Ops team has # published the product to limited # Import AWS Python SDK import boto3 import time usageRecord = [ { "AllocatedUsageQuantity": 2, "Tags": [ { "Key": "BusinessUnit", "Value": "IT" }, { "Key": "AccountId", "Value": "123456789" }, ] }, { "AllocatedUsageQuantity": 1, "Tags": [ { "Key": "BusinessUnit", "Value": "Finance" }, { "Key": "AccountId", "Value": "987654321" }, ] } ] marketplaceClient = boto3.client("meteringmarketplace") response = marketplaceClient.meter_usage( ProductCode="testProduct", Timestamp=int(time.time()), UsageDimension="Dimension1", UsageQuantity=3, DryRun=False, UsageAllocations=usageRecord )
有关 MeterUsage
的更多信息,请参阅《AWS Marketplace Metering Service API 参考》中的 MeterUsage。
响应示例
{ "MeteringRecordId": "string" }