跳到主要内容

aws-lambda

aws-lambda 插件简化了 APISIX 与 AWS LambdaAmazon API Gateway 的集成,以便代理其他 AWS 服务。

该插件支持通过 IAM 用户凭证和 API 网关的 API 密钥进行 AWS 身份认证和授权。

示例

以下示例演示了如何在不同场景下配置 aws-lambda

要跟随示例操作,请先登录你的 AWS 控制台并使用任意运行时创建一个 Lambda 函数。你不需要自定义该函数,默认情况下,该函数在被调用时应返回 Hello from Lambda!

使用 IAM 访问密钥安全调用 Lambda 函数

以下示例演示了如何将 APISIX 与 Lambda 函数集成,并配置 IAM 访问密钥进行授权。aws-lambda 插件实现了用于 IAM 访问密钥的 AWS Signature Version 4。首先,你将在 AWS 控制台上创建 IAM 访问密钥和 Lambda 函数 URL。

对于 IAM 访问密钥,请转到 AWS Identity and Access Management (IAM) 并点击你想要用于集成的用户。

接下来,在 Security credentials 选项卡中,选择 Create access key

AWS IAM 用户的 Security credentials 选项卡,并突出显示 Create access key 按钮

选择 Application running outside AWS 作为用例:

AWS IAM Create access key 向导的第 1 步,已选择 Application running outside AWS 用例

继续创建凭证并记下访问密钥 (access key) 和秘密访问密钥 (secret access key):

AWS IAM 页面显示生成的访问密钥 ID 和秘密访问密钥

要创建 Lambda 函数 URL,请转到 Lambda 函数的 Configuration 选项卡,在 Function URL 下创建一个函数 URL:

AWS Lambda 控制台显示已配置的函数 URL

最后,在 APISIX 中创建一个带有你的函数 URL 和 IAM 访问密钥的路由:

curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"id": "aws-lambda-route",
"uri": "/aws-lambda",
"plugins": {
"aws-lambda": {
"function_uri": "https://your-lambda-function-url.lambda-url.us-west-2.on.aws/",
"authorization": {
"iam": {
"accesskey": "YOUR_IAM_ACCESS_KEY",
"secretkey": "YOUR_IAM_SECRET_KEY",
"aws_region": "us-west-2",
"service": "lambda"
}
},
"ssl_verify": false
}
}
}'

❶ 替换为你的 Lambda 函数 URL

❷ 替换为你的 IAM 访问密钥

❸ 替换为你的 IAM 秘密访问密钥

❹ 替换为你的 Lambda 函数所在的 AWS 区域

❺ 与 Lambda 函数集成时设置为 lambda

发送请求到路由:

curl -i "http://127.0.0.1:9080/aws-lambda"

你应该收到 HTTP/1.1 200 OK 响应,并包含以下消息:

"Hello from Lambda!"

使用 API 密钥安全集成 Amazon API Gateway

以下示例演示了如何将 APISIX 与 Amazon API Gateway 集成,并配置网关以触发 Lambda 函数的执行。

要将 API 网关配置为 Lambda 触发器,请转到你的 Lambda 函数并选择 Add trigger

AWS Lambda 控制台:为函数添加 API Gateway 触发器

接下来,选择 API Gateway 作为触发器,REST API 作为 API 类型,并完成添加触发器:

选择 REST 作为 API 类型,并使用 API 密钥保护 API

信息

Amazon API Gateway 支持两种类型的 RESTful API:HTTP API 和 REST API。只有 REST API 提供 API 密钥和 IAM 作为安全措施。

你现在应该被重定向回 Lambda 界面。要查找 API 密钥和网关 API 端点,请转到 Lambda 函数的 Configuration 选项卡,在 Triggers 下,你可以找到 API 网关的详细信息:

AWS 控制台显示 API Gateway 端点 URL 和生成的 API 密钥

最后,在 APISIX 中创建一个带有你的网关端点和 API 密钥的路由:

curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"id": "aws-lambda-route",
"uri": "/aws-lambda",
"plugins": {
"aws-lambda": {
"function_uri": "https://your-api-id.execute-api.us-west-2.amazonaws.com/default/your-resource",
"authorization": {
"apikey": "YOUR_API_GATEWAY_API_KEY"
},
"ssl_verify": false
}
}
}'

发送请求到路由:

curl -i "http://127.0.0.1:9080/aws-lambda"

你应该收到 HTTP/1.1 200 OK 响应,并包含以下消息:

"Hello from Lambda!"

如果你的 API 密钥无效,你应该收到 HTTP/1.1 403 Forbidden 响应。

转发请求到 Amazon API Gateway 子路径

以下示例演示了如何将请求转发到 Amazon API Gateway API 的子路径,并配置 API 以触发 Lambda 函数的执行。

请先按照上一个示例设置 API 网关。

要创建子路径,请转到 Lambda 函数的 Configuration 选项卡,在 Triggers 下,点击 API 网关:

AWS Lambda 控制台:打开函数的 API Gateway 集成

接下来,选择 Create resource 以创建子路径:

AWS API Gateway Resources 页面,并突出显示 Create resource 按钮

输入子路径信息并完成创建:

完成资源创建

重定向回主网关控制台后,你应该能看到新创建的路径。选择 Create method 为路径配置 HTTP 方法及关联的操作:

AWS API Gateway Resources 页面显示 /api7-docs 资源,并突出显示 Create method 按钮

在下拉菜单中选择允许的 HTTP 方法。为了演示目的,本例继续使用相同的 Lambda 函数作为请求路径时的触发操作:

创建方法和 Lambda 函数

完成方法创建。重定向回主网关控制台后,点击 Deploy API 以部署路径和方法更改:

AWS API Gateway 方法执行视图,显示从客户端经由方法和集成请求到 Lambda 集成的流程,并突出显示 Deploy API 按钮

最后,在 APISIX 中创建一个带有你的网关端点和 API 密钥的路由:

curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"id": "aws-lambda-route",
"uri": "/aws-lambda/*",
"plugins": {
"aws-lambda": {
"function_uri": "https://your-api-id.execute-api.us-west-2.amazonaws.com/default",
"authorization": {
"apikey": "YOUR_API_GATEWAY_API_KEY"
},
"ssl_verify": false
}
}
}'

❶ 匹配 /aws-lambda/ 的所有子路径

❷ 对于 Admin API、ADC 和 APISIX CRD 示例,通配符 * 匹配的子路径将追加到 function_uri 末尾。在 Gateway API 示例中,PathPrefix 匹配 /aws-lambda/ 下的请求,因此转发的请求路径会接在已配置的 function_uri 前缀之后。

发送请求到路由:

curl -i "http://127.0.0.1:9080/aws-lambda/api7-docs"

APISIX 会将请求转发到 https://your-api-id.execute-api.us-west-2.amazonaws.com/default/api7-docs,你应该会收到包含以下消息的 HTTP/1.1 200 OK 响应:

"Hello from Lambda!"

如果你的 API 密钥无效或请求的路径未关联任何方法,你应该收到 HTTP/1.1 403 Forbidden 响应。