Variables de entorno
Introduccion
Las variables de entorno sirven para configurar opciones de los programas desde el sistema.
Variables en BASH
Las variables se crean desde la shell Bash
con el comando export
:
export NOMBRE_VARIABLE=VALOR # variable con valor
export NOMBRE_VARIABLE # variable vacía
y se eliminan con el comando unset
:
Lectura desde Python
Con el módulo os
se pueden consultar
las variables de entorno en las rutinas de Python.
Estas son consultadas con la función getenv()
import os
valor_variable = os.getenv(
"NOMBRE_VARIABLE", # variable buscada
default=valor_respaldo # opcional
)
Si la variable pedida existe entonces se lee su valor;
en caso contrario se devuelve
el valor indicado por el argumento default
.
Si este no fue definido
entonces se devuelve None
.
Variables en Compose
Dentro del contenedor no rigen las mismas variables de entorno que en el sistema anfitrión. Por este motivo, el gestor de contenedores debe importar las variables de entorno que sean necesarias para que los contenedores puedan acceder a ellas.
Ordenar lectura
En el archivo compose.yml
se indican
las variables de entorno necesarias
bajo el campo environment
:
services:
entornos_python:
build: .
environment:
VARIABLE_PYTHON: "${VARIABLE_BASH}"
Nótese que las variables de entorno experimentan un "mapeo": a izquierda se indica el nombre de variable que verá la rutina de Python adentro del contenedor y a la derecha se indica el nombre de la variable definida en la terminal del sistema anfitrión.
Dentro de la lectura del valor de la variable se puede definir un valor default entre las llaves:
services:
entornos_python:
build: .
environment:
VARIABLE_PYTHON: "${VARIABLE_BASH:-VALOR_DEFAULT}"
Archivo .env
Una forma cómoda de crear las variables de entorno
es usar un archivo de texto con nombre .env
.
En este archivo se crean
las variables de entorno necesarias,
una por renglón:
Este archivo es detectado por default
por el gestor de contendores;
sin embargo definir el mapeo de variables
en el archivo compose.yml
sigue siendo necesario.
Comentarios
Los archivos .env
admiten comentarios
precedidos por un numeral (#
).
Jerarquía de valores
Si una variable de entorno es definida en terminal y en archivo entonces el valor leído será el de terminal.
Archivo custom
Las variables de entorno también se pueden repartir
entre varios archivos,
los cuales típicamente tienen extensión .env
.
Estos archivos requieren importación explícita,
la cual se realiza con el campo env_file
:
services:
entornos_python:
build: .
environment:
VARIABLE_PYTHON: "${VARIABLE_BASH}"
env_file: archivo_custom.env
Ejemplo de uso
En este demo se crea una variable de entorno
en un archivo .env
y es leída por unar rutina llamada entorno.py
desde adentro de un contenedor.
Variables de entorno - ejemplo
import os
import logging
logging.basicConfig(
level=logging.INFO, # mínimo nivel de log a publicar
format="%(message)s", #info incorporada
)
# lectura
valor_variable = os.getenv("ENTORNO")
# muestra en ventana de logs
logging.info("Variables de entorno")
logging.info(f"Valor de VARIABLE: {valor_variable}")