Gerenciando o APISIX de Forma Declarativa com o APISIX Declarative CLI

Navendu Pottekkat

Navendu Pottekkat

September 22, 2023

Technology

APISIX os usuários utilizam principalmente a API Admin para configurar o APISIX. Mas à medida que suas configurações aumentam em complexidade, gerenciá-las apenas por meio da API Admin se torna mais desafiador.

Para facilitar as coisas, desenvolvemos o APISIX Declarative CLI, também conhecido como ADC, uma ferramenta que permite definir as configurações do APISIX de forma declarativa.

Neste artigo, veremos como você pode gerenciar suas configurações do APISIX com o ADC.

Implantando o APISIX

Antes de começarmos, devemos primeiro executar uma instância do APISIX para interagir e configurar. Podemos iniciar o APISIX no Docker executando:

curl -sL https://run.api7.ai/apisix/quickstart | sh

Consulte a documentação do APISIX para saber mais sobre como usar o APISIX.

Instalando o ADC

Você pode instalar o ADC com o comando go install:

go install github.com/api7/adc@latest

Isso instalará o binário adc no diretório $GOPATH/bin.

Certifique-se de adicionar isso à sua variável de ambiente $PATH:

export PATH=$PATH:$GOPATH/bin

Se você não tiver o Go instalado, também pode baixar o binário mais recente do adc para o seu sistema operacional e adicioná-lo à pasta /bin conforme mostrado abaixo:

wget https://github.com/api7/adc/releases/download/v0.2.0/adc_0.2.0_linux_amd64.tar.gz tar -zxvf adc_0.2.0_linux_amd64.tar.gz mv adc /usr/local/bin/adc

Você pode encontrar binários para outros sistemas operacionais na página de lançamentos. No futuro, esses binários serão publicados em gerenciadores de pacotes como o Homebrew.

Para verificar se o adc está instalado, execute:

adc --help

Se tudo estiver certo, você verá uma lista de subcomandos disponíveis e como usá-los.

Configurando o ADC com Sua Instância do APISIX

Para configurar o ADC para trabalhar com sua instância do APISIX implantada, você pode executar:

adc configure

Isso solicitará que você insira o endereço do servidor APISIX ('http://127.0.0.1:9180' se você seguiu o exemplo) e o token.

Se tudo estiver correto, você verá uma mensagem como mostrado abaixo:

ADC configurado com sucesso! Conectado ao APISIX com sucesso!

Você pode usar o subcomando ping para verificar a conectividade com o APISIX a qualquer momento:

adc ping

Validando Arquivos de Configuração do APISIX

Vamos criar uma configuração básica do APISIX com uma rota que encaminha o tráfego para um upstream:

name: "Configuração básica" version: "1.0.0" services: - name: httpbin-service hosts: - api7.ai upstream: name: httpbin nodes: - host: httpbin.org port: 80 weight: 1 routes: - name: httpbin-route service_id: httpbin-service uri: "/anything" methods: - GET

Uma vez que o ADC está conectado à instância do APISIX em execução, podemos usá-lo para validar essa configuração antes de aplicá-la, executando:

adc validate -f config.yaml

Se a configuração for válida, você receberá uma resposta semelhante:

Arquivo de configuração lido com sucesso: nome da configuração: Configuração básica, versão: 1.0.0, rotas: 1, serviços: 1. Arquivo de configuração validado com sucesso!

Sincronizando a Configuração com a Instância do APISIX

Agora você pode usar o ADC para sincronizar sua configuração válida com a instância do APISIX conectada. Para fazer isso, execute:

adc sync -f config.yaml

Isso criará uma rota e um serviço conforme declarado em nosso arquivo de configuração:

criando serviço: "httpbin-service" criando rota: "httpbin-route" Resumo: criados 2, atualizados 0, excluídos 0

Para verificar se as rotas foram criadas corretamente, vamos tentar enviar uma solicitação:

curl localhost:9080/anything -H "host:api7.ai"

Se tudo estiver correto, você receberá uma resposta de httpbin.org.

Comparando a Configuração Local e em Execução

Agora vamos atualizar nossa configuração local no arquivo config.yaml adicionando outra rota:

name: "Configuração básica" version: "1.0.0" services: - name: httpbin-service hosts: - api7.ai upstream: name: httpbin nodes: - host: httpbin.org port: 80 weight: 1 routes: - name: httpbin-route-anything service_id: httpbin-service uri: "/anything" methods: - GET - name: httpbin-route-ip service_id: httpbin-service uri: "/ip" methods: - GET

Antes de sincronizar essa configuração com o APISIX, o ADC permite que você verifique as diferenças entre ela e a configuração existente do APISIX. Você pode fazer isso executando:

adc diff -f config.yaml

Você poderá ver as adições e exclusões na configuração e entender o que mudou antes de aplicá-la.

Convertendo Definições OpenAPI para Configuração do APISIX

O ADC também tem suporte básico para trabalhar com definições OpenAPI. O ADC permite que você converta definições no formato OpenAPI para configuração do APISIX.

Por exemplo, se você documentou sua API no formato OpenAPI conforme mostrado abaixo:

openapi: 3.0.0 info: title: API httpbin description: Rotas para a API httpbin version: 1.0.0 servers: - url: http://httpbin.org paths: /anything: get: tags: - default summary: Retorna qualquer coisa que for passada nos dados da solicitação operationId: getAnything parameters: - name: host in: header schema: type: string example: "{{host}}" responses: "200": description: Retorna qualquer coisa com sucesso content: application/json: {} /ip: get: tags: - default summary: Retorna o endereço IP do solicitante operationId: getIP responses: "200": description: Retorna o IP com sucesso content: application/json: {}

Você pode usar o subcomando openapi2apisix para converter isso em configuração do APISIX conforme mostrado abaixo:

adc openapi2apisix -o config.yaml -f openAPI.yaml

Isso criará um arquivo de configuração como este:

name: "" routes: - desc: Retorna qualquer coisa que for passada nos dados da solicitação id: "" methods: - GET name: getAnything uris: - /anything - desc: Retorna o endereço IP do solicitante id: "" methods: - GET name: getIP uris: - /ip services: - desc: Rotas para a API httpbin id: "" name: API httpbin upstream: id: "" name: "" nodes: null version: ""

Como você pode ver, a configuração está incompleta, e você ainda precisaria adicionar muitas configurações manualmente. Estamos melhorando o ADC para preencher essa lacuna entre as definições OpenAPI e o que pode ser mapeado diretamente para a configuração do APISIX.

Dica: Use Autocompletar

Você pode fazer muito com o ADC, e a lista de recursos certamente aumentará. Para aprender como usar qualquer subcomando, você pode usar a flag --help ou -h, que mostrará a documentação do subcomando.

Para facilitar ainda mais, você pode gerar um script de autocompletar para o seu ambiente de shell usando o subcomando completion. Por exemplo, se você estiver usando um shell zsh, pode executar:

adc completion zsh

Você pode então copiar e colar a saída no seu arquivo .zshrc, e ele começará a mostrar dicas quando você usar o adc.

O ADC ainda está em sua infância e está sendo continuamente aprimorado. Para saber mais sobre o projeto, relatar bugs ou sugerir recursos, visite github.com/api7/adc.

Tags: