Cómo establecer variables de entorno

January 26, 2017
Redactado por
Revisado por

CP66owhMZeayfuKH2GO2bPS_oOhngyGdAI323rP9xVWDwm-iRQI7XDiucQ5b4ReImcq346dkAXfpNwxW-GWruOggvVYfkTo2CXPwBwwQUO9CNVcXVL74Zy3TzwYXUHGpUW3q7l8E-4

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

Algunos elementos sencillamente no deberían compartirse con nuestro código. A menudo, estos son valores de configuración que dependen del entorno, como indicadores de depuración o token de acceso para las API como Twilio. Las variables de entorno son una buena solución y son fáciles de consumir en la mayoría de los lenguajes de programación.

¿¡Variables de entorno!?

l4JA1COQqiZB6.gif

Como lo sugiere el nombre, las variables de entorno son variables en tu sistema que describen el entorno. Probablemente, la variable de entorno más conocida es PATH , la cual contiene las rutas a todas las carpetas que podrían contener archivos ejecutables. Con PATH, puedes escribir solo el nombre de un archivo ejecutable en lugar de la ruta completa en tu terminal, ya que el shell comprobará el directorio local, así como todos los directorios especificados en la PATH variable de este archivo ejecutable.

Además de las variables “incorporadas”, tienes la oportunidad de definir nuestras propias variables de entorno. Dado que están vinculadas a nuestro entorno, son excelentes para elementos como tokens de acceso a una API. Podrías tener una variable con un valor establecido en tu máquina de desarrollo y otro en tu entorno de producción sin tener declaraciones ifni archivos de configuración especiales.

Las bibliotecas auxiliares de Twilio por ejemplo, buscan las variables de entorno de TWILIO_ACCOUNT_SID y TWILIO_AUTH_TOKEN si inicias un cliente sin los dos valores. De esta manera, no tienes que preocuparte por enviar credenciales confidenciales sin querer a lugares como GitHub.

Establecer variables de entorno en distribuciones de macOS y Linux

Para establecer variables de entorno en macOS o en cualquier sistema operativo basado en UNIX, primero tienes que averiguar qué shell estás ejecutando. Para hacerlo, ejecuta en tu terminal el siguiente comando:

echo $SHELL

El final de la salida debería indicar qué shell está en uso. El shell típico es el shell bash que utilizarás en este ejemplo. No obstante, los pasos son similares para otros shell como zsh o fish.

Para establecer una variable de entorno, debes utilizar el comando export (exportar) en el siguiente formato:

export KEY=value

Dado que esto solo lo establecería para la sesión actual, debes agregar este comando a un archivo que se ejecuta para cada sesión. Para esto, abre el archivo .bashrc en tu directorio de inicio con tu editor de código favorito. Luego.,agrega la siguiente línea en algún lugar del archivo:

export TWILIO_ACCOUNT_SID=<YOUR_ACCOUNT_SID>

Sustituye <YOUR_ACCOUNT_SID> con el SID real de tu cuenta, que puede encontrar en la Consola de Twilio. Guarda el archivo y abre un nuevo caso en la terminal. Para comprobar que funcionó, ejecuta:

echo $TWILIO_ACCOUNT_SID

Deberías ver el valor que almacenaste en él.

terminal-env-variable.png

Variables de entorno de Windows

Si estás utilizando un equipo Windows, tienes algunas formas de establecer variables de entorno. Los métodos más comunes son utilizar PowerShell, CMD o la Interfaz Gráfica de Usuario (GUI).

Existen tres ubicaciones diferentes en las que puedes almacenar variables de entorno:

  • En el proceso actual. El proceso actual es más comúnmente el shell que estás ejecutando, como PowerShell, CMD, Bash, etc. Sin embargo, el proceso actual también podría ser otras aplicaciones, incluida la tuya. Cualquier proceso secundario iniciado desde el proceso actual hereda las variables de entorno de ese proceso. Las variables de entorno se eliminan cuando finaliza el proceso. Esto significa que debes volver a configurar las variables de entorno cada vez que abras un nuevo shell.
    También se trata de cómo se almacenan las variables de entorno en las distribuciones de macOS y Linux.
  • En el registro de usuarios. La variable de entorno está disponible para todos los procesos iniciados por el usuario y ningún otro usuario puede acceder a esas variables de entorno (sin privilegios elevados).
  • En el registro de la máquina. Las variables de entorno están disponibles para todos los usuarios y procesos, y la configuración de variables de entorno para la máquina requiere privilegios 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.

¿En qué ubicación debes almacenar las variables del entorno? 

Si estás ejecutando la aplicación desde un shell y no deseas que las variables de entorno se adhieran, establece las variables de entorno para el proceso actual. Si quieres que las variables de entorno se adhieran, almacénalas en el registro del usuario. Si deseas configurar las variables de entorno para todos los usuarios, no solo para un usuario específico o para ti, guárdalas en el registro de la máquina.

Establece las variables de entorno con PowerShell

Si bien PowerShell también es compatible con distribuciones de macOS y Linux a través de PowerShell Core, Windows PowerShell está preinstalado en Windows y es el shell recomendado para la plataforma Windows. Los siguientes cmdlets para configurar las variables de entorno funcionarán en Windows, macOS y Linux.

La forma más común y fácil de establecer variables de entorno en PowerShell es utilizar la variable $Env , como esta:

 

 

$Env:TWILIO_ACCOUNT_SID = '<YOUR_ACCOUNT_SID>'

Después de $Env, agrega dos puntos, seguido del nombre de la variable de entorno, seguido del signo igual, seguido del valor que deseas utilizar. Esto establecerá la variable de entorno para el proceso actual y será heredada por cualquier proceso secundario que comience desde este shell.

