使用lua开发apisix自定义插件并发布

接到老大需求:需要对cookie进行操作,遂查询apisix的自带插件,发现有,但不满足,于是自己开发了一个插件并部署,把开发部署流程写在这里打个日志怕以后忘掉。

一、需求

插件很简单,就是在request和response中打上自己的标记

二、编写插件

插件怎么编写,规范是什么我就不一一赘述了,点击这里查看官方文档,已经很详细。

把我写的也粘一下把:

lua 复制代码
local core = require("apisix.core")
local plugin_name = "cookie-plugin"

local schema = {
    type = "object",
    properties = {},
}

local _M = {
    version = 0.1,
    priority = 0, -- 设置插件优先级
    name = plugin_name,
    schema = schema,
}

function _M.check_schema(conf)
    return core.schema.check(schema, conf)
end

function _M.access(conf, ctx)
    -- 添加请求头
    core.request.set_header(ctx, "cookie-plugin", "success")
end

function _M.header_filter(conf, ctx)
    -- 添加响应头
    core.response.set_header("cookie-plugin", "success")
end

return _M

三、部署插件

最坑的就是怎么部署,官方有文档但看的一头雾水,详细介绍部署:

先介绍两概念Admin和Dashboard,Admin提供了API能力,Dashboard提供了可视化能力

3.1、放置lua脚本至插件文件夹下

把lua脚本改为你写的plugin_name,例如我上边写的就是cookie-pluginlua,然后放到Admin服务的plugins文件夹底下,一般在/usr/local/apisix/apisix/plugins/,直接放底下就行,当然也可以自己写路径指定,但你的config.yaml得自己指定路径,开头官方文档有介绍。

3.2、修改config.yaml文件

在config.yaml的plugins里加插件名

yaml 复制代码
plugins:                         
  - cookie-plugin

这里除了这个,还需要把config-default.yaml里的插件挪过来,不然之后就你这个插件能用,官方插件就用不了了,最终效果:

3.2、刷新插件

当然可以apisix stop之后再apisix start启动,但有更优雅的方式,不需要重启可以热加载插件:

clike 复制代码
curl --location --request PUT 'http://自己的IP:端口/apisix/admin/plugins/reload' \
--header 'X-API-KEY: 你自己的key' 

这个时候apisix的插件已经可以用了,以刚才我们的插件为例,添加一个路由:

clike 复制代码
curl http://127.0.0.1:9180/apisix/admin/routes/1 -X PUT -d '
{
    "uri": "/example",
    "plugins": {
        "cookie-plugin": {}
    },
    "upstream": {
        "type": "roundrobin",
        "nodes": {
            "httpbin.org:80": 1
        }
    }
}'

请求:

clike 复制代码
 curl -i http://127.0.0.1:9080/example 

可以看到response中已有cookie-plugin: success,证明插件生效。

3.4、生成schema.json

这个schema.json是Dashboard提供可视化需要的文件,也就是现在说api已经可以使用了,但是如果你想在Dashboard配置是配置不了的,会报插件不存在,这时候是因为之前的schema.json对新插件没有描述,这个也不用自己写,查看官方文档

clike 复制代码
curl 127.0.0.1:9090/v1/schema > schema.json

3.5、替换schema.json

复制到Dashboard的config目录下替换就行,之后重启Dashboard服务就ok

好了这样一个apisix使用lua脚本自定义插件和部署就可以了

相关推荐
PhyliciaFelicia2 分钟前
空间数据采集与管理:为什么选择ArcGISPro和Python?
开发语言·python·深度学习·机器学习·arcgis·数据分析
袁袁袁袁满12 分钟前
Python之MoviePy视频编辑模块介绍与应用
开发语言·python·音视频·moviepy·视频编辑模块
曼巴UE515 分钟前
UE C++ 多镜头设置缩放 平移
开发语言·c++
不爱学习的啊Biao17 分钟前
C# 下sendmessage和postmessage的区别详解与示例
开发语言·c#
悄悄敲敲敲17 分钟前
栈的实现详解
c语言·开发语言·数据结构·c++·算法·链表·线性回归
serve the people30 分钟前
openresty lua用Redis的Stream解决消息订阅问题
redis·lua·openresty
空青7261 小时前
ChatGPT在Java后端开发中的应用与影响
java·开发语言·人工智能·后端·神经网络·机器学习·chatgpt
搁浅小泽1 小时前
C 语言总复习
c语言·开发语言
五月阳光暖洋洋1 小时前
SpringBoot2.2.6使用spring-boot-validation读取不到自定义配置文件中的属性
java·开发语言·spring boot
小悟空GK2 小时前
Http介绍
开发语言