构建、测试和部署 API 后,您可以将其打包到 API Gateway usage plan(使用计划)中,并通过 AWS Marketplace 将该计划作为软件即服务 (SaaS) 产品进行销售。AWS Marketplace 根据向使用计划发出的请求数量,对订阅您的产品/服务的 API 买家进行计费。
要在 AWS Marketplace 上销售 API,您必须设置销售渠道以将 AWS Marketplace 与 API Gateway 集成。一般而言,这涉及在 AWS Marketplace 上列出您的产品,使用适当的策略设置 IAM 角色以允许 API Gateway 向 AWS Marketplace 发送用量指标,将 AWS Marketplace 产品与 API Gateway 使用计划进行关联,以及将 AWS Marketplace 买家与 API Gateway API 密钥进行关联。以下各节讨论了相关详细信息。
有关在 AWS Marketplace 上将您的 API 作为 SaaS 产品进行销售的更多信息,请参阅 AWS Marketplace 用户指南。
初始化 AWS Marketplace 与 API Gateway 的集成
以下任务是为了一次性初始化 AWS Marketplace 与 API Gateway 的集成,以便您将 API 作为 SaaS 产品进行销售。
在 中列出产品AWS Marketplace
要将您的使用计划作为 SaaS 产品列出,请通过 AWS Marketplaceapigateway
类型且名为 requests
的维度。此维度定义基于请求的定价,并由 API Gateway 用于计量对您的 API 提出的请求。
创建计量角色
使用以下执行策略和信任策略,创建一个名为 ApiGatewayMarketplaceMeteringRole
的 IAM 角色。此角色允许 API 代表您向 AWS Marketplace 发送用量指标。
计量角色的执行策略
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "aws-marketplace:BatchMeterUsage", "aws-marketplace:ResolveCustomer" ], "Resource": "*", "Effect": "Allow" } ] }
计量角色的可信关系策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
将使用计划与 AWS Marketplace 产品关联
在 AWS Marketplace 上列出产品时,您会收到一个 AWS Marketplace 产品代码。要将 API Gateway 与 AWS Marketplace 集成,请将您的使用计划与 AWS Marketplace 产品代码关联。您可以通过使用 API Gateway 控制台、API Gateway REST API、适用于 API Gateway 的 AWS CLI 或适用于 API Gateway 的 AWS SDK 将 API Gateway UsagePlan
的 productCode
字段设为 AWS Marketplace 产品代码来启用关联。以下代码示例使用 API Gateway REST API:
PATCH /usageplans/
USAGE_PLAN_ID
Host: apigateway.region
.amazonaws.com Authorization: ... { "patchOperations" : [{ "path" : "/productCode", "value" : "MARKETPLACE_PRODUCT_CODE
", "op" : "replace" }] }
处理使用计划的客户订阅
以下任务由您的开发人员门户应用程序处理。
当客户通过 AWS Marketplace 订阅您的产品时,AWS Marketplace 会将 POST
请求转发至 SaaS 订阅您在 AWS Marketplace 中上架产品时注册的 URL。POST
请求附带一个包含买家信息的 x-amzn-marketplace-token
参数。按照 SaaS 客户登记中的说明在您的开发人员门户应用程序中处理此重定向。
作为对客户订阅请求的响应,AWS Marketplace 会向您可以订阅的 Amazon SNS 主题发送 subscribe-success
通知。(请参阅 SaaS 客户登记)。要接受客户订阅请求,您应创建或检索客户的 API Gateway API 密钥,将客户的 AWS Marketplace 预置 customerId
与 API 密钥进行关联,然后将该 API 密钥添加到您的使用计划中,以此来处理 subscribe-success
通知。
当客户的订阅请求完成后,开发人员门户应用程序应向客户展示关联的 API 密钥,并告知客户该 API 密钥必须包含在对 API 提出的请求的 x-api-key
标头中。
如果客户取消对使用计划的订阅,AWS Marketplace 会向 SNS 主题发送 unsubscribe-success
通知。要完成客户取消订阅的过程,应通过从使用计划中删除客户的 API 密钥来处理 unsubscribe-success
通知。
授权客户访问使用计划
要授权给定客户访问您的使用计划,请使用 API Gateway API 为该客户获取或创建 API 密钥,然后将该 API 密钥添加到使用计划中。
以下示例介绍了如何调用 API Gateway REST API 以创建具有特定 AWS Marketplace customerId
值 (MARKETPLACE_CUSTOMER_ID
) 的新 API 密钥。
POST apikeys HTTP/1.1 Host: apigateway.
region
.amazonaws.com Authorization: ... { "name" : "my_api_key", "description" : "My API key", "enabled" : "false", "stageKeys" : [ { "restApiId" : "uycll6xg9a", "stageName" : "prod" } ], "customerId" : "MARKETPLACE_CUSTOMER_ID
" }
以下示例介绍了如何获取具有特定 AWS Marketplace customerId
值 (MARKETPLACE_CUSTOMER_ID
) 的 API 密钥。
GET apikeys?customerId=
MARKETPLACE_CUSTOMER_ID
HTTP/1.1 Host: apigateway.region
.amazonaws.com Authorization: ...
要向使用计划添加 API 密钥,请通过相关使用计划的 API 密钥创建一个 UsagePlanKey
。以下示例介绍如何使用 API Gateway REST API 完成此操作,其中 n371pt
是使用计划 ID,q5ugs7qjjh
是从之前的示例返回的示例 API keyId
。
POST /usageplans/n371pt/keys HTTP/1.1 Host: apigateway.
region
.amazonaws.com Authorization: ... { "keyId": "q5ugs7qjjh", "keyType": "API_KEY" }
将客户与 API 密钥关联
必须将 ApiKey
的 customerId
字段更新为客户的 AWS Marketplace 客户 ID。这可将 API 密钥与 AWS Marketplace 客户关联,从而可对买家进行计量和计费。以下代码示例调用 API Gateway REST API 来执行此操作。
PATCH /apikeys/q5ugs7qjjh Host: apigateway.
region
.amazonaws.com Authorization: ... { "patchOperations" : [{ "path" : "/customerId", "value" : "MARKETPLACE_CUSTOMER_ID
", "op" : "replace" }] }