通过 AWS Marketplace 销售 API Gateway API - Amazon API Gateway

通过 AWS Marketplace 销售 API Gateway API

构建、测试和部署 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 Marketplace 提交产品加载表单。产品必须包含 apigateway 类型且名为 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 UsagePlanproductCode 字段设为 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 密钥关联

必须将 ApiKeycustomerId 字段更新为客户的 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" }] }