azure-functions
启用 azure-functions
插件后,该插件会终止对已配置 URI 的请求,并代表客户端向 Azure Functions 发起一个新的请求。该新请求中携带了之前配置的授权详细信息,包括请求头、请求体和参数(以上参数都是从原始请求中传递的)。之后便会通过 azure-functions
插件,将带有响应头、状态码和响应体的信息返回给使用 APISIX 发起请求的客户端。
名称 | 类型 | 必选项 | 默认值 | 描述 |
---|---|---|---|---|
master_apikey | string | 否 | “” | 可用于访问 Azure Functions URI 的 API 密钥。 |
master_clientid | string | 否 | “” | 可用于授权 Azure Functions URI 的客户端 ID(Active Directory)。 |
azure-functions
插件的元数据提供了授权回退的功能。它定义了 master_apikey
和 master_clientid
字段,用户可以为关键任务的应用部署声明 API 密钥或客户端 ID。因此,如果在 azure-functions
插件属性中没有找到相关授权凭证,此时元数据中的授权凭证就会发挥作用。
注意
授权方式优先级排序如下:
- 首先,
azure-functions
插件在 APISIX 代理的请求头中寻找x-functions-key
或x-functions-clientid
键。 - 如果没有找到,
azure-functions
插件会检查插件属性中的授权凭证。如果授权凭证存在,azure-functions
插件会将相应的授权标头添加到发送到 Azure Functions 的请求中。 - 如果未配置
azure-functions
插件的授权凭证属性,APISIX 将获取插件元数据配置并使用 API 密钥。
如果你想添加一个新的 API 密钥,请向 /apisix/admin/plugin_metadata
端点发出请求,并附上所需的元数据。示例如下:
你可以通过以下命令在指定路由中启用该插件,请确保你的 Azure Functions 已提前部署好,并正常提供服务。
curl http://127.0.0.1:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins": {
"azure-functions": {
"function_uri": "http://test-apisix.azurewebsites.net/api/HttpTrigger",
"authorization": {
}
}
"uri": "/azure"
}'
下述命令的含义是:Azure Functions 从请求中获取 name
参数,并返回一条 "Hello $name"
消息:
curl -i -XGET http://localhost:9080/azure\?name=APISIX
正常返回结果:
以下示例是客户端通过 HTTP/2 协议与 APISIX 进行通信。
在进行测试之前,由于该 enable_http2: true
默认是禁用状态,你可以通过在 ./conf/config.yaml
中添加 apisix.node_listen
下的 - port: 9081
和 enable_http2: true
字段启用。示例如下:
apisix:
node_listen: # 支持监听多个端口
- 9080
- port: 9081
enable_http2: true # 该字段如果不设置,默认值为 `false`
使用 curl
命令测试:
curl -i -XGET --http2 --http2-prior-knowledge http://localhost:9081/azure\?name=APISIX
azure-functions
插件在代理请求到 Azure Functions 上游时也支持 URL 路径转发。基本请求路径的扩展被附加到插件配置中指定的 function_uri
字段上。
重要
因为 APISIX 路由是严格匹配的,所以为了使 azure-functions
插件正常工作,在路由上配置的 uri
字段必须以 *
结尾, 意味着这个 URI 的任何子路径都会被匹配到同一个路由。
以下示例展示了如何通过配置文件实现路径转发:
curl http://127.0.0.1:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins": {
"azure-functions": {
"function_uri": "http://app-bisakh.azurewebsites.net/api",
"apikey": "${Generated API key to access the Azure-Function}"
}
}
},
"uri": "/azure/*"
}'
通过上述示例配置插件后,任何访问 azure/HttpTrigger1
的请求都会调用 Azure Functions 并转发附加的参数。
使用 curl
命令测试:
curl -i -XGET http://127.0.0.1:9080/azure/HttpTrigger1\?name\=APISIX\
当你需要禁用该插件时,可以通过如下命令删除相应的 JSON 配置,APISIX 将会自动重新加载相关配置,无需重启服务:
curl http://127.0.0.1:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/azure",
"plugins": {},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}