consul: Biblioteca para interface com a API HTTP do consul a partir do nginx-module-lua
Instalação
Se você ainda não configurou a assinatura do repositório RPM, inscreva-se. Em seguida, você pode prosseguir com os seguintes passos.
CentOS/RHEL 7 ou Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-consul
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-consul
Para usar esta biblioteca Lua com o NGINX, certifique-se de que o nginx-module-lua está instalado.
Este documento descreve lua-resty-consul v0.4.0 lançado em 18 de agosto de 2021.
Biblioteca para interface com a API HTTP do consul a partir do ngx_lua
Visão Geral
Os métodos retornam todos um objeto de resposta lua-resty-http.
O corpo da resposta foi lido e definido como res.body, decodificado em JSON se a resposta tiver um cabeçalho Content-Type de Application/JSON.
Todos os cabeçalhos de resposta estão disponíveis em res.headers.
O parâmetro Token ACL é sempre enviado como o cabeçalho X-Consul-Token em vez de ser incluído na string de consulta.
Se os argumentos wait ou index forem fornecidos, o tempo limite de leitura da solicitação é estendido adequadamente.
wait deve ser passado como um número de segundos, não inclua s ou qualquer outra string de unidade.
local resty_consul = require('resty.consul')
local consul = resty_consul:new({
host = "127.0.0.1",
port = 8500,
connect_timeout = (60*1000), -- 60s
read_timeout = (60*1000), -- 60s
default_args = {
token = "my-default-token"
},
ssl = false,
ssl_verify = true,
sni_host = nil,
})
local res, err = consul:get('/agent/services')
if not res then
ngx.log(ngx.ERR, err)
return
end
ngx.print(res.status) -- 200
local services = res.body -- Resposta decodificada em JSON
local res, err = consul:put('/agent/service/register', my_service_definition, { token = "override-token" })
if not res then
ngx.log(ngx.ERR, err)
return
end
ngx.print(res.status) -- 200
ngx.print(res.headers["X-Consul-Knownleader"]) -- "true"
local service_register_response = res.body -- Resposta decodificada em JSON
local res, err = consul:list_keys() -- Obter todas as chaves
if not res then
ngx.log(ngx.ERR, err)
return
end
local keys = {}
if res.status == 200 then
keys = res.body
end
for _, key in ipairs(keys) do
local res, err = consul:get_key(key)
if not res then
ngx.log(ngx.ERR, err)
return
end
ngx.print(res.body[1].Value) -- Valor da chave após a decodificação base64
end
Métodos Básicos
new
syntax: client = consul:new(opts?)
Cria um novo cliente consul. opts é uma tabela que define as seguintes opções:
hostPadrão para 127.0.0.1portPadrão para 8500. Defina como0se usar um socket unix comohost.connect_timeoutTempo limite de conexão em ms. Padrão para 60sread_timeoutTempo limite de leitura em ms. Padrão para 60sdefault_argsTabela de argumentos da string de consulta a serem enviados com todas as solicitações (por exemplo,token). Padrão para vaziosslBooleano, habilita solicitações HTTPS. Padrão parafalse.ssl_verifyBooleano, verifica certificados SSL. Padrão paratrue.sni_hostNome do host a ser usado ao verificar certificados SSL.
get
syntax: res, err = consul:get(path, args?)
Realiza uma solicitação GET para o caminho fornecido. A versão da API é automaticamente precedida.
args é uma tabela de parâmetros da string de consulta a serem adicionados à URI.
Retorna um objeto de resposta lua-resty-http.
Em caso de erro, retorna nil e uma mensagem de erro.
put
syntax: res, err = consul:put(path, body, args?)
Realiza uma solicitação PUT para o caminho fornecido. A versão da API é automaticamente precedida.
args é uma tabela de parâmetros da string de consulta a serem adicionados à URI.
Se body for uma tabela ou valor booleano, ele é automaticamente codificado em JSON antes de ser enviado.
Caso contrário, qualquer coisa que lua-resty-http aceite como entrada de corpo é válida.
Retorna um objeto de resposta lua-resty-http.
Em caso de erro, retorna nil e uma mensagem de erro.
delete
syntax: res, err = consul:delete(path, args?)
Realiza uma solicitação GET para o caminho fornecido. A versão da API é automaticamente precedida.
args é uma tabela de parâmetros da string de consulta a serem adicionados à URI.
Retorna um objeto de resposta lua-resty-http.
Em caso de erro, retorna nil e uma mensagem de erro.
get_client_body_reader
Método proxy para lua-resty-http
Auxiliares de Chave-Valor
Esses métodos automaticamente precedem /v1/kv, apenas a chave real deve ser passada.
Valores codificados em Base64 são automaticamente decodificados.
get_key
syntax: res, err = consul:get_key(key, args?)
Recupera uma chave KV do Consul. Os valores são decodificados em Base64.
args é uma tabela de parâmetros da string de consulta a serem adicionados à URI.
Retorna um objeto de resposta lua-resty-http.
Em caso de erro, retorna nil e uma mensagem de erro.
put_key
syntax: res, err = consul:put_key(key, value, args?)
Cria ou atualiza uma chave KV.
args é uma tabela de parâmetros da string de consulta a serem adicionados à URI.
Se value for uma tabela ou valor booleano, ele é automaticamente codificado em JSON antes de ser enviado.
Caso contrário, qualquer coisa que lua-resty-http aceite como entrada de corpo é válida.
Retorna um objeto de resposta lua-resty-http.
Em caso de erro, retorna nil e uma mensagem de erro.
delete
syntax: res, err = consul:delete_key(key, args?)
Deleta uma entrada KV.
args é uma tabela de parâmetros da string de consulta a serem adicionados à URI.
Retorna um objeto de resposta lua-resty-http.
Em caso de erro, retorna nil e uma mensagem de erro.
list_keys
syntax: res, err = consul:list_keys(prefix?, args?)
Recupera todas as chaves no armazenamento KV. Opcionalmente dentro de um prefix.
args é uma tabela de parâmetros da string de consulta a serem adicionados à URI.
keys é sempre definido como um parâmetro da string de consulta com este método.
Retorna um objeto de resposta lua-resty-http.
Em caso de erro, retorna nil e uma mensagem de erro.
Auxiliar de Transação
txn
syntax: res, err = consul:txn(payload, args?)
Realiza uma solicitação PUT para o endpoint da API /v1/txn com o payload fornecido.
payload pode ser fornecido como uma tabela Lua, caso em que as chaves Value serão automaticamente codificadas em base64.
Caso contrário, qualquer coisa que lua-resty-http aceite como entrada de corpo é válida.
Retorna um objeto de resposta lua-resty-http.
Em caso de erro, retorna nil e uma mensagem de erro.
Os valores KV no corpo da resposta são automaticamente decodificados em base64.
local txn_payload = {
{
KV = {
Verb = "set",
Key = "foo",
Value = "bar",
}
},
{
KV = {
Verb = "get",
Key = "foobar",
}
}
}
local consul = resty_consul:new()
local res, err = consul:txn(txn_payload)
if not res then
ngx.say(err)
return
end
ngx.say(res.body.Results[2].KV.Value) -- "bar"
GitHub
Você pode encontrar dicas de configuração adicionais e documentação para este módulo no repositório GitHub do nginx-module-consul.