Referència del mode pull
Què fa envilder quan l'executes sense --push ni exec? Llegeix envilder.json, obté cada secret mapat d'AWS SSM Parameter Store o Azure Key Vault i n'escriu els valors a .env. Un fitxer existent s'actualitza al seu lloc, les claus que el fitxer de mapatge no declara es queden com estan, i un secret que no existeix s'omet amb un avís.
Requisits previs
- La CLI d'envilder.
- Un fitxer de mapatge, envilder.json per defecte, que associa cada variable a un identificador de secret.
- Accés de lectura a tots els secrets mapats: ssm:GetParameter a AWS (més kms:Decrypt quan un paràmetre fa servir una clau gestionada pel client), o el permís Get de secrets a Azure Key Vault, per exemple amb el rol Key Vault Secrets User.
- Credencials que l'SDK del proveïdor pugui trobar: un perfil AWS, una sessió SSO o variables d'entorn, o un inici de sessió d'Azure com az login o una identitat gestionada.
Sinopsi
envilder [--map=<file>] [--envfile=<file>] \
[--provider=aws|azure] [--vault-url=<url>] [--profile=<name>]Pull és el mode per defecte: no hi ha cap subcomanda pull. Executa envilder sense opcions per llegir envilder.json i escriure .env al directori actual. Afegir --push, o --key, --value i --secret-path, canvia al mode push, i envilder exec és una subcomanda a part.
Opcions
| Opció | Per defecte | Descripció |
|---|---|---|
--map | envilder.json al directori actual | Fitxer de mapatge que es llegeix. L'execució s'atura si el fitxer no existeix o el valor és buit. |
--envfile | .env | Fitxer que s'escriu. Es crea si no existeix i s'actualitza al seu lloc si existeix. El seu directori ha d'existir. |
--provider | $config.provider i, si no, aws | aws o azure, en majúscules o minúscules. Qualsevol altre valor atura l'execució abans de llegir cap secret. |
--vault-url | $config.vaultUrl | URL de Key Vault, per exemple https://my-vault.vault.azure.net. Obligatòria amb azure. |
--profile | $config.profile i, si no, la cadena de credencials per defecte d'AWS | Perfil d'AWS amb nom. Amb azure s'ignora i es mostra un avís. |
Una opció que rep una ruta o un nom no accepta mai un valor que comenci per -. A envilder --map --envfile=.env, --map no té valor, així que l'execució s'atura amb error: option '--map <path>' argument missing en lloc de llegir --envfile=.env com a ruta. envilder --help llista totes les opcions.
Com es combinen $config i les opcions
Cada paràmetre surt de la primera font que el defineix: l'opció, després $config al fitxer de mapatge i després el valor per defecte. Una opció substitueix només el camp que anomena, així que la resta de camps de $config continuen aplicant-se. Pren aquest fitxer de producció:
{
"$config": { "provider": "aws", "profile": "prod-account" },
"DB_PASSWORD": "/my-app/prod/db-password"
}{
"$config": {
"provider": "azure",
"vaultUrl": "https://my-app-prod.vault.azure.net"
},
"DB_PASSWORD": "my-app-prod-db-password"
}La primera comanda fa servir la configuració del fitxer. La segona en substitueix un camp i manté la resta:
envilder --map=envilder.prod.json --envfile=.env.prod
envilder --map=envilder.prod.json --envfile=.env.prod --profile=ci-readonlyLa segona comanda llegeix els mateixos paràmetres amb el perfil ci-readonly. El proveïdor continua sortint de $config.
envilder --map=envilder.prod.json --envfile=.env.prod
envilder --map=envilder.prod.json --envfile=.env.prod \
--vault-url=https://my-app-dr.vault.azure.netLa segona comanda llegeix els mateixos noms de secret d'un altre vault. El proveïdor continua sortint de $config.
Regles de precedència completes a la referència del fitxer de mapatge
Exemple: actualitzar un .env existent
El fitxer de mapatge declara quatre variables. Al vault, SENTRY_DSN no existeix i FEATURE_FLAG és buit. El projecte ja té un fitxer .env:
{
"DB_PASSWORD": "/my-app/dev/db-password",
"API_TOKEN": "/my-app/dev/api-token",
"SENTRY_DSN": "/my-app/dev/sentry-dsn",
"FEATURE_FLAG": "/my-app/dev/feature-flag"
}# Local settings
LOG_LEVEL=debug
DB_PASSWORD=old-password
SENTRY_DSN=https://old-dsn.example.com/1Executa envilder des de l'arrel del projecte. Sortida esperada amb AWS:
envilder☁ AWS identity · account=123456789012 · region=eu-west-1 · profile=default
🪙 RESOLVING SECRETS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ DB_PASSWORD → ***************ord
✓ API_TOKEN → ***************c21
✗ SENTRY_DSN secret not found (path: *******************dsn) — skipped
⚠ FEATURE_FLAG no value found (path: *********************lag) — skipped
⭐ LEVEL CLEARED — 2/4 secrets loaded · .env writtenAmb Azure no es mostra la línia d'identitat d'AWS; la resta és igual. Els valors van emmascarats: un de més de 10 caràcters mostra els 3 últims, un de més curt s'amaga sencer, i les rutes mostren els 3 últims caràcters. Les línies omeses són avisos a stderr; la resta va a stdout.
El fitxer .env després:
# Local settings
LOG_LEVEL=debug
DB_PASSWORD=local-dev-password
SENTRY_DSN=https://old-dsn.example.com/1
API_TOKEN=dev-token-7f3a9c21Com s'actualitza un .env existent
- Una variable mapada que ja és al fitxer es substitueix al seu lloc: la mateixa línia, el mateix comentari en línia i les mateixes cometes quan encara representen el valor nou.
- Una línia que ja té el valor correcte no es reescriu, així que una execució sense res de nou deixa el fitxer idèntic byte a byte.
- Es conserven les línies que el fitxer de mapatge no declara (LOG_LEVEL a l'exemple), els comentaris, les línies en blanc, l'ordre i els salts de línia.
- Les variables que encara no són al fitxer s'afegeixen al final. Un fitxer nou acaba amb un salt de línia.
- Un secret omès conserva el valor que el fitxer ja tenia (SENTRY_DSN a l'exemple). Envilder no elimina mai cap línia.
- Abans d'escriure, Envilder torna a llegir el resultat com ho fa dotenv. Si es perdés o canviés algun valor, no escriu res i s'atura amb un error que anomena les variables, mai els valors.
Les cometes, els valors multilínia i l'únic valor que un fitxer .env no pot contenir es descriuen a què pot contenir un secret
Secrets que falten, buits o que fallen
Un secret que no existeix (ParameterNotFound a AWS SSM, 404 a Key Vault) o que té el valor buit s'omet amb un avís. Els altres secrets s'escriuen igualment, el resum compta només els resolts (2/4 a l'exemple) i el codi de sortida és 0.
Qualsevol altra fallada, com un accés denegat, credencials que falten o un error de xarxa, atura l'execució. Envilder llista cada variable afectada amb la ruta emmascarada i el motiu, no toca el fitxer .env i surt amb 1:
💥 GAME OVER — some secrets could not be fetched
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✗ API_TOKEN → ******************ken
⮕ WHY?
User: arn:aws:sts::123456789012:assumed-role/dev/session is not authorized to perform: ssm:GetParameter on resource: arn:aws:ssm:eu-west-1:123456789012:parameter/my-app/dev/api-token …Quan una sessió SSO d'AWS ha caducat i stdin i stdout són un terminal, Envilder pregunta Run 'aws sso login --profile dev' now? [y/N]. Si acceptes i l'inici de sessió funciona, ho torna a provar una vegada. A la CI, o si ho rebutges, mostra la comanda que cal executar i surt amb 1. Si un secret que falta també ha d'aturar l'execució, fes servir envilder exec: mai inicia una comanda amb un conjunt de secrets incomplet.
Errors habituals
| Missatge | Solució |
|---|---|
No map file found. Provide --map or create envilder.json in the current directory. | Executa envilder des del directori que conté envilder.json, o passa --map=ruta/al/fitxer.json. |
Failed to read map file: config/envilder.json | El fitxer indicat amb --map no existeix o no es pot llegir. Les rutes relatives parteixen del directori actual. |
Invalid JSON in parameter map file: envilder.json | Corregeix la sintaxi JSON del fitxer de mapatge. Una coma final o un comentari n'és la causa habitual. |
Could not load credentials from any providers | L'SDK d'AWS no ha trobat credencials. Executa aws configure o aws sso login, o passa --profile amb un perfil configurat. |
User: arn:aws:sts::123456789012:assumed-role/dev/session is not authorized to perform: ssm:GetParameter on resource: … | Les credencials funcionen però no poden llegir aquest paràmetre. Permet ssm:GetParameter sobre el seu ARN, més kms:Decrypt per a una clau gestionada pel client. |
vaultUrl is required when using Azure provider. Set it in $config.vaultUrl in your map file or via --vault-url flag. | Afegeix "vaultUrl": "https://<nom-del-vault>.vault.azure.net" a $config, o passa --vault-url. |
Your AWS SSO session for profile "dev" ran out of lives. | Executa aws sso login --profile dev i torna a executar envilder. En un terminal, Envilder s'ofereix a fer l'inici de sessió per tu. |
Cannot represent the value for "API_TOKEN" in a dotenv-compatible format without data loss | El valor no es pot escriure en un fitxer .env sense canviar-lo, i no s'ha escrit res. Llegeix aquest secret amb envilder exec o un SDK, o desa'l codificat (per exemple en base64). |