aws-lambda
aws-lambda 插件简化了 APISIX 与 AWS Lambda 和 Amazon 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:

选择 Application running outside AWS 作为用例:

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

要创建 Lambda 函数 URL,请转到 Lambda 函数的 Configuration 选项卡,在 Function URL 下创建一个函数 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://jbihqn4bfwewfrz6typjmcvjh40iuamw.lambda-url.us-west-2.on.aws/",
"authorization": {
"iam": {
"accesskey": "AKIARK7HKSJVWCOIIMW6",
"secretkey": "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",
"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:

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

Amazon API Gateway 支持两种类型的 RESTful API:HTTP API 和 REST API。只有 REST API 提供 API 密钥和 IAM 作为安全措施。
你现在应该被重定向回 Lambda 界面。要查找 API 密钥和网关 API 端点,请转到 Lambda 函数的 Configuration 选项卡,在 Triggers 下,你可以找到 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://xwbs1bjiy3.execute-api.us-west-2.amazonaws.com/default/api7-docs",
"authorization": {
"apikey": "hpr8KdMxlR37p0Sq8aIhi28cq2thilcF5wziOsvJ"
},
"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 密钥安全集成 Amazon API Gateway)设置 API 网关。
要创建子路径,请转到 Lambda 函数的 Configuration 选项卡,在 Triggers 下,点击 API 网关:

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

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

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

在下拉菜单中选择允许的 HTTP 方法。为了演示目的,本例继续使用相同的 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://xwbs1bjiy3.execute-api.us-west-2.amazonaws.com/default",
"authorization": {
"apikey": "hpr8KdMxlR37p0Sq8aIhi28cq2thilcF5wziOsvJ"
},
"ssl_verify":false
}
}
}'
❶ 匹配 /aws-lambda/ 的所有子路径
❷ 通配符 * 匹配的子路径将追加到 function_uri 的末尾
发送请求到路由:
curl -i "http://127.0.0.1:9080/aws-lambda/api7-docs"
APISIX 将把请求转发到 https://xwbs1bjiy3.execute-api.us-west-2.amazonaws.com/default/api7-docs,你应该收到 HTTP/1.1 200 OK 响应,并包含以下消息:
"Hello from Lambda!"
如果你的 API 密钥无效或请求的路径未关联任何方法,你应该收到 HTTP/1.1 403 Forbidden 响应。