• R&D - Pesquisa e Desenvolvimento

Variáveis de Ambiente para configurações no KrakenD

Além do KrakenD ser uma solução de API Gateway extremamente performática, ela ainda também apresenta versatilidade e facilidade para uso.


O exemplo que vamos apresentar agora é muito útil em cenários que você tem que realizar o deploy das configurações do gateway em diferentes ambientes, isto pode ser na execução de pipelines CI/CD, que facilita muito o suporte para essa dinamismo em ambientes como Docker e até Kubernetes.


Sem mais delongas, vamos ao exemplo proposto, veja a estrutura de nosso exemplo:

├── Dockerfile
├── krakend.json

Vamos docker para mostrar a simplicidade do uso de variáveis de ambiente no arquivo de configuração do KrakenD (krakend.json).


O KrakenD Config

O arquivo de configuração do KrakenD é usualmente em formato JSON (mas suporta outros formatos também, como YAML/YML). Neste arquivo é exatamente onde definimos os endpoints, as configurações, os hosts, timeouts etc.


Como exemplo do krakend.json , vamos pegar um exemplo simples:



{
  "$schema": "https://www.krakend.io/schema/v3.json",
  "version": 3,
  "extra_config": {
    "telemetry/logging": {
      "level": "DEBUG",
      "prefix": "[KRAKEND]",
      "syslog": false,
      "stdout": true,
      "format": "default"
    }
  },
  "timeout": "3000ms",
  "cache_ttl": "300s",
  "output_encoding": "no-op",
  "name": "APIS-Sample",
  "endpoints": [
    {
      "endpoint": "/v1/cep/{CEP}",
      "timeout": "10s",
      "method": "GET",
      "output_encoding": "no-op",
      "extra_config": {},
      "backend": [
        {
          "url_pattern": "/ws/{CEP}/json/",
          "encoding": "no-op",
          "method": "GET",
          "extra_config": {},
          "host": [
            "{{ env "ENDPOINT" }}"
          ],
          "disable_host_sanitize": false
        }
      ]
    }
  ]
}

Dica: Quem quiser ler um JSON de forma mais simples, recomendamos essa ferramenta online: http://json2table.com


Lendo este arquivo de configuração de forma mais visual como está abaixo, podemos entender de forma simples ao que este arquivo se destina:

Neste exemplo, podemos entender o seguinte:



Temos uma API declarada, com o endereço /v1/cep/{CEP} que é uma chamada do tipo GET, que chama um Endpoint no host como exemplo em questão: http://meuhost.com.br , neste caso, este valor de HOST, pode ser diferente de acordo com o ambiente, por exemplo:

Dessa forma, ao invés de ter 1 arquivo de configuração para cada ambiente, podemos ter 1 único arquivo que pode inserir valores dinâmicos, de acordo com as variáveis de ambiente, por isto, nós temos essa referência a uma variável de ambiente ENDPOINT, que está declarada no arquivo de configuração, veja o exemplo:

          "host": [
            "{{ env "ENDPOINT" }}"
          ],

Com base nesse exemplo acima, poderemos apontar o endereço de forma contextual e usando o Docker para isto.


Nós criamos um arquivo Dockerfile para empacotar nossas APIs:



FROM devopsfaith/krakend

COPY config/krakend.json /etc/krakend/krakend.json

ENTRYPOINT [ "/usr/bin/krakend" ]
CMD [ "run", "-c", "/etc/krakend/krakend.json"]

Você precisará fazer o build dessa imagem Docker antes de executá-la, pode usar o comando abaixo:

docker build -t <sua organizacao ou em branco>/krakend-env-vars .

E no momento que for executar seu container, levando em consideração que nossa imagem tem o nome de: skalenatech/krakend-env-vars :

docker run -e "ENDPOINT=https://viacep.com.br/" -e "FC_ENABLE=1" -p 8080:8080 skalenatech/krakend-env-vars

Veja que nós passamos 2 variáveis de ambiente para execução do Docker:

  • FC_ENABLE=1 - Isto irá informar o KrakenD runtime que ele deverá ler informações externas, entre estas: variáveis de ambiente.

  • ENDPOINT - O endereço do seu endpoint que será injetado no seu arquivo de configuração.

A execução deste exemplo resulta nos seguintes screenshots :



Execução KrakenD via docker, veja agora a execução:



Conclusão


O arquivo krakend.json é o coração da execução do runtime para as APIs, e existem várias boas práticas para torná-los mais dinâmicos, aqui vimos uma das estratégias, mas existem outras.


Referências: https://www.krakend.io/docs/configuration/environment-vars/

40 visualizações0 comentário