亚马逊AWS官方博客
SaaS 产品在亚马逊云科技 Marketplace 上的定价模式及系统集成
![]() |
1. 概述
亚马逊云科技 Marketplace(以下简称 Marketplace)是一个提供甄选的数字化产品的平台,也是 ISV(Independent Software Vendor)触达亚马逊云科技庞大的海外用户群。为了给企业提供更加易用的应用层软件,越来越多的 ISV 推出了 SaaS 产品。本文将介绍 Marketplace 中 SaaS 产品不同的定价模式,以及在不同模式下如何集成。
2. 定价模式介绍
SaaS 产品共有三种定价模式:
- SaaS 合约(Contract):用户按合约预付费,可以选择厂商给出的 1 月 / 1 年 / 3 年的合约价格。合约到期后,用户需要续约才能继续使用产品。供应商通过调用 Marketplace API 确认购买情况。
- SaaS 订阅(Subscription): 用户按使用量后付费,根据订阅维度的收费标准和实际使用量按需付费,且可随时取消订阅。供应商需定期提交使用报告,由 Marketplace 完成计费,也称为 usage-based、consumption-based 或 pay-as-you-go 模式。
- SaaS 合约消费混合(Contract with Consumption):结合了前两种模式的特点。客户预先支付基础授权费,之后还需按实际使用量持续付费。供应商同时需要确认购买情况和定期提交使用报告。
下面这张图解释了三种模式下客户获取和使用 SaaS 应用的流程:
![]() |
3. 定价模式选择
产品发布后将无法更改产品的定价模式,因此,产品发布前需要选择合适的定价模式。如果您根据使用量收费,但将来会收取预付费用,则应首先使用 SaaS 合约消费混合(Contract with Consumption)定价模式发布产品。此外,使用 SaaS 订阅(Subscription)定价模式,将无法为特定客户创建专属优惠(Private Offer)来收取预付费用。
特性 | SaaS 合约(Contract) | SaaS 订阅(Subscription) | SaaS 合约消费混合(Contract with Consumption) |
付款模式 | 预付费 | 按使用量后付费 | 基础费用预付 + 额外使用量后付费 |
计费周期 | 一次性预付整个合约期 | 按月计费 | 合约费用一次性预付 + 额外使用量按月计费 |
合约期限 | 固定期限(通常为 1 个月 / 1 年 / 3 年) | 无固定期限,随时可取消 | 固定期限基础合约 + 灵活的额外使用量 |
续订方式 | 合约到期需手动续订或设置自动续订 | 持续订阅直至客户取消 | 基础合约到期需续订,额外使用持续计费 |
API集成 | 使用 GetEntitlements API 检索客户权限 | 使用 MeterUsage API 报告使用量 | 同时使用两种 API |
SNS通知 | 接收 aws-mp-entitlement-notification 通知 | 接收 aws-mp-subscription-notification 通知 | 接收所有相关通知 |
使用限制 | 基于购买的权限 | 根据报告的使用量计费,无预设限制 | 基础权限固定,超额使用按量计费 |
价格灵活性 | 可提供不同期限的固定价格 | 可设置不同维度的使用量价格 | 最灵活,可组合固定价格和使用量价格 |
Private Offer | 支持 | 部分支持(不支持预付费 Private Offer) | 支持 |
适用场景 | 功能固定、价值明确的产品 | 使用量波动大、按需付费的服务 | 有基础功能和高级功能区分的产品 |
4. 系统集成
4.1 用户身份处理机制
用户身份验证流程对于所有定价模型都是相同的:
- 在 Marketplace 中,买方配置并支付(如需预付)。
- 买方将被重定向到卖家的网站,并在 HTTP 请求正文中包含一个令牌。
- 卖家调用 ResolveCustomer API 将该令牌交换为该 Web 访客的 Marketplace 客户 ID 及其它详细信息。
- 卖家将该客户 ID 存储在 SaaS 应用程序中,并将其与创建新 SaaS 账户或登录现有账户的 Web 访客相关联。
- 客户成功登录 SaaS 后将两个账号体系的身份进行绑定,持久化相关的客户信息(CustomerIdentifier, CustomerAWSAccountId, ProductCode)。
- 监听 SNS 消息,获得该客户的订阅成功消息后(subscribe-success),再给予服务。
4.2 用量处理机制
4.2.1 SaaS 合约定价(预付/自动续订)
在这种定价模型中,买家支付预付费用,这使他们能够根据购买详细信息(也称为权利)使用 SaaS 应用程序。
![]() |
卖家的 SaaS 应用程序如何检索买家的购买详细信息(权利或 entitlements):
- 确认买家的预付款后,Marketplace 会通过 Amazon SNS(aws-mp-entitlement-notification)发送一条消息 entitlement-updated,通知应用程序特定客户 ID 的权利已更改。新购买或升级时可能会发生这种情况。
- 卖家的 SaaS 应用程序调用 GetEntitlements API 检索该客户 ID 的权利。
- 卖家的 SaaS 应用程序根据该客户 ID 将这些权利与相应的 SaaS 账户相关联。
- 根据这些权利,卖家的 SaaS 允许使用量达到这些限制。卖家有责任监控和限制使用。
- 持续监听 SNS 消息,当获取客户合约改变的消息 entitlement-updated 时,调用 GetEntitlements API 获取该客户最新的合约信息,更新 SaaS 架构中的客户合约信息,并按照合约提供相应服务。
4.2.2 SaaS 订阅(按量付费)
在此定价模型中,买方无需预先付款。卖家监控买家的使用情况并将其报告给 Marketplace 进行计费。
![]() |
卖家的 SaaS 应用程序如何报告计费使用情况:
- 当买家的订阅成功且可计费时,Marketplace 会通过 Amazon SNS(aws-mp-subscription-notification)向卖家发送一条消息 subscribe-success,其中包含买家的客户 ID。卖家的应用程序根据该客户 ID 使用相应的 SaaS 账户存储此状态。
- 卖家允许买方开始将 SaaS 应用程序用于即用即付组件。
- 卖家监控和记录使用情况。卖家负责跟踪使用情况并在必要时实施限制,以降低风险并最大限度地减少暴露。
- 卖家每小时调用 BatchMeterUsage API 向 Marketplace 报告前一小时的使用情况,以便向买家收费。
- 用量情况会根据每小时进行累计,本小时内会进行覆盖。如有计算错误,可以在当前一小时内进行覆盖,或在后续小时的传输中进行调整。
- 建议采取相同的数据格式持久化客户的用量传输信息,用于对账。
- 如果当前小时该客户没有产生用量,请将用量设置为 0 进行传输。
- 如果买家在 Marketplace 中启动取消订阅流程,则 Marketplace 会向卖家发送通知 unsubscribe-pending,其中包含买家的 Marketplace 客户 ID。卖家有一小时的时段来报告所有未报告的使用情况,并限制买家对 SaaS 应用程序的访问。收到 unsubscribe-success 消息后,该用户的发送用量 API 将停止使用。
4.2.3 SaaS 合约与消费(预付+按量付费)
在此定价模型中,买家在 Marketplace 中订阅 SaaS 应用程序时需要支付预付软件费用,同时同意额外计费。该计费模型为上述两种计费模型的结合,需要将两种计费模型的对接方式进行结合,无需独立的架构设计。
![]() |
4.3 SNS 消息机制
SNS 消息机制用于提供客户与 SaaS 产品之间的关系变化通知,包含客户的订阅情况,客户的合约升级情况。建议使用 SQS 消息队列来承接 SNS 的消息,具体实践可以参考 https://docs.aws.amazon.com/zh_cn/sns/latest/dg/subscribe-sqs-queue-to-sns-topic.html#。
SNS 的消息体只包含状态的变化,而不包含具体的细节。例如,entitlement-update 的消息体中并不包含该客户对于该产品的合约到底发生了如何变化(新购买、过期、升级等),需要后续调用 GetEntitlements API 获取合约的最新信息。
对于订阅类型的产品,需要更多关注 unsubscribe-pending和unsubscribe-success 的消息,这意味着该客户对于该产品在 Marketplace 中进行了取消订阅的操作。当收到 unsubscribe-pending 消息体通知后,SaaS 供应商有 1 小时的时间来向 Marketplace 发送最终用量,该用户的发送用量的 API 将在 unsubscribe-success 消息后停止使用。
5. 总结
Marketplace 为供应商提供了丰富的定价工具支持,在发布产品前,可根据实际情况选择最适合自身的 SaaS 定价模式。