aws-lambda
启用 aws-lambda
插件后,该插件会终止对已配置 URI 的请求,并代表客户端向 AWS Lambda Gateway URI 发起一个新的请求。这个新请求中携带了之前配置的授权详细信息,包括请求头、请求体和参数(以上参数都是从原始请求中传递的),然后 aws-lambda
插件会将带有响应头、状态码和响应体的响应信息返回给使用 APISIX 发起请求的客户端。
该插件支持通过 AWS API key 和 AWS IAM secrets 进行授权。
名称 | 类型 | 必选项 | 默认值 | 描述 |
---|---|---|---|---|
accesskey | string | 是 | 从 AWS IAM 控制台生成的访问密钥 ID。 | |
secret_key | string | 是 | 从 AWS IAM 控制台生成的访问密钥。 | |
aws_region | string | 否 | “us-east-1” | 发出请求的 AWS 区域。有关更多 AWS 区域代码的信息请参考 AWS 区域代码表。 |
service | string | 否 | “execute-api” | 接收该请求的服务。请注意,对于 HTTP 触发器是 “execute-api” 。 |
你可以通过以下命令在指定路由中启用该插件:
通过上述示例配置插件后,任何对 /aws
URI 的请求(HTTP/1.1
、HTTPS
、HTTP2
)都将调用已配置的 AWS 函数的 URI,并且会将响应信息返回给客户端。
下述命令的含义是:AWS Lambda 从请求中获取 name
参数,并返回一条 "Hello $name"
消息:
curl -i -XGET localhost:9080/aws\?name=APISIX
正常返回结果:
HTTP/1.1 200 OK
Content-Type: application/json
...
"Hello, APISIX!"
在进行测试之前,由于该 enable_http2: true
默认是禁用状态,你可以通过在 ./conf/config.yaml
中添加 apisix.node_listen
下的 - port: 9081
和 字段启用。示例如下
使用 curl
命令测试:
curl -i -XGET --http2 --http2-prior-knowledge localhost:9081/aws\?name=APISIX
正常返回结果:
content-type: application/json
...
"Hello, APISIX!"
与上面的示例类似,AWS Lambda 函数也可以通过 AWS API Gateway 触发,但需要使用 AWS IAM 权限进行授权。aws-lambda
插件的配置文件中包含了 "authorization"
字段,用户可以在 HTTP 调用中通过 AWS v4 请求签名。
以下示例展示了如何通过配置文件实现授权:
注意
使用该方法时已经假设你有一个启用了程序化访问的 IAM 用户,并具有访问端点的必要权限(AmazonAPIGatewayInvokeFullAccess)。
配置路径转发
重要
因为 APISIX 路由是严格匹配的,所以为了使 aws-lambda
插件正常工作,在路由上配置的 uri
字段必须以 *
结尾,*
意味着这个 URI 的任何子路径都会被匹配到同一个路由。
以下示例展示了如何通过配置文件实现路径转发:
curl http://127.0.0.1:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins": {
"aws-lambda": {
"function_uri": "https://x9w6z07gb9.execute-api.us-east-1.amazonaws.com",
"apikey": "<Generate API key>"
},
"ssl_verify":false
}
"uri": "/aws/*"
}'
通过上述示例配置插件后,任何访问 aws/default/test-apisix
的请求都会调用 AWS Lambda 函数,并转发附加的参数。
使用 curl
命令测试:
curl -i -XGET http://127.0.0.1:9080/aws/default/test-apisix\?name\=APISIX
正常返回结果:
当你需要禁用该插件时,可以通过如下命令删除相应的 JSON 配置,APISIX 将会自动重新加载相关配置,无需重启服务:
curl http://127.0.0.1:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/aws",
"plugins": {},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}