Amazon API Gateway
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

在 API Gateway 中设置 WebSocket API 集成请求

设置集成请求涉及以下内容:

  • 选择要集成到后端的路由键。

  • 指定要调用的后端终端节点,如 AWS 服务或 HTTP 终端节点。

  • 通过指定一个或多个请求模板,配置如何根据需要将路径请求数据转换为集成请求数据。

使用 API Gateway 控制台设置 WebSocket API 集成请求

使用 API Gateway 控制台向 WebSocket API 中的路由添加集成请求

  1. 登录到 API Gateway 控制台,选择 API,然后选择 Routes (路由)

  2. Routes (路由) 中,选择所需路由。

  3. Route Overview (路由概述) 窗格中,选择 Integration Request (集成请求)

  4. 对于 Integration Type (集成类型),选择下列选项之一:

    • 如果您的 API 将与您已在此账户或其他账户中创建的 AWS Lambda 函数集成,请选择 Lambda Function (LAM 函数)

      要在 AWS Lambda 中创建新的 Lambda 函数、为 Lambda 函数设置资源权限,或执行任何其他 Lambda 服务操作,请选择 AWS Service (AWS 服务)

    • 如果您的 API 将与现有 HTTP 终端节点集成,请选择 HTTP。有关更多信息,请参阅 在 API Gateway 中设置 HTTP 集成

    • 如果要直接从 API Gateway 生成 API 响应,而无需集成后端,请选择 Mock (模拟)。有关更多信息,请参阅 在 API Gateway 中设置模拟集成

    • 如果您的 API 将与 AWS 服务集成,请选择 AWS Service (AWS 服务)

    • 如果您的 API 将使用 VpcLink 作为私有集成终端节点,请选择 VPC Link (VPC 链接)。有关更多信息,请参阅 设置 API Gateway 私有集成

  5. 如果选择 Lambda 函数,则执行以下操作:

    1. 对于 Lambda 区域,选择与您创建 Lambda 函数的区域对应的区域标识符。例如,如果您在 美国东部(弗吉尼亚北部) 区域中创建 Lambda 函数,请选择 us-east-1。有关区域名称和标识符的列表,请参阅 Amazon Web Services 一般参考中的 AWS Lambda

    2. 对于 Use Lambda Proxy integration (使用 LAM 代理集成),如果您打算使用 Lambda proxy integration (LAM 代理集成)cross-account Lambda proxy integration (跨账户 LAM 代理集成),请选中此复选框。

    3. 对于 Lambda Function (LAM 函数),请通过以下方式之一指定函数:

      • 如果您的 Lambda 功能在同一账户中,请开始键入函数名称,然后从下拉列表中选择函数。

        注意

        函数名称可以包含(可选)其别名或版本规范,如在 HelloWorldHelloWorld:1HelloWorld:alpha 中。

      • 如果该函数位于不同账户,请键入该函数的 ARN。

    4. 如果您希望 API Gateway 使用在传入请求中收到的凭证来调用 Lambda 函数,请选择 Invoke with caller credentials (使用调用方凭证进行调用)

    5. 对于 Execution role (执行角色),键入 Lambda 调用角色的 ARN 以使 API Gateway 能调用 Lambda 函数。

    6. 要使用默认超时值 29 秒,请选中 Use Default Timeout (使用默认超时) 选项。要设置自定义超时,请取消选中该框,并输入一个介于 5029000 毫秒之间超时值。

    7. 选择 Save (保存)

  6. 如果您选择了 HTTP,请遵循使用 API Gateway 控制台设置 API 集成请求的步骤 4 中的说明。

  7. 如果您选择了 Mock (模拟),请继续执行 Request Templates (请求模板) 步骤。

  8. 如果您选择了 AWS Service (AWS 服务),请遵循 使用 API Gateway 控制台设置 API 集成请求 的步骤 6 中的说明。

  9. 如果您选择了 VPC Link (VPC 链接),请执行以下操作:

    1. 对于 Use Proxy integration (使用代理集成),如果要将请求通过代理连接到 VPCLink 的终端节点,请选中该复选框。

    2. VPC Link 下拉列表中,选择 [Use Stage Variables] 并在列表下方的文本框中键入 ${stageVariables.vpcLinkId}

      我们将在将 API 部署到阶段之后定义 vpcLinkId 阶段变量,并将其值设置为 VpcLink 的 ID。

    3. 对于 HTTP method (HTTP 方法),选择与 HTTP 后端中的方法最匹配的 HTTP 方法类型。

    4. 对于 Endpoint URL (终端节点 URL),请键入您希望此集成使用的 HTTP 后端的 URL。

    5. 要使用默认超时值 29 秒,请选中 Use Default Timeout (使用默认超时) 选项。要设置自定义超时,请取消选中该框,并输入一个介于 5029000 毫秒之间超时值。

  10. Request Templates (请求模板) 下面,执行以下操作:

    1. 对于 Template Selection Expression (模板选择表达式),请选择铅笔图标,并将 template 一词替换为模板选择表达式。这是 API Gateway 在消息负载中查找的表达式。如果找到,则对其进行评估,结果是模板键值,用于选择要应用于消息负载中的数据的数据映射模板。

      有关模板选择表达式的信息,请参阅模板选择表达式

使用 AWS CLI 设置集成请求

您可以使用 AWS CLI 为 WebSocket API 中的路由设置集成请求,如以下示例所示(这将创建模拟集成):

  1. 使用以下内容创建名为 integration-params.json 的文件:

    {"PassthroughBehavior": "WHEN_NO_MATCH", "TimeoutInMillis": 29000, "ConnectionType": "INTERNET", "RequestTemplates": {"application/json": "{\"statusCode\":200}"}, "IntegrationType": "MOCK"}
  2. 运行 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 为代理集成设置集成请求,如以下示例所示:

  1. 在 Lambda 控制台中创建 Lambda 函数,并为其提供基本的 Lambda 执行角色。

  2. 执行 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" }