

# AWS Marketplace で API Gateway API を販売する
<a name="sell-api-as-saas-on-aws-marketplace"></a>

API を作成、テスト、デプロイしたら、それらを API Gateway [使用量プラン](api-gateway-api-usage-plans.md)にパッケージ化し、AWS Marketplace を通じてそのプランを SaaS (Software-as-a-Service) 製品として販売します。製品にサブスクライブする API の購入者には、使用量プランに対して行われたリクエストの数に基づいて AWS Marketplace により請求されます。

AWS Marketplace で API を販売するには、販売チャネルをセットアップして AWS Marketplace と API Gateway を統合する必要があります。一般に、これには AWS Marketplace への製品の掲載、API Gateway が使用状況メトリクスを AWS Marketplace に送信できるようにする適切なポリシーを持つ IAM ロールの設定、AWS Marketplace 製品と API Gateway 使用プランの関連付け、AWS Marketplace の購入者と API Gateway API キーの関連付けが必要です。詳細については、以降のセクションで説明します。

API を AWS Marketplace で SaaS 製品として販売する方法の詳細については、「[AWS Marketplace ユーザーガイド](https://docs.aws.amazon.com/marketplace/latest/userguide/)」を参照してください。

**Topics**
+ [API Gateway を使用して AWS Marketplace 統合を初期化する](#sell-api-as-saas-on-aws-marketplace-initial-setup)
+ [使用量プランへの顧客サブスクリプションの処理](#sell-api-as-saas-on-aws-marketplace-subscription-unsubscription)

## API Gateway を使用して AWS Marketplace 統合を初期化する
<a name="sell-api-as-saas-on-aws-marketplace-initial-setup"></a>

以下のタスクは、API Gateway との AWS Marketplace の統合を初期化する 1 回限りのタスクです。これにより、API を SaaS 製品として販売できるようになります。

### への製品の出品AWS Marketplace
<a name="sell-api-as-saas-on-aws-marketplace-inital-setup-list-product"></a>

使用量プランを SaaS 商品として出品するには、[AWS Marketplace](https://aws.amazon.com/marketplace/partners/management-tour) を通じて製品ロードフォームを送信します。商品には、`apigateway` タイプの `requests` というディメンションが含まれている必要があります。このディメンションは、リクエストあたりの料金を定義し、API へのリクエストを計測するために API Gateway により使用されます。

### 計測ロールの作成
<a name="sell-api-as-saas-on-aws-marketplace-inital-setup-create-metering-role"></a>

次の実行ポリシーと信頼ポリシーを持つ `ApiGatewayMarketplaceMeteringRole` という名前の IAM ロールを作成します。このロールは、API Gateway が使用状況メトリクスを自動的に AWS Marketplace に送信できるようにします。

#### 計測ロールの実行ポリシー
<a name="sell-api-as-saas-on-aws-marketplace-inital-setup-create-metering-role-execution-policy"></a>

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "aws-marketplace:BatchMeterUsage",
        "aws-marketplace:ResolveCustomer"
      ],
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}
```

------

#### 計測ロールの信頼関係ポリシー
<a name="sell-api-as-saas-on-aws-marketplace-inital-setup-create-metering-role-trusted-policy"></a>

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

### 使用量プランと AWS Marketplace 商品の関連付け
<a name="sell-api-as-saas-on-aws-marketplace-associate-usage-plan-with-saas-product"></a>

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` の [https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlan.html#productCode](https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlan.html#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"
    }]
}
```

## 使用量プランへの顧客サブスクリプションの処理
<a name="sell-api-as-saas-on-aws-marketplace-subscription-unsubscription"></a>

以下のタスクは、デベロッパーポータルアプリケーションにより処理されます。

お客様が AWS Marketplace を通じて製品にサブスクライブすると、AWS Marketplace は、AWS Marketplace で製品を掲載したときに登録した SaaS サブスクリプション URL に `POST` リクエストを送信します。`POST` リクエストには、購入者情報を含む `x-amzn-marketplace-token` パラメータが付属しています。「[SaaS の顧客のオンボーディング](https://docs.aws.amazon.com/marketplace/latest/userguide/saas-product-customer-setup.html#in-your-application)」の手順に従って、開発者ポータルアプリケーションでこのリダイレクトを処理します。

お客様のサブスクリプションリクエストに応答して、AWS Marketplace はサブスクライブ可能な Amazon SNS トピックに `subscribe-success` 通知を送信します。(「[SaaS の顧客のオンボーディング](https://docs.aws.amazon.com/marketplace/latest/userguide/saas-product-customer-setup.html#in-your-application)」を参照してください)。お客様のサブスクリプションリクエストを承諾するには、お客様の API Gateway API キーを作成または取得し、AWS Marketplace によってプロビジョニングされたお客様の `customerId` を API キーに関連付けて、その API キーを使用料プランに関連付けることによって、`subscribe-success` 通知を処理します。

お客様のサブスクリプションリクエストが完了すると、デベロッパーポータルアプリケーションに、お客様および関連付けられた API キーが表示され、API へのリクエストの `x-api-key` ヘッダーに API キーを含める必要があることがお客様に通知されます。

顧客が使用量プランへのサブスクリプションをキャンセルすると、AWS Marketplace は `unsubscribe-success` 通知を SNS トピックに送信します。顧客をサブスクライブ解除するプロセスを完了するには、使用量プランから顧客の API キーを削除することで `unsubscribe-success` 通知を処理します。

### 顧客による使用量プランへのアクセスの許可
<a name="sell-api-as-saas-on-aws-marketplace-subscription-unsubscription-authorize-access-to-usage-plan"></a>

特定の顧客に使用量プランへのアクセスを許可するには、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 キーを持つ [https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlanKey.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlanKey.html) を作成します。次の例では、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 キーの関連付け
<a name="sell-api-as-saas-on-aws-marketplace-subscription-unsubscription-associate-marketplace"></a>

[https://docs.aws.amazon.com/apigateway/latest/api/API_ApiKey.html](https://docs.aws.amazon.com/apigateway/latest/api/API_ApiKey.html) の `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"
    }]
}
```