在 API Gateway 中设置 WebSocket API 集成请求
设置集成请求涉及以下内容:
-
选择要集成到后端的路由键。
-
指定要调用的后端端点。WebSocket API 支持以下集成类型:
AWS_PROXY
AWS
HTTP_PROXY
HTTP
MOCK
有关集成类型的更多信息,请参阅《API Gateway V2 REST API》中的 IntegrationType。
-
通过指定一个或多个请求模板,配置如何根据需要将路径请求数据转换为集成请求数据。
使用 API Gateway 控制台设置 WebSocket API 集成请求
使用 API Gateway 控制台向 WebSocket API 中的路由添加集成请求
-
登录到 API Gateway 控制台,选择 API,然后选择路由。
-
在路由中,选择所需路由。
-
选择集成请求选项卡,然后在集成请求设置部分中,选择编辑。
-
对于集成类型,选择下列选项之一:
-
仅当您的 API 将与您已在此账户或其它账户中创建的 AWS Lambda 函数集成时,才选择 Lambda 函数。
要在 AWS Lambda 中创建新的 Lambda 函数,要为 Lambda 函数设置资源权限,或者要执行任何其他 Lambda 服务操作,请改为选择 AWS 服务。
-
如果您的 API 将与现有 HTTP 端点集成,请选择 HTTP。有关更多信息,请参阅 针对 API Gateway 中的 REST API 的 HTTP 集成。
-
如果要直接从 API Gateway 生成 API 响应,而无需集成后端,请选择模拟。有关更多信息,请参阅 针对 API Gateway 中的 REST API 的模拟集成。
-
如果您的 API 将与某项 AWS 服务集成,则选择 AWS 服务。
-
如果您的 API 将使用
VpcLink
作为私有集成端点,请选择 VPC 链接。有关更多信息,请参阅 针对 API Gateway 中的 REST API 的私有集成。
-
-
如果您选择 Lambda 函数,请执行以下操作:
-
对于使用 Lambda 代理集成,如果您打算使用 Lambda 代理集成或跨账户 Lambda 代理集成,请选中此复选框。
-
对于 Lambda 函数,请通过以下方式之一指定函数:
-
如果您的 Lambda 函数在同一账户中,请输入函数名称,然后从下拉列表中选择函数。
注意
函数名称可以包含(可选)其别名或版本规范,如在
HelloWorld
、HelloWorld:1
或HelloWorld:alpha
中。 -
如果该函数位于不同账户,请输入该函数的 ARN。
-
-
要使用默认超时值 29 秒,请保持默认超时处于开启状态。要设置自定义超时,请选择默认超时,然后输入一个介于
50
到29000
毫秒之间的超时值。
-
-
如果您选择了 HTTP,请遵循使用 API Gateway 控制台设置 API 集成请求的步骤 4 中的说明。
-
如果您选择了模拟,请继续执行请求模板步骤。
-
如果您选择了 AWS 服务,请遵循使用 API Gateway 控制台设置 API 集成请求的步骤 6 中的说明操作。
-
如果您选择了 VPC 链接,请执行以下操作:
-
对于 VPC 代理集成,如果要将请求通过代理连接到
VPCLink
的端点,请选中该复选框。 -
对于 HTTP 方法,选择与 HTTP 后端中的方法最匹配的 HTTP 方法类型。
-
从 VPC 链接下拉列表中,选择一个 VPC 链接。您可以选择
[Use Stage Variables]
并在列表下方的文本框中输入${stageVariables.vpcLinkId}
。您可以在将 API 部署到阶段之后定义
vpcLinkId
阶段变量,并将其值设置为VpcLink
的 ID。 -
对于端点 URL,请输入您希望此集成使用的 HTTP 后端的 URL。
-
要使用默认超时值 29 秒,请保持默认超时处于开启状态。要设置自定义超时,请选择默认超时,然后输入一个介于
50
到29000
毫秒之间的超时值。
-
-
选择 Save changes(保存更改)。
-
在请求模板下方,执行以下操作:
要输入模板选择表达式,请在请求模板下选择编辑。
输入模板选择表达式。使用 API Gateway 在消息负载中查找的表达式。如果找到,则对其进行评估,结果是模板键值,用于选择要应用于消息负载中的数据的数据映射模板。您将在下一步中创建数据映射模板。选择编辑以保存所做更改。
选择创建模板以创建数据映射模板。对于模板密钥,输入一个模板密钥值,用于选择要应用于消息负载中的数据的数据映射模板。然后,输入映射模板。选择创建模板。
有关模板选择表达式的信息,请参阅模板选择表达式。
使用 AWS CLI 设置集成请求
您可以使用 AWS CLI 为 WebSocket API 中的路由设置集成请求,如以下示例所示(这将创建模拟集成):
-
使用以下内容创建名为
integration-params.json
的文件:{"PassthroughBehavior": "WHEN_NO_MATCH", "TimeoutInMillis": 29000, "ConnectionType": "INTERNET", "RequestTemplates": {"application/json": "{\"statusCode\":200}"}, "IntegrationType": "MOCK"}
-
运行 create-integration 命令,如以下示例所示:
aws apigatewayv2 --region us-east-1 create-integration --api-id aabbccddee --cli-input-json file://integration-params.json
以下是此示例的示例输出:
{ "PassthroughBehavior": "WHEN_NO_MATCH", "TimeoutInMillis": 29000, "ConnectionType": "INTERNET", "IntegrationResponseSelectionExpression": "${response.statuscode}", "RequestTemplates": { "application/json": "{\"statusCode\":200}" }, "IntegrationId": "0abcdef", "IntegrationType": "MOCK" }
或者,您可以使用 AWS CLI 为代理集成设置集成请求,如以下示例所示:
-
在 Lambda 控制台中创建 Lambda 函数,并为其提供基本的 Lambda 执行角色。
-
运行 create-integration 命令,如以下示例所示:
aws apigatewayv2 create-integration --api-id
aabbccddee
--integration-type AWS_PROXY --integration-method POST --integration-uri arn:aws:apigateway:us-east-1
:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1
:123412341234
:function:simpleproxy-echo-e2e
/invocations
以下是此示例的示例输出:
{ "PassthroughBehavior": "WHEN_NO_MATCH", "IntegrationMethod": "POST", "TimeoutInMillis": 29000, "ConnectionType": "INTERNET", "IntegrationUri": "arn:aws:apigateway:
us-east-1
:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1
:123412341234
:function:simpleproxy-echo-e2e
/invocations", "IntegrationId": "abcdefg
", "IntegrationType": "AWS_PROXY" }
适用于 WebSocket API 的代理集成的 Lambda 函数的输入格式
使用 Lambda 代理集成,API Gateway 可以将整个客户端请求映射到后端 Lambda 函数的输入 event
参数:以下示例显示了 API Gateway 发送到 Lambda 代理集成的 $connect
路由中输入事件和 $disconnect
路由中输入事件的结构。