Como definir variáveis de ambiente

January 26, 2017
Escrito por
Revisado por

CP66owhMZeayfuKH2GO2bPS_oOhngyGdAI323rP9xVWDwm-iRQI7XDiucQ5b4ReImcq346dkAXfpNwxW-GWruOggvVYfkTo2CXPwBwwQUO9CNVcXVL74Zy3TzwYXUHGpUW3q7l8E-4

Este post também está disponível em Português.

Há algumas coisas que não devemos compartilhar com nosso código. Geralmente, se trata de valores de configuração que dependem do ambiente, como sinalizadores de depuração ou tokens de acesso para APIs como o Twilio. As variáveis de ambiente são uma boa solução e são fáceis de consumir na maioria das linguagens de programação.

Variáveis de ambiente????

l4JA1COQqiZB6.gif

As variáveis de ambiente, como o nome sugere, são variáveis em seu sistema que descrevem seu ambiente. A variável de ambiente mais conhecida é provavelmente PATH e contém os caminhos para todas as pastas que podem conter executáveis. Com PATH, você pode escrever apenas o nome de um executável em vez do caminho completo para ele em seu terminal, pois o shell verificará o diretório local, bem como todos os diretórios especificados na variável PATH para este executável.

Além das variáveis incorporadas, também há a possibilidade de definir as nossas próprias variáveis de ambiente. Como estão vinculadas ao nosso ambiente, elas são excelentes para coisas como tokens de acesso à API. Você pode ter uma variável definida para um valor em sua máquina de desenvolvimento e outra em seu ambiente de produção sem instruções if ou arquivos de configuração especiais.

As bibliotecas auxiliares da Twilio, por exemplo, procuram as variáveis de ambiente TWILIO_ACCOUNT_SID e TWILIO_AUTH_TOKEN se você instanciar um cliente sem os dois valores. Dessa forma, você não precisa se preocupar com o envio acidental de credenciais sensíveis para um local como o GitHub.

Definir variáveis de ambiente nas distribuições do macOS e Linux

Para definir variáveis de ambiente no macOS ou em qualquer sistema operacional baseado em UNIX, primeiro é necessário descobrir qual shell você está executando. Para fazer isso, você pode executar no seu terminal o comando:

echo $SHELL

O final da saída deve indicar qual shell você está executando. O shell típico é o shell bash que você usará neste exemplo. Mas as etapas são semelhantes para outros shells, como zsh ou fish.

Para definir uma variável de ambiente, você precisa usar o comando "export" no seguinte formato:

export KEY=value

Como isso só seria definido para a sessão atual, você precisa adicionar esse comando a um arquivo que é executado para cada sessão. Para isso, abra o arquivo .bashrc em seu diretório inicial com seu editor de código favorito. Em seguida, adicione a seguinte linha em algum lugar no arquivo:

export TWILIO_ACCOUNT_SID=<YOUR_ACCOUNT_SID>

Substitua <YOUR_ACCOUNT_SID> pelo SID da sua conta real do seu console da Twilio. Salve o arquivo e abra uma nova instância de terminal para testar se funcionou executando:

echo $TWILIO_ACCOUNT_SID

Você deve ver o valor armazenado nele.

terminal-env-variable.png

Variáveis de ambiente Windows

Se estiver usando uma máquina Windows, você tem algumas maneiras de definir variáveis de ambiente. Os métodos mais comuns incluem usar o PowerShell, CMD ou GUI (Graphical User Interface, interface gráfica do usuário).

Há três locais diferentes em que você pode armazenar variáveis de ambiente:

  • No processo atual. O processo atual é mais comumente o shell que você está executando, como PowerShell, CMD, Bash etc. No entanto, o processo atual também pode ser outros aplicativos, incluindo o seu. Qualquer processo filho iniciado a partir do processo atual herda as variáveis de ambiente desse processo. As variáveis de ambiente são removidas quando o processo termina. Isso significa que você precisa reconfigurar as variáveis de ambiente sempre que abrir um novo shell.
    Também é assim que as variáveis de ambiente são armazenadas nas distribuições do macOS e do Linux.
  • No registro do usuário. A variável de ambiente está disponível para todos os processos iniciados pelo usuário e nenhum outro usuário pode acessar essas variáveis de ambiente (sem privilégios elevados).
  • No registro da máquina. As variáveis de ambiente estão disponíveis para todos os usuários e processos, e a configuração de variáveis de ambiente para a máquina requer privilégios elevados.

