如何通过 API 网关 REST API 将数据传递到后端 Lambda 函数或 HTTP 端点?

3 分钟阅读
0

我希望我的 Amazon API Gateway REST API 将数据传递给后端 AWS Lambda 函数和 HTTP 端点。该如何操作?

简短描述

要配置 REST API 以将数据传递给后端 Lambda 函数,请使用 Lambda 自定义集成

要将查询字符串参数传递给 HTTP 端点,请使用 HTTP 自定义集成

**重要提示:**务必将输入数据作为集成请求负载提供。最佳实践是,使用映射模板提供负载。有关更多信息,请参阅在方法和集成之间映射请求和响应负载

解决方法

创建 Lambda 函数以处理 API 网关中的自定义标头

1.    打开 Lambda 控制台

2.    选择创建函数。此时将打开创建函数页面,其中已选择从头开始创建选项。

3.    在基本信息窗格中,执行以下操作:对于函数名称,输入描述函数用途的名称。例如:MapTemplate。对于 Runtime(运行时),选择 Python 3.9

4.    对于权限,展开更改默认执行角色

5.    选择使用现有角色。此时将显示现有角色的下拉列表。

6.    在现有角色中,选择您之前创建的 Lambda 执行角色。

7.    选择创建函数

8.    从 Code source(代码源)中的 Code(代码)选项卡,将 lambda_function.py 中的代码替换为以下代码:

import json

def lambda_handler(event, context):
    print(event)
    return {
        'statusCode': 200,
        'body': json.dumps(event) # returning the data sent to backend lambda function as API response.
    }

9.    选择 Deploy(部署)。

有关更多信息,请参阅使用 Python 构建 Lambda 函数

将数据传递到后端 Lambda 函数或 HTTP 端点

1.    打开 API Gateway 控制台

2.    选择创建 API

–或者–

(如果这是您第一次使用 API 网关)您将看到一个向您介绍此服务的功能的页面。在 REST API 中,选择构建。出现创建示例 API 弹出窗口时,选择确定

3.    对于选择 API 类型,在 REST API 窗格中选择构建

4.    在创建新的 API 中,选择新建 API

5.    在设置中,执行以下操作:对于 API 名称,输入描述您的 API 用途的名称。例如:MappingTemplateTutorial。(可选)对于描述,输入简短描述 API 用途的内容。例如,将数据发送到后端 Lambda 函数/HTTP 端点。对于端点类型,请选择区域

6.    选择创建 API

配置 API 资源、集成点和正文映射模板

1.    在 API Gateway 控制台中,选择您在上一步中创建的 API 的名称。您的 API 的资源页面打开。

2.    在资源页面中,选择操作。然后,选择创建资源

3.    在新建子资源窗格中,对于配置为代理资源,选择复选标记图标,然后选择创建资源

4.    在 /{proxy+} - ANY - Setup 页面中,执行以下操作:

  • 对于 Integration type(集成类型),选择 Lambda Function Proxy
  • 对于 Lambda 区域,请选择托管您的函数的 AWS 区域。
  • 对于 Lambda 函数,请输入函数的名称 MappingTemplateTutorial

选择 Save(保存)。出现 Add Permission to Lambda Function(将权限添加至 Lambda Function)弹出窗口,选择 OK

7.    在 / {proxy+} - ANY - Method Execution 页面中,选择 Integration Request(集成请求)。

8.    在 / {proxy+} - ANY - Integration Request 页面中,执行以下操作:

  • 取消勾选使用 Lambda Proxy 集成图标框。此时将显示切换到 Lambda 集成弹出窗口。
  • 在弹出窗口中,选择 OK。 出现向 Lambda 函数添加权限弹出窗口。在弹出窗口中,选择 OK
  • 展开映射模板
  • 请求正文传递中选择当没有定义模板时 (推荐)

选择添加映射模板。对于 Content-Type,输入 application/json。然后,选择复选标记图标。

9.    选择生成模板下拉列表,然后选择方法请求直通

10.    在映射模板编辑器中,输入以下内容:

##  See http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html
#set($allParams = $input.params())
{
"method" : "$context.httpMethod", ## API method
"authcontext" : "$context.authorizer.stringkey", ## Optional output from Lambda Authorizers
## passthrough body
"body-json" : $input.json('$'),
## passthrough headers, querystrings and path parameters
"params" : {
#foreach($type in $allParams.keySet())
    #set($params = $allParams.get($type))
"$type" : {
    #foreach($paramName in $params.keySet())
    "$paramName" : "$util.escapeJavaScript($params.get($paramName))"
        #if($foreach.hasNext),#end
    #end
}
    #if($foreach.hasNext),#end
#end
}
}

11.    选择 Save(保存)。

12.    选择 Method Execution 以返回至 / {proxy+} - ANY - Method Execution 页面。

13.    选择方法响应以设置有效的方法响应。

14.    在 /{proxy+} - ANY - Method Response 页面中,选择 Add Response(添加响应)。

15.    对于 HTTP 状态码, 请输入 200。然后,选择复选标记图标。

16.    选择操作部署 API 至某个阶段。

将您的 API 部署到一个新的阶段

1.    按照将 REST API 部署到阶段中的说明进行操作。有关更多信息,请参阅使用 API Gateway 控制台设置阶段

2.    在阶段编辑器窗格中,将调用 URL 复制到您的剪切板。

REST API 调用 URL 示例

https://1a2bc3d456.execute-api.us-east-1.amazonaws.com/stage

测试设置

要确认所有数据都通过您的 API 传递到后端 Lambda 函数或 HTTP 端点,请运行以下 curl 命令:

**注意:**将 https://restApiId.execute-api.region.amazonaws.com/stageName 替换为您的 API 的调用 URL

curl -i --location --request POST 'https://1a2bc3d456.execute-api.us-east-1.amazonaws.com/stage/path1/path2?query1=querystring1&query2=querystring2' --header 'header1: value1' --header 'header2: value2' --header 'Content-Type: application/json' --data-raw '{"keybody":"valuebody"}'

命令输出包括后端 Lambda 函数向客户端接收的所有数据。您可以更新环境的输出消息。

**注意:**要在 Windows 上安装 curl,请参阅 Git 网站上的下载。如需关于 curl 的更多信息,请参见 curl 项目网站


相关信息

教程:使用 Lambda 非代理集成构建 API 网关 REST API

为 REST API 设置数据转换

如何使用自定义 Lambda 集成通过 API 网关将自定义标头传递给 Lambda 函数?

AWS 官方
AWS 官方已更新 2 年前