As variáveis de ambiente mudam de acordo com o contexto? Use o direnv

Precisa ficar definindo variáveis de ambiente o tempo inteiro dependendo do contexto? Pare de sofrer, instale o direnv.

As variáveis de ambiente mudam de acordo com o contexto? Use o direnv

Preciso gerenciar diversos ambientes remotamente, cada qual com suas próprias variáveis de ambiente. Entram aí credenciais da AWS, arquivos de configuração do Kubernetes, caminhos, paths..

Uma solução é ter um arquivo no qual você armazene estes scripts que são executados quando necessários no CLI, mas é um processo muito chato. Entra em ação o direnv (pense nele como um "ASDF para suas variáveis de ambiente", que é uma extensão para o shell do Linux que permite carregar ou descarregar variáveis de ambiente no Linux de acordo com o diretório corrente do seu shell.

Bora ver como funciona?

Ingredientes

  • Linux (ou WSL se estiver no Windows).
  • Instalação do direnv (varia de acordo com sua distribuição). Maiores detalhes no site oficial (https://direnv.net/).

Exemplo prático: configuração do Kubernetes e credenciais da AWS

Suponha que você tenha dois ambientes, cada qual com as seguintes situações:

  • Projeto Brutalidade
    • Você precisa realizar ações usando Terraform no ambiente AWS. Vai precisar então das variáveis de ambiente AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY.
    • Tem um cluster Kubernetes que precisa ser mantido. Então é necessário de tempos em tempos alterar o valor da variável de ambiente KUBECONFIG.
  • Projeto Leveza
    • Mesma situação do projeto Brutalidade, mas você também precisa de uma API Key que é definida por variável de ambiente para invocar alguns endpoints de manutenção. Esta variável de ambiente se chama API_KEY.

Quer ver o direnv funcionando? Olha o print a seguir:

Observe quando entro no diretório brutalidade. Me é exposto um alerta, dizendo que para carregar as variáveis, preciso executar o comando direnv allow. Executo o comando e... variáveis carregadas (você só precisa executar este comando uma vez por diretório).

Notou que quando saímos do diretório as variáveis de ambiente são descarregadas? Muito fácil, muito lindo, né?

💡
No caso do Kubernetes uma solução é o kubens ( https://github.com/ahmetb/kubectx) pra mudar rápido de contexto. Mas neste momento direnv é tão mais simples... que fico com direnv.

Como por pra funcionar

Se você já tem o direnv instalado, basta criar um arquivo chamado .envrc no diretório em que a configuração deva ser ativada. O conteúdo será essencialmente uma série de instruções export tal como no exemplo a seguir:

export KUBECONFIG=~/projetos/leveza/k8s-config.yaml
export AWS_ACCESS_KEY_ID=CHAVE_SECRETISSIMA
export AWS_SECRET_ACCESS_KEY=SECRETISSIMA_SECRETISSIMA
export API_KEY=teste_levissimo

Mudou pro diretório, script carregado. E sabe o que é legal? A configuração se aplica a todos os sub-diretórios também. E é só isto. Legal, né?

💡
Cuidado: se estiver usando git, lembre-se de incluir no .gitignore o arquivo .envrc para evitar problemas, ok?
O livro de receitas da itexto
Escrever software é difícil: mantê-lo ainda mais. Neste post apresento uma técnica que nossa equipe aplica internamente, recomendamos a nossos clientes e que abrimos agora ao resto do mundo: o livro de receitas. A ideia parece simples, é simples (quase óbvia) porém poucas equipes a aplicam. Neste post vamos conversar
Kubernetes - itexto Insights

Mantido por itexto Consultoria