

# 在 API Gateway 中为 REST API 设置使用计划
<a name="api-gateway-create-usage-plans"></a>

在创建使用计划之前，请确保您已设置 API 密钥。有关更多信息，请参阅 [在 API Gateway 中为 REST API 设置 API 密钥](api-gateway-setup-api-keys.md)。

**Topics**
+ [将您的 API 迁移到默认使用计划（如果需要）](#api-gateway-usage-plan-migrate-to-default)
+ [创建使用计划](#api-gateway-usage-plan-create)
+ [将阶段添加到使用计划中](#api-gateway-usage-plan-add-stage)
+ [将 API 密钥添加到使用计划中](#api-gateway-usage-plan-add-key)

## 将您的 API 迁移到默认使用计划（如果需要）
<a name="api-gateway-usage-plan-migrate-to-default"></a>

如果您在 2016 年 8 月 11 日推出使用计划特征*之后* 开始使用 API Gateway，则会自动在所有受支持区域为您启用使用计划。

如果您在此日期之前开始使用 API Gateway，则可能需要迁移到默认使用计划。在选定区域中首次使用计划之前，系统将提示您选择**启用使用计划**选项。在您启用此选项后，您将为与现有 API 密钥关联的每个唯一 API 阶段创建默认使用计划。在默认使用计划中，最初不设置限制或配额限制，API 密钥和 API 阶段之间的关联将复制到使用计划中。API 的行为方式将与之前相同。但是，您必须使用 [https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlan.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlan.html) `apiStages` 属性（而不是使用 [ApiKey](https://docs.aws.amazon.com/apigateway/latest/api/API_ApiKey.html) `stageKeys` 属性）将指定的 API 阶段值（`apiId` 和 `stage`）与所含的 API 密钥进行关联（通过 [https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlanKey.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlanKey.html)）。

要检查您是否已迁移到默认使用计划，请使用 [https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-account.html](https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-account.html) CLI 命令。在命令输出中，当启用使用计划时，`features` 列表将包括 `"UsagePlans"` 的条目。

您还可以使用 AWS CLI 将您的 API 迁移到默认使用计划，如下所示：

**使用 AWS CLI 迁移到默认使用计划**

1. 调用此 CLI 命令：[https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-account.html](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-account.html)

1. 对于 `cli-input-json` 参数，使用以下 JSON：

   ```
   [
       {
           "op": "add",
           "path": "/features",
           "value": "UsagePlans"
       }
   ]
   ```

## 创建使用计划
<a name="api-gateway-usage-plan-create"></a>

以下过程介绍如何创建使用计划。

------
#### [ AWS 管理控制台 ]

**创建使用计划**

1. 通过以下网址登录到 Amazon API Gateway 控制台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 在 API Gateway 主导航窗格中，选择**使用计划**，然后选择**创建使用计划**。  
![\[API 使用计划实体\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/api-gateway-new-console-usage-plan-keys-create-setup.png)

1. 对于**名称**，输入名称。

1.  （可选）对于**描述**，输入描述。

1. 默认情况下，使用计划会启用节流。为您的使用计划输入**速率**和**突增**。选择**节流**可关闭节流。

1. 默认情况下，使用计划会针对一个时间段启用配额。对于**请求**，输入用户在使用计划的时间段内，可以发出的请求总数。选择**配额**可关闭配额。

1. 选择**创建使用计划**。

------
#### [ AWS CLI ]

以下 [create-usage-plan](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-usage-plan.html) 命令创建在月初重置的使用计划：

```
aws apigateway create-usage-plan \
    --name "New Usage Plan" \
    --description "A new usage plan" \
    --throttle burstLimit=10,rateLimit=5 \
    --quota limit=500,offset=0,period=MONTH
```

------
#### [ REST API ]

调用 [https://docs.aws.amazon.com/apigateway/latest/api/API_CreateUsagePlan.html](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateUsagePlan.html) 以创建使用计划。

------

## 将阶段添加到使用计划中
<a name="api-gateway-usage-plan-add-stage"></a>

以下过程介绍如何将阶段添加到使用计划中。

------
#### [ AWS 管理控制台 ]

**将阶段添加到使用计划中**

1. 选择您的使用计划。

1.  在**关联的阶段**选项卡下，选择**添加阶段**。  
![\[将 API 阶段添加到使用计划中。\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/api-gateway-new-console-usage-plan-keys-create-add-stage.png)

1.  对于 **API**，选择一个 API。

1.  对于**阶段**，选择一个阶段。

1. （可选）要开启方法级别的节流，请执行以下操作：

   1. 选择**方法级别节流**，然后选择**添加方法**。

   1. 对于**资源**，从您的 API 中选择一个资源。

   1. 对于**方法**，从您的 API 中选择一种方法。

   1.  为您的使用计划输入**速率**和**突增**。

1. 选择**添加至使用计划**。

------
#### [ AWS CLI ]

以下 [update-usage-plan](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-usage-plan.html) 命令将 API 的 `Prod` 阶段添加到使用计划中：

```
aws apigateway update-usage-plan \
    --usage-plan-id abc123 \
    --patch-operations op="add",path="/apiStages",value="a1b1c2:Prod"
```

------
#### [ REST API ]

调用 [https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateUsagePlan.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateUsagePlan.html) 以更新使用计划。

------

## 将 API 密钥添加到使用计划中
<a name="api-gateway-usage-plan-add-key"></a>

以下过程说明如何将 API 密钥添加到使用计划中。

------
#### [ AWS 管理控制台 ]

**将密钥添加到使用计划中**

1. 在**关联的 API 密钥**选项卡下，选择**添加 API 密钥**。  
![\[API 使用计划实体\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/api-gateway-new-console-usage-plan-keys-create-add-key.png)

1. 

   1.  要将现有密钥与您的使用计划关联，请选择**添加现有密钥**，然后从下拉菜单中选择您的现有密钥。

   1. 要创建新 API 密钥，请选择**创建并添加新密钥**，然后创建新密钥。有关如何创建新密钥的更多信息，请参阅[创建 API 密钥](api-gateway-setup-api-keys.md#api-gateway-usage-plan-create-apikey)。

1. 选择**添加 API 密钥**。

------
#### [ AWS CLI ]

以下 [create-usage-plan-key](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-usage-plan-key.html) 命令将现有 API 密钥与使用计划相关联：

```
aws apigateway create-usage-plan-key \
    --usage-plan-id a1b2c3 \
    --key-type "API_KEY" \
    --key-id aaa111bbb
```

------
#### [ REST API ]

调用 [https://docs.aws.amazon.com/apigateway/latest/api/API_CreateUsagePlanKey.html](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateUsagePlanKey.html) 以将现有 API 密钥与使用计划关联。

还可以在导入 API 密钥时将其与使用计划直接关联。调用 [https://docs.aws.amazon.com/apigateway/latest/api/API_ImportApiKeys.html](https://docs.aws.amazon.com/apigateway/latest/api/API_ImportApiKeys.html) 以直接向指定的使用计划添加一个或多个 API 密钥。请求负载应包含 API 密钥值、关联的使用计划标识符、布尔值标记 (用于表明已为使用计划启用密钥)，还可能包含 API 密钥名称和描述。

以下 `apikey:import` 请求示例将向一个使用计划 (用 `key` 进行标识) 添加三个 API 密钥 (用 `name`、`description` 和 `usageplanIds` 进行标识)：

```
POST /apikeys?mode=import&format=csv&failonwarnings=fase HTTP/1.1
Host: apigateway.us-east-1.amazonaws.com
Content-Type: text/csv
Authorization: ...

key,name, description, enabled, usageplanIds
abcdef1234ghijklmnop8901234567, importedKey_1, firstone,  tRuE, n371pt 
abcdef1234ghijklmnop0123456789, importedKey_2, secondone, TRUE, n371pt
abcdef1234ghijklmnop9012345678, importedKey_3,          , true, n371pt
```

因此，将创建三个 `UsagePlanKey` 资源并将其添加到 `UsagePlan`。

您也可以通过这种方式向多个使用计划添加 API 密钥。要执行此操作，请将每个 `usageplanIds` 列值更改为逗号分隔的字符串，其中包含选定的使用计划标识符并用引号引起来 (`"n371pt,m282qs"` 或 `'n371pt,m282qs'`)。

------

**注意**  
一个 API 密钥可与多个使用计划关联。一个使用计划可与多个阶段关联。但是，对于 API 的每个阶段，给定 API 密钥只能与一个使用计划关联。