Referència del fitxer de mapatge

Què pot contenir l'envilder.json i com el llegeix Envilder? És un únic objecte JSON que associa noms de variables d'entorn a identificadors de secrets, amb un bloc $config opcional per al proveïdor, el perfil i la URL del vault. Les opcions de la CLI substitueixen $config camp a camp, i un nom o un proveïdor no vàlid atura l'execució abans de llegir cap secret.

Requisits previs

Aquesta pàgina descriu el fitxer de mapatge tal com el llegeixen la CLI d'envilder (0.16) i la GitHub Action. Els SDK de runtime llegeixen el mateix fitxer. Si encara no has resolt cap secret, comença per la guia d'inici.

Estructura

Un fitxer de mapatge és un únic objecte JSON. Les claus que comencen per $ estan reservades; qualsevol altra clau declara una variable d'entorn i el seu valor és l'identificador del secret que l'omple.

envilder.jsonjson
{
  "$schema": "https://envilder.com/schema/map-file.v1.json",
  "$config": {
    "provider": "aws",
    "profile": "dev-account"
  },
  "DB_PASSWORD": "/my-app/dev/db-password",
  "STRIPE_API_KEY": "/my-app/dev/stripe/api-key"
}
ClauSignificat
$schemaURL opcional del JSON Schema. Els editors la fan servir per autocompletar i validar; envilder la ignora.
$configObjecte opcional que selecciona el proveïdor i la seva configuració. Consulta els camps més avall.
$…envilder omet qualsevol altra clau que comenci per $. L'schema la rebutja, així que no la facis servir per a metadades.
DB_PASSWORDNom de variable (clau) i identificador del secret (valor de tipus string). El valor és opac: el seu format depèn del proveïdor.

Camps de $config

Tots els camps són opcionals. Un fitxer sense $config fa servir AWS SSM amb la cadena de credencials per defecte d'AWS.

CampValorsPer defecteComportament
provideraws | azureawsBackend de secrets. No distingeix majúscules de minúscules. Qualsevol valor diferent d'aws o azure atura l'execució.
profileNom de perfil de l'AWS CLICadena per defecte d'AWSPerfil amb nom de ~/.aws/config o ~/.aws/credentials. Només AWS: amb azure s'ignora i es mostra un avís.
vaultUrlhttps://<vault>.vault.azure.net-URL del Key Vault, per exemple https://my-vault.vault.azure.net. Obligatòria per a azure. aws la ignora.

Els SDK de runtime llegeixen els mateixos camps, però poden rebutjar combinacions de les quals la CLI només avisa, com profile amb azure. Cada pàgina d'SDK llista els seus propis errors.

Identificadors de secrets per proveïdor

AWS SSM Parameter Store

El valor és el nom del paràmetre tal com està desat a SSM, normalment un camí jeràrquic. Envilder crida GetParameter amb desxifratge, així que funcionen tant els paràmetres String com els SecureString. La regió surt d'AWS_REGION, després d'AWS_DEFAULT_REGION, després del perfil, amb us-east-1 com a últim recurs.

envilder.jsonjson
{
  "$config": { "provider": "aws", "profile": "prod-account" },
  "DB_PASSWORD": "/my-app/prod/db-password",
  "LEGACY_TOKEN": "legacy-token"
}

Azure Key Vault

El valor és el nom del secret. Envilder converteix les barres en guions abans de cridar Key Vault, així que pots compartir el mateix estil de camins amb un fitxer d'AWS:

envilder.jsonjson
{
  "$config": {
    "provider": "azure",
    "vaultUrl": "https://my-vault.vault.azure.net"
  },
  "DB_PASSWORD": "my-app-prod-db-password",
  "STRIPE_API_KEY": "/my-app/prod/stripe-api-key"
}
  • S'eliminen les barres inicials i la resta de barres passen a ser guions: "/my-app/prod/stripe-api-key" llegeix my-app-prod-stripe-api-key. El CLI, la GitHub Action i tots els SDKs apliquen la mateixa regla.
  • Tota la resta s'envia tal com està escrit. Un nom que Key Vault rebutgi (per exemple amb _ o .) falla amb l'error del mateix Key Vault.
  • Al CLI i a la GitHub Action, dos valors diferents que resolen al mateix nom dins un fitxer són un error.
  • Envilder sempre llegeix la versió més recent del secret.

Precedència entre $config i les opcions

Cada paràmetre es resol per separat, a partir de la primera font que el defineix:

1. Opcions de la CLI (--provider, --vault-url, --profile) o inputs de la GitHub Action
2. $config al fitxer de mapatge
3. Valors per defecte: provider aws, cadena de credencials per defecte d'AWS

Una opció només substitueix el camp que anomena; la resta de camps de $config continuen aplicant-se. Les mateixes regles valen per a pull, push i exec. Si s'omet --map, envilder fa servir l'envilder.json del directori actual; pull i push també fan servir .env com a valor per defecte de --envfile.

envilder exec -- npm start
envilder exec --profile=staging-account -- npm start
envilder exec --provider=azure \
  --vault-url=https://other-vault.vault.azure.net -- npm start

La GitHub Action accepta els inputs provider i vault-url, però no té input de perfil: a CI les credencials venen del workflow (per exemple, OIDC), no d'un perfil amb nom.

Regles de validació

envilder comprova el fitxer abans de contactar cap proveïdor, de manera que un fitxer no vàlid mai resol només una part dels seus secrets:

  • El fitxer ha de ser JSON vàlid. No s'hi permeten comentaris ni comes finals.
  • Els noms de variable han de complir ^[A-Za-z0-9_./-]+$: lletres, dígits, guió baix, punt, guió i barra. Són els noms que un fitxer .env pot desar i tornar a llegir sense canvis. Es rebutgen espais, =, #, lletres accentuades i salts de línia.
  • Un nom amb / (Database/Password) funciona a tot arreu: els SDKs i exec el passen tal qual, i el SDK de .NET el converteix en una secció de configuració. En escriure un fitxer .env, el CLI el manté i avisa, perquè python-dotenv carrega aquesta línia però dotenv per a Node.js, Docker Compose i bash no; fes servir exec o un nom amb __ (Database__Password) si la teva aplicació llegeix el fitxer amb un d’aquests.
  • Es rebutja un nom buit.
  • __proto__ no es pot fer servir com a nom de variable: l'schema el rebutja i envilder mai el resol, perquè els parsers de .env no el poden tornar a llegir.
  • La regla de noms s'aplica a totes les claus, encara que el valor no sigui un string. Una clau amb un valor que no és string (número, objecte, null) s'omet i no es resol.
  • Amb exec a Windows es rebutgen dos noms que només es diferencien en majúscules i minúscules, perquè Windows els tracta com una única variable.
  • L'schema recomana noms POSIX (^[a-zA-Z_][a-zA-Z0-9_]*$). Els noms amb punts i guions s'accepten, però algunes shells i eines no els poden llegir com a variables.

Contingut dels secrets (els valors resolts)

Envilder no reescriu mai el valor d’un secret: el que retorna el proveïdor és el que rep la teva aplicació. Els límits depenen d’on es desa el valor:

EtapaLímit
ProveïdorAWS SSM: 4 KB (estàndard) o 8 KB (nivell avançat). Azure Key Vault: 25 KB.
Fitxer .env (CLI, GitHub Action)Qualsevol valor que dotenv pugui representar. Consulta l’excepció més avall.
Entorn del procésEl sistema operatiu no pot desar NUL (U+0000) en una variable, i Windows limita cada variable a 32.767 caràcters.

Les APIs dels SDKs que només resolen (resolve, ResolveFile, IConfiguration) mantenen els valors en memòria i només estan subjectes als límits del proveïdor.

