Referencia del modo push

¿Cómo guardas secretos en AWS SSM Parameter Store o Azure Key Vault con Envilder? envilder --push sube el valor del .env de cada variable que declara el archivo de mapeo, y --key, --value y --secret-path suben un solo secreto sin archivo .env. El push de un solo secreto también registra el mapeo en envilder.json, para que envilder y envilder exec lo puedan leer enseguida.

Requisitos previos

  • La CLI de envilder. El push de un solo secreto registra el mapeo desde la 0.16.
  • Acceso de escritura al destino: ssm:PutParameter en AWS, o el permiso Set de secretos en Azure Key Vault, por ejemplo con el rol Key Vault Secrets Officer.
  • Para --push, un archivo de mapeo y un archivo .env con los valores. El push de un solo secreto no necesita ninguno de los dos: crea el archivo de mapeo si no existe.

Sinopsis

envilder --push [--envfile=<file>] [--map=<file>] \
  [--provider=aws|azure] [--vault-url=<url>] [--profile=<name>]

envilder [--push] --key=<NAME> --value=<value> --secret-path=<path> \
  [--map=<file>] [--no-map-update] \
  [--provider=aws|azure] [--vault-url=<url>] [--profile=<name>]

Push tiene dos formas. --push sube valores de un archivo .env. --key, --value y --secret-path juntos suben un solo secreto; con ellos, --push es opcional (bastan las tres opciones), y la documentación lo escribe por claridad. No hay ningún subcomando push. --ssm-path es un alias obsoleto de --secret-path y muestra un aviso.

Subir un archivo .env

Para cada variable que declara el archivo de mapeo, Envilder lee su valor del archivo .env y lo escribe en la ruta mapeada. Las variables del archivo .env que el archivo de mapeo no declara se ignoran.

OpciónPor defectoDescripción
--push-Selecciona el modo push. Obligatoria en esta forma.
--envfile.envArchivo del que se leen los valores.
--mapenvilder.jsonArchivo de mapeo con las variables que se suben y sus rutas.
--provider, --vault-url, --profile$configIgual que en el modo pull: cada opción sustituye un campo de $config, y el proveedor por defecto es aws.

Con este archivo de mapeo y este .env, envilder --push escribe dos secretos e ignora LOG_LEVEL. Salida esperada con AWS (Azure muestra las mismas líneas sin la de identidad):

envilder.jsonjson
{
  "DB_PASSWORD": "/my-app/dev/db-password",
  "API_TOKEN": "/my-app/dev/api-token"
}
.envdotenv
DB_PASSWORD=rotated-password-2026
API_TOKEN=prod-token-91c2e4
LOG_LEVEL=debug
envilder --push
☁ AWS identity · account=123456789012 · region=eu-west-1 · profile=default
Starting push operation from '.env' using map 'envilder.json'
Loading parameter map from 'envilder.json'
Loading environment variables from '.env'
Found 2 parameter mappings in map file
Found 3 environment variables in env file
Validated 2 environment variables mapping to 2 unique secrets
Processing 2 unique secrets
Pushed DB_PASSWORD=******************026 to secret store at path ********************ord
Pushed API_TOKEN=**************2e4 to secret store at path ******************ken
Successfully pushed environment variables from '.env' to secret store.
  • Una variable mapeada que no está en el archivo .env se omite con un aviso. Que el archivo .env no exista tampoco es un error: se omiten todas las variables y la ejecución sale con 0.
  • Varias variables pueden apuntar a la misma ruta solo si tienen el mismo valor. Si no, Envilder se detiene antes de escribir nada.
  • Los secretos se escriben en paralelo. Los errores de limitación (throttling) se reintentan hasta 5 veces con espera creciente. Cualquier otro error detiene la ejecución con código 1, y los secretos ya escritos se quedan escritos.

Subir un solo secreto

Pasa el nombre de la variable, el valor y la ruta del secreto. Envilder escribe el secreto y registra "NOMBRE": "<ruta>" en el archivo de mapeo, para que el siguiente envilder o envilder exec lo resuelva. El valor nunca se escribe en el archivo de mapeo.

OpciónPor defectoDescripción
--key-Nombre de la variable, que se registra como clave en el archivo de mapeo.
--value-Valor que se guarda. No puede estar vacío.
--secret-path-Nombre del parámetro en AWS SSM, o la referencia del secreto para Key Vault. Se registra tal como se escribe.
--mapenvilder.jsonArchivo de mapeo que registra el mapeo y aporta $config. Se crea si no existe; su directorio tiene que existir.
--no-map-update-Sube sin leer, crear ni actualizar ningún archivo de mapeo. El proveedor y el vault salen solo de las opciones.

En un directorio sin archivo de mapeo, sube un secreto. El comando, la salida esperada y el archivo de mapeo que crea:

envilder --push --key=API_KEY --value=dev-api-key-4821 --secret-path=/my-app/dev/api-key
envilder --push --provider=azure --vault-url=https://my-vault.vault.azure.net \
  --key=API_KEY --value=dev-api-key-4821 --secret-path=/my-app/dev/api-key
Using configuration: provider=aws