Las siguientes dos alternativas tienen el mismo resultado, pero son menos frecuentes:

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 mantener las variables de entorno en todas las instancias de shell, puedes guardar los cmdlets en tu script de perfil o, en Windows, puedes guardarlos en el registro del usuario o en el registro de la máquina así:

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.

Los dos comandos anteriores dan como resultado una no-op en macOS y Linux porque no hay concepto de variables de entorno ni del Usuario ni de la Máquina, solo variables de entorno del proceso. Consulta la documentación de Microsoft sobre las variables de entorno PowerShell para obtener más información.

Configura las variables de entorno desde CMD

Cmd, también conocido como cmd.exe y el Símbolo del Sistema, también viene con todas las instalaciones de Windows y se puede encontrar en el menú de inicio. Probablemente, deberías utilizar PowerShell, pero si no puedes hacerlo, aquí te mostramos cómo puedes configurar las variables de entorno desde cmd y archivos batch.

Para establecer una variable de entorno, utiliza el comando set , como este:

set TWILIO_ACCOUNT_SID=<YOUR_ACCOUNT_SID>

Este comando establecerá la variable de entorno para el proceso actual y los procesos secundarios heredarán las variables de entorno. Sin embargo, cuando cierres cmd, las variables de entorno se perderán. 

Para mantener las variables de entorno en los procesos, puedes almacenarlas en el registro del usuario o la máquina mediante el 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.

Estos comandos tienen más funcionalidades que puedes explorar si lees los documentos de comandos set y documentos de comandos setx.

Establece las Variables de Entorno Mediante la Interfaz Gráfica del Usuario

La configuración de las variables de entorno en Windows mediante la interfaz gráfica del usuario (GUI) está oculta detrás de varias capas de diálogos de configuración. Para abrir la interfaz correspondiente, primero debes abrir el cuadro de diálogo de Run (Ejecutar) en Windows. Para ello, presiona las teclas Windows y R en tu teclado al mismo tiempo. Luego, escribe sysdm.cpl en el campo de entrada y pulsa Enter o presiona Ok (Aceptar).

run-dialog.png

En la nueva ventana que se abra, haz clic en la pestaña Advanced (Opciones avanzadas) y, a continuación, haz clic en el botón Environment Variables (Variables de entorno) en la parte inferior derecha de la ventana.

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

La ventana tiene dos secciones diferentes. Una es la lista de las variables de entorno que solo le pertenecen a tu usuario. Esto significa que no están disponibles para los otros usuarios. La otra sección contiene las variables de todo el sistema que se comparten entre todos los usuarios.

Crea una variable para un usuario específico haciendo clic en el botón New (Nueva) debajo de la sección específica del usuario. Ahora puedes especificar el nombre y el valor de la variable en el cuadro de diálogo. Crea una nueva variable con el nombre TWILIO_ACCOUNT_SID y copia el SID de la cuenta de Twilio desde la Consola. Presiona Ok (Aceptar) en el cuadro de diálogo para crear la variable y, luego, Ok  en la ventana Environment Variables (Variables de Entorno). Ya estás listo.

new-dialog.png

Para comprobar si funcionó, abre el Símbolo del Sistema presionando WindowsR y luego escribe cmd.exe. Si ya tienes el Símbolo del Sistema abierto, asegúrate de volver a abrirlo para garantizar que los cambios se apliquen. Dentro del símbolo del sistema, ejecuta el siguiente comando:

echo %TWILIO_ACCOUNT_SID%

Esto debe estampar el valor que guardaste en la variable de entorno.

windows-cmd-dialog.png

Utiliza archivos .env

En algunas situaciones, solo se necesita establecer un conjunto de variables de entorno para un único proyecto. En ese caso, los archivos .env son una excelente solución. Son archivos dentro de tu proyecto en el que especificas variables de entorno. Después utilizas una biblioteca para tu lenguaje de programación correspondiente y, así, cargar el archivo que definirá dinámicamente estas variables.

Hay bibliotecas para que la mayoría de los lenguajes de programación cargue estos archivos. Estas son algunas:

Crea un archivo .env en tu carpeta de proyecto (por lo general, en la raíz) y coloca los pares de valor clave allí. Se puede ver así:

TWILIO_ACCOUNT_SID=<YOUR_ACCOUNT_SID>

Ahora todo lo que necesitas hacer es consumir la biblioteca correspondiente y, luego, podrás utilizar la variable de entorno. En Node.js, por ejemplo, el código correspondiente se vería así:

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.

Proveedores de nube

Configurar las variables de entorno en tu equipo de desarrollo local o en una máquina virtual es solo la mitad del trabajo. ¿Qué sucede si el hosting de tu aplicación se encuentra en un entorno de nube como Heroku, Azure o AWS o la has envuelto en un contenedor Docker? Por suerte, todos estos proveedores admiten formas de definir las variables de entorno.

Si no puedes encontrar tu host de nube en esta lista, no significa necesariamente que no haya forma de configurar las variables de entorno. Asegúrate de revisar su documentación para obtener más información.

Resumen

¡Eso es todo! Ahora puedes establecer variables de entorno, es decir, puedes sacar de tu código todos los valores de configuración basados en el entorno y hacer tu código más flexible y seguro.

Ten en cuenta que estos valores aún se almacenan en texto sin formato. Si planeas almacenar valores confidenciales, deberías investigar una solución de almacenamiento secreta, como Vault.

Si tienes una pregunta o quieres mostrarme lo que estás desarrollando ahora mismo, no dudes en enviarme un correo electrónico a: dkundel@twilio.com o comunícate conmigo en Twitter @dkundel. Estoy ansioso por ver lo que eres capaz de crear.