El CLI escriu cada valor de manera que dotenv en llegeixi exactament el string original. Les cometes s’escullen automàticament i es comproven analitzant el resultat abans d’escriure el fitxer. La comprovació fa servir la gramàtica de dotenv ampliada a claus amb /, així que per a aquestes claus demostra que el valor es llegeix igual, no que dotenv per a Node.js les carregui (ignora aquestes línies):

.envdotenv
PLAIN=plain
QUOTES=she said "hi"
HASH='alpha#beta'
PADDED='  padded  '
MULTILINE="first\nsecond"

#, espais al principi i al final, cometes, barres inverses, un \n literal, salts de línia LF/CRLF reals i Unicode es conserven tots. Si el fitxer ja existeix, cada assignació es substitueix al seu lloc (una multilínia, sencera), i es mantenen els comentaris, l’ordre i els finals de línia.

⚠️
L’únic valor que un .env no pot contenir: un valor que conté els tres tipus de cometes (', " i `) juntament amb un salt de línia, espais al principi o al final, o un #. El CLI s’atura amb un error que indica la variable i deixa el fitxer .env intacte. Desa aquest valor codificat (per exemple en base64) o llegeix-lo amb un SDK.
💲
Expansió de variables: Envilder escriu referències com $HOME literalment i dotenv no les expandeix, però altres carregadors sí. Docker Compose, per exemple, expandeix un KEY=$HOME sense cometes quan llegeix el fitxer. Tingues-ho en compte quan un secret contingui $.

Exemple amb diversos entorns

Mantén un fitxer per entorn amb les mateixes claus, així el codi de l'aplicació no canvia mai. Només canvien els camins i el perfil:

envilder.dev.jsonjson
{
  "$schema": "https://envilder.com/schema/map-file.v1.json",
  "$config": { "provider": "aws", "profile": "dev-account" },
  "DB_PASSWORD": "/my-app/dev/db-password",
  "STRIPE_API_KEY": "/my-app/dev/stripe/api-key"
}
envilder.prod.jsonjson
{
  "$schema": "https://envilder.com/schema/map-file.v1.json",
  "$config": { "provider": "aws", "profile": "prod-account" },
  "DB_PASSWORD": "/my-app/prod/db-password",
  "STRIPE_API_KEY": "/my-app/prod/stripe/api-key"
}

Tria el fitxer amb --map. En local, executa l'app amb el fitxer de desenvolupament; per a un artefacte de producció, genera un .env a partir del fitxer de producció:

envilder exec --map=envilder.dev.json -- npm run dev
envilder --map=envilder.prod.json --envfile=.env.prod

En un workflow, apunta l'action al fitxer d'aquell entorn:

- uses: macalbert/envilder/github-action@v0
  with:
    map-file: envilder.prod.json
    env-file: .env

SchemaStore reconeix els noms envilder.json i envilder.*.json, així que la majoria d'editors els validen fins i tot sense la línia $schema.

Errors habituals

MissatgeSolució
Invalid environment variable name "MY VAR": names may only contain letters, digits, underscore, dot, hyphen and slash, so that they can be read back from a .env fileCanvia el nom de la clau perquè només faci servir lletres, dígits, guió baix, punt, guió i barra.
Invalid JSON in parameter map file: envilder.jsonCorregeix la sintaxi JSON: una coma final, un comentari o unes cometes que falten solen ser la causa.
Unsupported provider: gcp. Supported providers: aws, azureFes servir aws o azure a $config.provider o a --provider.
vaultUrl is required when using Azure provider. Set it in $config.vaultUrl in your map file or via --vault-url flag.Defineix $config.vaultUrl, o passa --vault-url, quan el proveïdor sigui azure.
--profile is only supported with the aws provider and will be ignored (current provider: azure).És un avís, no un error. Treu profile de $config, o no passis --profile, quan facis servir azure.
Map file declares variables that differ only by case (API_KEY, api_key); Windows treats them as the same variable.Canvia el nom d'una de les claus; exec a Windows rebutja noms que només es diferencien en majúscules i minúscules.