☁ AWS identity · account=123456789012 · region=eu-west-1 · profile=default

📤 PUSHING SECRET
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  → API_KEY → ****************key

⭐ SECRET PUSHED  —  API_KEY=*************821 → ****************key

✓ Created envilder.json
Using configuration: provider=azure, vault=https://my-vault.vault.azure.net

📤 PUSHING SECRET
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  → API_KEY → ****************key

⭐ SECRET PUSHED  —  API_KEY=*************821 → ****************key

✓ Created envilder.json
envilder.jsonjson
{
  "API_KEY": "/my-app/dev/api-key"
}

aws es el proveedor por defecto, así que no se escribe $config. Tampoco se escribe nunca --profile: el perfil es una elección local de credenciales.

envilder.jsonjson
{
  "$config": {
    "provider": "azure",
    "vaultUrl": "https://my-vault.vault.azure.net"
  },
  "API_KEY": "/my-app/dev/api-key"
}

Para Azure el archivo nuevo registra $config con provider y vaultUrl, así que las ejecuciones siguientes no necesitan opciones. En el vault, el secreto se llama my-app-dev-api-key.

Cómo se actualiza el archivo de mapeo

  • Sin archivo: Envilder lo crea. Un archivo llamado envilder.json o envilder.*.json no recibe la línea $schema, porque los editores ya lo reconocen a través de SchemaStore; cualquier otro nombre la recibe.
  • La variable no está en el archivo: se añade la entrada, manteniendo la sangría y los saltos de línea del archivo (✓ Added API_KEY to envilder.json).
  • La variable ya apunta a la misma ruta: el archivo no se toca (✓ API_KEY already mapped in envilder.json, no changes).
  • La variable apunta a otra ruta: no se sube nada y Envilder sale con 1.
  • El archivo apunta a otro proveedor o vault que el push: el secreto se sube, el archivo se queda como está y un aviso nombra los dos destinos.
  • El archivo de mapeo se escribe antes que el secreto. Si el push falla, Envilder restaura el archivo anterior, o borra el que ha creado, de modo que el archivo nunca lista un secreto que no se ha subido.
⚠️
--value acaba en el historial del shell. Es un argumento de la línea de comandos: el shell lo guarda, y es visible en la lista de procesos mientras el comando se ejecuta. Úsalo para valores de prueba. Para secretos reales, sube desde un archivo .env con --push y borra el archivo después.

Cómo se guardan los valores

AWS SSM. Cada valor se escribe con PutParameter como SecureString, con la sobrescritura activada: se crea un parámetro nuevo o el existente recibe una versión nueva. Envilder no pasa ninguna clave KMS, así que SSM usa la clave por defecto de la cuenta.

Azure Key Vault. Cada valor se escribe con Set Secret, que crea el secreto o le añade una versión nueva. El nombre del secreto es la ruta sin las barras iniciales y con el resto de barras convertidas en guiones: /my-app/dev/api-key pasa a ser my-app-dev-api-key. No cambia nada más, así que un nombre que Key Vault no acepta, por ejemplo uno con _ o ., falla con el error propio de Key Vault. Dos referencias que dan el mismo nombre en una misma ejecución son un error.

Errores habituales

MensajeSolución
Single-secret push requires non-empty --key, --value, and --secret-path.Pasa las tres opciones con un valor no vacío, o usa --push para subir un archivo .env.
API_KEY is already mapped to a different secret path in envilder.json. Nothing was pushed. Update the mapping manually, or use --no-map-update to push without recording it.Usa la ruta que el archivo de mapeo ya registra, edita el archivo a mano, o añade --no-map-update.
⚠ envilder.json targets azure (my-vault), but the secret was pushed to aws. The mapping was not added. Use --map=<file> to record it in a different map file.Es un aviso: el secreto se ha subido pero no se ha registrado. Pasa --map con un archivo de mapeo para ese destino, o haz coincidir --provider y --vault-url con el archivo.
Conflicting values for secret path '******************ken': 'API_TOKEN' has value '***********234' but 'LEGACY_TOKEN' has value '***********678'Da el mismo valor a las dos variables en el archivo .env, o mapéalas a rutas diferentes. No se ha subido nada.
Warning: Environment variable API_TOKEN not found in environment fileEs un aviso: añade la variable al archivo .env, o pasa --envfile con el archivo correcto.
Cannot write map file config/envilder.json: its directory does not existCrea el directorio, o pasa una ruta --map dentro de uno que exista. No se ha subido nada.
Secret name collision: '/my-app/api-key' and 'my-app-api-key' both resolve to 'my-app-api-key'. Use distinct Key Vault secret names in your map file when targeting Azure.Usa una sola referencia por secreto de Key Vault en el archivo de mapeo.
****************key: User: arn:aws:sts::123456789012:assumed-role/dev/session is not authorized to perform: ssm:PutParameter on resource: …Las credenciales funcionan pero no pueden escribir ese parámetro. Permite ssm:PutParameter sobre su ARN.
vaultUrl is required when using Azure provider. Set it in $config.vaultUrl in your map file or via --vault-url flag.Con --no-map-update no se lee ningún archivo de mapeo: pasa --provider=azure junto con --vault-url.