使用为AMI产品配置自定义计量 AWS Marketplace Metering Service - AWS Marketplace

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

使用为AMI产品配置自定义计量 AWS Marketplace Metering Service

AWSMarketplace 计量服务是一项定价和计量功能,您可以使用它直接按使用类别对软件收费。有五种使用类别:用户、数据、带宽、主机或单元。您可以将计量服务与基于 Amazon 系统映像 (AMI)、基于容器和基于软件即服务 (SaaS) 的产品一起使用。以下各节提供了有关如何使用 AWS Marketplace 计量服务配置自定义计量的更多信息。

AWSMarketplace 计量服务支持多种新方案。例如,如果您的软件监控主机,则您可以对监控的每个主机收费。您可以根据主机大小制定不同价格,并根据每小时监控的并发主机数量收费。与此类似,如果软件允许组织中的多个用户登录,您可以按用户数收费。每小时,将针对预配置的总用户数对客户收取一次费用。

有关更多信息,请参阅《AWS Marketplace 计量服务API参考》。

要求

使用计量服务的所有AMI基于软件都必须满足以下要求:

  • 您的软件必须 AWS Marketplace 通过 Amazon 系统映像 (AMI) 启动。

  • 如果您有现有商品 AWS Marketplace,则必须提交新商品AMI并创建新商品才能启用此功能。

  • 所有软件都必须使用 AWS Identity and Access Management (IAM) 角色进行配置。最终客户必须向用户使用软件配置的亚马逊弹性计算云 (AmazonEC2) 实例添加IAM角色。通过部署软件时,IAM角色的使用是可选的 AWS Marketplace。在部署 M AWS arketplace 计量服务软件时,这是必需的。

  • 您的软件必须能够以某种方式确定使用情况。

请致电 AWS Marketplace

您的软件必须每小时调用一次 Metering Service,并记录该小时的用量值。

当你的软件启动 minute-of-the-hour时,它应该记录它的启动时间。这称为启动时刻。在每小时的启动时刻,您的软件必须确定该小时的用量值并调用 Metering Service。有关如何获取此值的信息,请参阅修改软件以使用 Metering Service

要在每小时的启动时刻唤醒,您的软件必须使用以下方法之一:

  • 您的软件中的线程。

  • 随实例或软件启动的进程守护程序。

  • 在应用程序启动期间配置的 cron 作业。

    注意

    您的软件必须使用在客户实例上配置的IAM角色调用 AWS Marketplace 计量服务,并指定消费维度和金额。

您的软件可以使用调用 AWS Marketplace 计量服务,类似于以下示例实现: AWS SDK

  1. 使用实例配置文件创建服务客户端。这需要为EC2实例配置角色。角色凭证由SDK自动刷新。

  2. 每小时读取一次您的软件配置和状态,以确定该小时的用量值。这可能包括收集 value-per-dimension.

  3. 使用以下参数在SDK客户端上调用该meterUsage方法(为每个有用法的维度另外调用):

    • timestamp— 正在录制的时刻的时间戳(输入UTC)。

    • productCode – 分配给软件的产品代码。

    • dimension – 分配给软件的维度。

    • quantity – 该小时的用量值。

    • allocations –(可选)您可以为所跟踪的属性的用量提供分配。这些分配必须与记录中的总消耗量相加。对于买家来说,这些标签在他们的计费工具(例如 AWS Billing and Cost Management 控制台)中显示为潜在的成本分配标签。买家必须激活其账户中的标签才能使用这些标签追踪成本。

此外,您的软件必须调用区域内 AWS Marketplace 计量服务终端节点。您的产品必须设置了正确的区域端点,以便 us-east-1 将记录发送到 us-east-1 端点,us-west-2 将记录发送到 us-west-2 端点。进行区域中调用为买家提供更稳定的体验,并防止存在不相关的区域而可能影响在其他区域中运行的软件。

向服务发送计量记录时,必须连接到您所在地区的 AWS Marketplace 计量服务。使用 getCurrentRegion() helper 方法确定EC2实例运行的区域,然后将此区域信息传递给MeteringServiceClient构造函数。如果您未在SDK构造函数 AWS 区域 中指定,则使用默认us-east-1区域。如果您的应用程序尝试对该服务进行跨区域调用,将拒绝调用。有关更多信息,请参阅确定应用程序的当前区域getCurrentRegion()

故障处理

您的产品必须将计量记录发送到该服务 (公有 Internet 端点),以便可以捕获该用量和进行计费。由于客户可能使用某种方式修改网络设置而导致无法传送您的计量记录,您的产品应选择一个故障模式以处理这种情况。

注意

某些计量失败可能是连接时出现的暂时性问题 AWS Marketplace Metering Service。 AWS Marketplace 强烈建议实施最长 30 分钟的重试,并以指数级退缩,以避免短期中断或网络问题。

通常,软件可能在发生故障时打开 (提供一条警告消息,但保留完整功能) 或在发生故障时关闭 (在应用程序中禁用所有功能,直到重新建立连接)。您可以选择在发生故障时打开、在发生故障时关闭或您的应用程序特定的模式。在发生计量故障两小时后内,强烈建议您禁止在发生故障时关闭。

例如,如果在发生故障时部分打开,您可以继续允许访问软件,但不允许买家修改软件设置。或者,买家仍然可以访问软件,但无法创建额外的用户。您的软件负责定义和实施该故障模式。提交时必须包含软件的失败模式,并且以后无法更改。AMI

限制

在设计和提交支持 Metering Service 的软件时,请务必记住以下限制:

  • IAM客户的角色和互联网网关要求-您的客户必须拥有互联网网关,并且必须使用具有特定权限的IAM角色启动您的软件。有关更多信息,请参阅 AWS Marketplace 计量和授权 API 权限。如果未满足这两个条件,则您的软件无法连接到 Metering Service。

  • 无法将新的使用类别添加到现有 Metering Service 产品,也无法更改这些类别 - 一旦客户订阅您的软件产品,即表示他们同意条款和条件。使用 Metering Service 更改产品中的使用类别需要新产品和新订阅。

  • 无法将新的维度添加到现有 Metering Service 产品,也无法更改这些纬度 - 一旦客户订阅您的软件产品,即表示他们同意条款和条件。使用 Metering Service 更改产品中的维度需要新产品和新订阅。您可以为现有产品添加新维度,上限为 24 个。

  • 缺少免费试用和年度订阅 - Metering Service 产品在启动时不支持免费试用和年度订阅。

  • 多实例或基于集群的部署注意事项 - 一些软件将作为多实例部署的一部分部署。在设计您的软件时,请考虑测量用量的方式和位置以及发出计量记录的位置。

代码示例

提供以下代码示例是为了帮助您将AMI产品与发布和维护产品 AWS Marketplace APIs所需的代码集成。

带有用量分配标签的 MeterUsage(可选)

以下代码示例与使用消费定价模型AMI的产品相关。Python 示例将带有相应使用量分配标签的计量记录发送给您的客户 AWS Marketplace ,以向您的客户收取 pay-as-you-go费用。

# 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 计量服务API参考MeterUsage中的。

响应示例

{ "MeteringRecordId": "string" }