亚马逊AWS官方博客

如何在亚马逊云科技Marketplace海外区上线SaaS产品

第一章 概述

为了给企业提供更加易用的应用层软件,越来越多的软件提供商推出了SaaS产品。亚马逊云科技Marketplace(以下简称Marketplace)是一个提供甄选的数字化产品的平台,能够帮助SaaS厂商降低销售成本,触达更多的客户,是很多SaaS厂商的首选。Marketplace分海外区和中国区,很多中国的SaaS厂商,为了能够拓展海外业务,计划在Marketplace海外区上线SaaS产品。本文将介绍Marketplace 海外区中的SaaS产品及其计价模式,以及如何上线SaaS产品。

第二章  Marketplace SaaS产品介绍

2.1 SaaS产品计价模式

Marketplace上SaaS产品共有三种计价模式:

  • SaaS Subscription: 按使用量收费。厂商给出计价维度,以及相应维度上的收费标准。最终根据用户在相应维度上的使用量来收费。计价维度包括:Bandwidth/Data/Hosts/Request/Users/Unit。对于用户而言,是先使用产品,然后按月根据用量支付费用。
  • SaaS Contract:按合约收费。厂商给出1月/1年/2年/3年的合约价格。用户需要先付费,然后才能使用产品。合约到期后,用户需要续合约才能继续使用产品。
  • SaaS Contract with Subscription: 相当于以上两种模式的结合。厂商给出1月/1年/2年/3年的合约价格,以及超出合约期后,按量收费的标准。用户先付合约费,然后开始使用产品,假如合约到期,则转成按量收费,用户接着按月根据用量支付费用。

2.2 Marketplace SaaS产品用户体验

  1. 用户在Marketplace上搜索到相应的SaaS产品后,点开产品页面,可以看到SaaS产品介绍和价格信息。
  2. 点击订阅后,会跳转到确认页面。
  3. 如果是SaaS Subscription产品,确认页面需要确认用户许可协议。如果是SaaS Contract或者SaaS Contract with Subscription产品,用户需要在确认页面选择所选购的合约,同时确认用户许可协议。
  4. 确认用户许可协议后,点击设置新账户,即可跳转到SaaS产品的注册登录页面,注册登录后即可使用SaaS产品。
  5. SaaS产品的账单和Amazon Web Service的基础服务账单是集成的,用户可以统一支付。

2.3 相关要求

对于上架的SaaS产品,有以下主要要求

  • 您的SaaS应用必须至少有一部分部署在AWS中 (至少一部分软件组件托管在AWS中) 。
  • 不能售卖免费的SaaS产品。
  • 不能收集客户付款信息,包括信用卡和银行账户信息。
  • 用户在Marketplace订阅您的SaaS产品后,应该能够在您的SaaS应用程序中创建帐户,且在两个工作日内访问您的SaaS系统。

第三章Marketplace海外区SaaS上线流程

3.1 注册成为Marketplace海外区的卖家

您需要首先拥有一个AWS的账号,然后通过一下网址注册成为卖家:

https://thinkwithwp.com/marketplace/management/seller-settings/register

如果您上线的是完全免费的产品,Marketplace对于公司法律实体所在地没有要求。假如您售卖的是Paid 或者BYOL(Bring Your Own License自带软件许可)产品,Marketplace 要求您公司的法律实体必须属于以下国家和地区之一:

  • Australia
  • Bahrain
  • European Union (EU) member state
  • Hong Kong SAR
  • Japan
  • New Zealand
  • Norway
  • Qatar
  • Switzerland
  • United Arab Emirates (UAE)
  • United Kingdom (UK)
  • United States (US)

同时需要您拥有美国银行账户。如果您没有实体的美国银行账户,注册过程中会引导您通过HyperWallet开通虚拟美国银行账户。详情请参加注册卖家指南

请注意:因为SaaS属于付费产品(Paid Product),所以您公司的法律实体必须满足以上要求,且拥有美国银行账户,才能上线SaaS产品。

3.2在AWS Marketplace Management Portal中提交产品信息

登录AWS Marketplace Management Portal(AMMP), 点击Products->SaaS,根据您的SaaS产品的计价模式选择新建产品类型。如果是SaaS Subscription,选择”New SaaS Subscription”,如果是SaaS Contract或者SaaS Contract with Subscription,选”New SaaS Contract”。

继续填写相应的产品信息,其中比较重要的几项信息:

  • General页面下的”SaaS URL”: 这个是用户在Marketplace上订阅您的产品后,将会跳转到的您的SaaS产品登录页面。
  • Pricing页面:填写您的产品价格信息。
    • 如果是SaaS Contract类型产品,需要根据套餐的时长(1月/1年/2年/3年)来设定相应的价格。
    • 如果是SaaS Subscription类型产品,需要设置相应的计价维度和每个维度上的计价标准。其中Dimension API Name是用于API集成时维度的名字,对最终用户不可见。Dimension Description为计价维度描述,会展示在产品页面。Dimension Rate为该维度的收费标准,以美金为单位,为税前价格。