Changes made to user and machine environment variables aren't available to processes that are already running. For the change to apply, restart your program or shell, or set the environment variable for both the process and the user or machine.

Em qual local você deve armazenar as variáveis de ambiente? 

Se você estiver executando seu aplicativo a partir de um shell e não quiser que as variáveis de ambiente permaneçam, defina as variáveis de ambiente para o processo atual. Se você quiser que as variáveis de ambiente permaneçam, armazene-as no registro do usuário. Se você quiser configurar variáveis de ambiente para todos os usuários, não apenas para um usuário específico ou para você mesmo, armazene-as no registro da máquina.

Definir variáveis de ambiente usando o PowerShell

Embora o PowerShell também seja suportado em distribuições macOS e Linux por meio do PowerShell Core, o Windows PowerShell é pré-instalado no Windows e é o shell recomendado para a plataforma Windows. Os seguintes cmdlets para configuração de variáveis de ambiente funcionarão no Windows, macOS e Linux.

A maneira mais comum e fácil de definir variáveis de ambiente no PowerShell é usar a variável $Env, assim:

 

 

$Env:TWILIO_ACCOUNT_SID = '<YOUR_ACCOUNT_SID>'

Depois de $Env, adicione dois pontos, seguido pelo nome da variável de ambiente, seguido pelo sinal de igual, seguido pelo valor que você deseja usar. Isso definirá a variável de ambiente para o processo atual e ela será herdada por qualquer processo filho que você iniciar a partir desse shell.

As duas alternativas a seguir têm o mesmo resultado, mas são menos comuns:

New-Item -Path Env:\TWILIO_ACCOUNT_SID -Value '<YOUR_ACCOUNT_SID>'
[Environment]::SetEnvironmentVariable('TWILIO_ACCOUNT_SID', '<YOUR_ACCOUNT_SID>')
[Environment]::SetEnvironmentVariable('TWILIO_ACCOUNT_SID', '<YOUR_ACCOUNT_SID>', 'Process')

Para que as variáveis de ambiente persistam entre as instâncias do shell, você pode salvar os cmdlets no script do seu perfil, ou no Windows, você pode salvá-los no registro do usuário ou no registro da máquina da seguinte forma:

Environment]::SetEnvironmentVariable('TWILIO_ACCOUNT_SID'

Setting environment variables in the user and/or machine registry will not immediately update the environment variables for processes that are currently running. To see the effects of the update environment variables, you'll need to restart those processes, such as your PowerShell shell.

Os dois comandos acima resultam em no-op em macOS e Linux porque não há conceito de variáveis de ambiente de Usuário ou Máquina, apenas variáveis de ambiente de processo. Consulte a documentação da Microsoft sobre as variáveis de ambiente do PowerShell para obter mais detalhes.

Definir variáveis de ambiente de CMD

Cmd, também conhecido como cmd.exe e o Prompt de comando vêm com todas as instalações do Windows. Você provavelmente deve usar o PowerShell, mas, se não puder, veja como pode definir variáveis de ambiente a partir de cmd e arquivos batch.

Para definir uma variável de ambiente, você pode usar o comando set, assim:

set TWILIO_ACCOUNT_SID=<YOUR_ACCOUNT_SID>

Esse comando definirá a variável de ambiente para o processo atual, e os processos filho herdarão as variáveis de ambiente. No entanto, quando você fechar o cmd, as variáveis de ambiente serão perdidas. 

Para que as variáveis de ambiente persistam entre os processos, você pode armazená-las no registro do usuário e/ou da máquina usando o comando setx.

# sets environment variable in the user registry
setx TWILIO_ACCOUNT_SID <YOUR_ACCOUNT_SID>

# sets environment variable in the machine registry
setx TWILIO_ACCOUNT_SID <YOUR_ACCOUNT_SID> /m

Setting environment variables in the user and/or machine registry will not immediately update the environment variables for processes that are currently running. To see the effects of the update environment variables, you'll need to restart those processes, like your PowerShell shell.

Para saber mais sobre os demais recursos desses comandos, leia a documentação set command e setx command.

Definir variáveis de ambiente usando a interface gráfica do usuário

A configuração de variáveis de ambiente no Windows usando a GUI fica oculta atrás de várias camadas de caixas de diálogo de configurações. Para abrir a respectiva interface, primeiro é necessário abrir o prompt "Executar" do Windows. Para isso, pressione as teclas Windows e R no teclado ao mesmo tempo. Em seguida, digite sysdm.cpl no campo de entrada e pressione Enter ou OK.

run-dialog.png

Na nova janela exibida, clique na guia Advanced (Avançado) e depois no botão Environment Variables (Variáveis de ambiente), no canto inferior direito da janela.

windows-advanced-dialog.png
windows-env-dialog.png

A janela tem duas seções diferentes. Uma é a lista de variáveis de ambiente que são específicas para seu usuário. Isso significa que elas não estão disponíveis para os outros usuários. A outra seção contém as variáveis de todo o sistema que são compartilhadas entre todos os usuários.

Crie uma variável específica do usuário clicando no botão New (Novo) abaixo da seção específica do usuário. No prompt, agora você pode especificar o nome da variável, bem como o valor. Crie uma nova variável com o nome TWILIO_ACCOUNT_SID e copie seu SID da conta Twilio do Console. Pressione OK no prompt para criar a variável, seguido por OK na janela "Environment Variables". Tudo pronto agora.

new-dialog.png

Para testar se funcionou, abra o Prompt de comando ao pressionar WindowsR e digitar cmd.exe. Se o Prompt de comando já estiver aberto, certifique-se de reiniciá-lo para garantir que suas alterações sejam aplicadas. No Prompt de comando, execute o seguinte comando:

echo %TWILIO_ACCOUNT_SID%

Isso deve imprimir o valor que você salvou na variável de ambiente.

windows-cmd-dialog.png

Usar arquivos .env

Em algumas situações, você só precisa de um conjunto de variáveis de ambiente para um único projeto. Nesse caso, os arquivos .env são uma excelente solução. Eles são arquivos dentro do projeto em que você especifica variáveis de ambiente e, depois, você usa uma biblioteca para a sua respectiva linguagem de programação para carregar o arquivo que definirá dinamicamente essas variáveis.

Há bibliotecas para a maioria das linguagens de programação para carregar esses arquivos. Veja algumas:

Crie um arquivo .env na pasta do projeto (normalmente na raiz) e coloque os pares de valores principais nele. Pode ficar parecido com o seguinte:

TWILIO_ACCOUNT_SID=<YOUR_ACCOUNT_SID>

Agora, tudo o que você precisa fazer é consumir a respectiva biblioteca e, em seguida, você pode usar a variável de ambiente. Em Node.js, por exemplo, o respectivo código seria o seguinte:

require('dotenv').config();
console.log('Your environment variable TWILIO_ACCOUNT_SID has the value: ', process.env.TWILIO_ACCOUNT_SID);

Since you most likely don’t want to commit your environment variables to a repository, make sure to add the .env file to your .gitignore to avoid accidentally pushing it.

Provedores de nuvem

A configuração de variáveis de ambiente em sua máquina de desenvolvimento local ou em uma VM é apenas metade do trabalho. E se você estiver hospedando seu aplicativo em um ambiente de nuvem, como Heroku, Azure ou AWS, ou se você o tiver envolvido em um contêiner do Docker? Felizmente, todos esses provedores suportam maneiras de definir variáveis de ambiente.

Se você não conseguir encontrar seu host de nuvem entre essa lista, isso não significa necessariamente que não há como configurar variáveis de ambiente. Consulte a documentação para saber mais.

Resumo

É isso! Agora você pode definir variáveis de ambiente, o que significa que você pode tirar todos os valores de configuração baseados em ambiente do seu código e torná-lo mais flexível e seguro!

Lembre-se de que esses valores ainda estão armazenados em texto sem formatação. Se estiver planejando armazenar valores confidenciais, você deve usar algo como uma solução de armazenamento secreta, como o Vault.

Se tiver alguma dúvida ou quiser me mostrar as coisas incríveis que você está criando atualmente, sinta-se à vontade para me enviar um e-mail: dkundel@twilio.com ou entrar em contato comigo no Twitter @dkundel. Mal posso esperar para ver o que você criou.