

# 在 API Gateway 中部署 WebSocket API
<a name="apigateway-set-up-websocket-deployment"></a>

 在创建 WebSocket API 之后，您必须对其进行部署，以便您的用户可以调用它。

要部署 API，您可以创建 [API 部署](api-gateway-basic-concept.md#apigateway-definition-api-deployment)并将其与[阶段](api-gateway-basic-concept.md#apigateway-definition-api-stage)关联。每个阶段都是 API 的一个快照，可供客户端应用程序调用。

**重要**  
每次更新 API 后，都必须重新部署 API。对阶段设置以外的任何内容进行更改都需要重新部署，包括修改以下资源：  
路线
集成
授权方
默认情况下，您将受到每个 API 10 个阶段的限制。我们建议您为部署重用阶段。

为调用已部署的 WebSocket API，客户端会向 API 的 URL 发送消息。URL 由 API 的主机名和阶段名称确定。

**注意**  
API Gateway 将支持最大 128 KB 的负载，最大帧大小为 32 KB。如果消息超过 32 KB，则必须将其拆分为多个帧，每个 32 KB 或更小。

使用 API 的默认域名，给定阶段 (`{stageName}`) 中的 WebSocket API 的 URL（例如）采用以下格式：

```
wss://{api-id}.execute-api.{region}.amazonaws.com/{stageName}
```

要使 WebSocket API 的 URL 对用户更友好，您可以创建自定义域名（如 `api.example.com`）来替换该 API 的默认主机名。配置过程与 REST API 相同。有关更多信息，请参阅 [API Gateway 中公共 REST API 的自定义域名](how-to-custom-domains.md)。

阶段实现了对 API 的可靠版本控制。例如，您可以将 API 部署到 `test` 阶段和 `prod` 阶段，并使用 `test` 阶段作为测试版本，使用 `prod` 阶段作为稳定版本。更新通过测试之后，您可以将 `test` 阶段提升到 `prod` 阶段。可以通过将 API 重新部署到 `prod` 阶段来完成升级。有关阶段的详细信息，请参阅[为 API Gateway 中的 REST API 设置阶段](set-up-stages.md)。

**Topics**
+ [使用 AWS CLI 创建 WebSocket API 部署](#apigateway-create-websocket-deployment-using-awscli)
+ [使用 API Gateway 控制台创建 WebSocket API 部署](#apigateway-create-websocket-deployment-using-console)

## 使用 AWS CLI 创建 WebSocket API 部署
<a name="apigateway-create-websocket-deployment-using-awscli"></a>

下面的 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-deployment.html) 命令将创建一个部署。

```
aws apigatewayv2 --region us-east-1 create-deployment --api-id aabbccddee
```

输出将与以下内容类似：

```
{
    "DeploymentId": "fedcba",
    "DeploymentStatus": "DEPLOYED",
    "CreatedDate": "2018-11-15T06:49:09Z"
}
```

在您将此部署与阶段关联之前，部署的 API 不可调用。您可以创建新阶段或重用之前创建的阶段。

使用以下 [create-stage](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-stage.html) 命令创建新的阶段并将其与部署关联：

```
aws apigatewayv2 --region us-east-1 create-stage --api-id aabbccddee --deployment-id fedcba --stage-name test
```

输出内容如下所示：

```
{
    "StageName": "test",
    "CreatedDate": "2018-11-15T06:50:28Z",
    "DeploymentId": "fedcba",
    "DefaultRouteSettings": {
        "MetricsEnabled": false,
        "ThrottlingBurstLimit": 5000,
        "DataTraceEnabled": false,
        "ThrottlingRateLimit": 10000.0
    },
    "LastUpdatedDate": "2018-11-15T06:50:28Z",
    "StageVariables": {},
    "RouteSettings": {}
}
```

您还可以使用新创建的部署 ID（*deployment-id*）来更新阶段的 `deploymentId` 属性，以便重复使用现有的阶段。使用以下 [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-stage.html) 命令更新阶段的部署 ID：

```
aws apigatewayv2 update-stage --region region \
    --api-id api-id \ 
    --stage-name stage-name \ 
    --deployment-id deployment-id
```

## 使用 API Gateway 控制台创建 WebSocket API 部署
<a name="apigateway-create-websocket-deployment-using-console"></a>

要使用 API Gateway 控制台为 WebSocket API 创建部署，请执行以下操作：

1. 登录 API Gateway 控制台并选择 API。

1. 选择**部署 API**。

1. 从下拉列表中选择所需的阶段，或输入新阶段的名称。