您填写完相关产品信息后,可以提交产品。后台人员收到您的产品信息后,会给您生成产品测试页面,并给您回复邮件。邮件内容会包括:

  • Product Page for Limited Test: 产品页面,您需要登录您的卖家Amazon Web Service账号后,才能查看。
  • Product Code: 产品唯一标识码,用于API集成。
  • SNS Topic: 需要您在API集成过程中,订阅的SNS主题。当用户订阅的状态发生改变时,会向您发SNS消息。

3.3 API集成

3.3.1 SaaS Subscription API 集成

对于Subscription类型的SaaS产品上线而言,一共有三个API需要集成,集成工作发生在Product Limited Test这一步,在该步骤,您获得了用于测试和模拟买家行为的的产品页面,用于API交互的参数Product Code以及用于接收订阅变化的SNS Topic。

您也可以根据自身情况提前进行集成代码的逻辑性开发,并在Product Limited Test这一步快速进行测试以加速您的上线流程。

  • 接收新用户 API:ResolveCustomer

当一个用户从AWS Marketplace订阅并跳转到您的SaaS应用程序后,您将会面临您的应用程序与AWS进行用户对接的过程,该用户在第一次到达您的SaaS应用程序时,他具备Amazon Web Service的账户身份,同时该用户在您的SaaS应用程序中载入后,他也具备您的SaaS租户属性,为了日后您与AWS Marketplace进行交互,您需要在这一步骤中进行API集成,完成该用户2个身份的绑定。

ResolveCustomer API是整个SaaS API集成的第一步,也是客户通过AWS Marketplace进入到您的SaaS应用的第一步,在这一步骤中,我们需要通过该API完成两部分工作:

  • 验证新客户

在客户订阅您的产品后,他们将被重定向到执行的URL。该重定向是一个POST请求,包括一个临时令牌。然后,您的应用程序需要通过调用AWS Marketplace计量服务API中的ResolveCustomer,将令牌换成客户ID。在获得客户ID后,将其保存在您的应用程序中,以便将来调用。

  • 载入您的新客户

在成功地验证了一个客户后,让他们加入您的应用程序。例如,让他们填写一个表格来创建一个新的用户账户。或者,为他们提供进入应用程序的后续步骤。您的应用程序可以根据客户的信息来自动化的装载该客户所需要的后续资源与服务。

如上图所示,在使用ResolveCustomer API的过程中,首先需要从Http Request中获取token,当客户从AWS Marketplace跳转到您的应用程序过程中,AWS Marketplace会给您上线过程中提交的URL发送POST请求,您需要从该请求中通过获取x-amzn-marketplace-token获取该用户的身份token,然后调用ResolveCustomer API获得CustomerIdetifier和ProductCode,其中CustomerIdetifier为该客户在AWS上身份的标示,ProductCode是产品的唯一标识码。

您需要将CustomerIdetifier与ProductCode基于您应用程序逻辑进行业务处理,并用于后续该用户与AWS Marketplace API交互。

  • 发送计量记录API:BatchMeterUsage

基于Subscription的SaaS应用程序与AWS Marketplace API集成,需要以小时为间隔调用BatchMeterUsage API向AWS Marketplace传送客户在SaaS应用程序中的用量。

您使用 AWS Marketplace 计量服务中的 BatchMeterUsage 操作,代表您的客户向 AWS 交付计量记录。我们建议使用CloudTrail来监控活动,以确保计费信息被发送到AWS Marketplace。在发送计量记录时请记住:

    • Marketplace按小时对计量请求进行去重复化处理
    • 每小时发送的记录是累积的
    • 最佳做法是每小时发送记录,即使数量为0

如上图所示,您可以将多个产品与多个用户的用量在同一个API中传送给AWS Marketplace。BatchMeterUsage API中,维度名字需要与您上线过程中,在AMMP中所填写的Dimension API Name相同。

  • 监控订阅状态的变化

通过订阅和监控SNS Topic,如果用户的订阅状态发生了变化,您会收到Marketplace发出的SNS消息。您需要对这些消息进行处理,相关工作包括:

设置一个SQS队列并订阅您产品的SNS Topic。该主题提供关于客户订阅变化的通知。这使您能够知道何时为特定的客户提供和撤销访问。消息类型包括:subscribe-success, subscribe-fail, unsubscribe-pending, unsubscribe-success。

在你收到subscribe-success的消息后,客户账户就可以进行计量了。你在这个通知之前发送的记录不会被统计。此外,我们建议您在收到这一消息后,再给用户分配SaaS资源。

3.3.2 SaaS Contract API集成

对于Contract类型的SaaS产品上线而言,一共有三个API需要集成,集成工作发生在Product Limited Test这一步的过程中,在该步骤,您获得了用于测试和模拟买家行为的的产品页面,用于API交互的参数Product Code以及用于接收订阅变化的SNS Topic。

您也可以根据自身情况提前进行集成代码的逻辑性开发,并于Product Limited Test这一步快速进行测试以加速您的上线流程。

  • 接收新用户 API:ResolveCustomer

当一个用户从Marketplace订阅并跳转到您的SaaS应用程序后,您将会面临您的应用程序与Marketplace进行用户对接的过程,该用户在第一次到达您的SaaS应用程序时,他具备Amazon Web Service的账户身份,同时该用户在您的SaaS应用程序中载入后,他也具备您的SaaS租户属性,为了日后您与AWS Marketplace进行交互,您需要在这一步骤中进行API集成,完成该用户2个身份的绑定。

ResolveCustomer API是整个SaaS API集成的第一步,也是客户通过AWS Marketplace进入到您的SaaS应用的第一步,在这一步骤中,我们需要通过该API完成两类工作:

  • 验证新客户

在客户订阅您的产品后,他们将被重定向到执行的URL。该重定向是一个POST请求,包括一个临时令牌。然后,您的应用程序需要通过调用AWS Marketplace计量服务API中的ResolveCustomer,将令牌换成客户ID。在获得客户ID后,将其保存在您的应用程序中,以便将来调用。

  • 载入您的新客户

在成功地验证了一个客户后,让他们加入您的应用程序。例如,让他们填写一个表格来创建一个新的用户账户。或者,为他们提供进入应用程序的后续步骤。您的应用程序可以根据客户的信息来自动化地装载该客户所需要的后续资源与服务。

如上图所示,在使用ResolveCustomer API的过程中,首先需要从Http Request中获取token,当客户从Marketplace跳转到您的应用程序过程中,Marketplace会给您上线过程中提交的URL发送POST请求,您需要从该请求中通过获取x-amzn-marketplace-token获取该用户的身份token,然后调用ResolveCustomer API获得CustomerIdetifier和ProductCode,其CustomerIdetifier

为该客户在AWS上身份的标示,ProductCode是产品的唯一标识符。

您需要将CustomerIdetifier与ProductCode基于您应用程序逻辑进行业务处理,并用于后续该用户与Marketplace API交互。

  • 查看合约信息API:GetEntitlements

基于Contract的SaaS应用程序与Marketplace API集成,您可以调用GetEntitlements API来获得客户在AWS Marketplace购买的Contract具体信息,您的应用程序可以根据相关业务逻辑使用这些Contract信息。

基于Contract的SaaS应用程序在上线过程中,您定义了产品的合约类型,包括合约包含的服务以及持续时间。用户在订阅产品的过程中,会选择相应的Contract。您在GetEntitlements API的返回中会得用户所选择的Contract信息,您可以保存这些信息,也可以在相关的用户行为中持续调用该API检查客户选择的合约,以便给客户提供相应的服务。

  • 监控订阅状态的变化

通过订阅和监控SNS Topic,当用户的订阅状态以及合约状态的发生变化时,您会收到相关消息,您需要对其进行处理:

设置一个SQS队列并订阅您产品的SNS主题。该主题提供关于客户订阅和权利状态变化的通知,这使您能够知道何时为特定客户提供和撤销访问权。消息类型包括:subscribe-success, subscribe-fail, unsubscribe-pending, unsubscribe-success, entitlement-updated.

3.4端到端集成测试

当您完成API集成,并且已经测试过之后,可以邮件通知Marketplace海外区运营团队。我们会有相关人员和您预约会议,进行端到端测试。测试内容主要包括

  • 产品页面内容显示正常,价格信息正确,最终用户许可协议能正常打开。
  • 用户能正常完成SaaS产品注册流程。
  • Marketplace后台查到您API调用的成功记录。

3.5正式发布

当您通过端到端集成测试后,Marketplace后台会给您发信,让您确认所有信息都无误。您回复邮件确认后,即可正式上线。

参考资料

  • AWS Marketplace 海外区卖家指南

https://docs.thinkwithwp.com/marketplace/latest/userguide/what-is-marketplace.html

  • AWS Marketplace海外区上线SaaS产品指南

http://awsmpcnsaasguideline.s3-website.cn-northwest-1.amazonaws.com.cn/en/

  • SaaS API集成介绍

https://awsmp-loadforms.s3.amazonaws.com/AWS+Marketplace+-+SaaS+Integration+Guide.pdf

  • SaaS API接口文档

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/marketplace-entitlement.html

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/meteringmarketplace.html

  • 使用Amazon SQS

http://docs.thinkwithwp.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html

  • 使用IAM角色委托解决卖家账号不是SaaS生产账号的问题

https://docs.thinkwithwp.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html

本篇作者

张明月

合作伙伴解决方案架构师

韩亮

AWS Marketplace技术客户经理