Cosa Sono Le Variabili D’Ambiente: Una Guida Completa Per Principianti

Pubblicato: di Brian Andrus
Cosa Sono Le Variabili D’Ambiente: Una Guida Completa Per Principianti thumbnail

Le variabili d’ambiente consentono di configurare le applicazioni senza modificare il codice. Separano i dati esterni dalla logica dell’applicazione, il che può rimanere piuttosto misterioso per i programmatori alle prime armi (e anche per alcuni esperti).

Attraverso questa guida pratica, solleveremo il velo sulle variabili di ambiente per farti comprendere cosa comportano, perché sono importanti e come sfruttare con sicurezza le variabili di ambiente.

Prendi la tua bevanda preferita (e magari alcuni biscotti) perché stiamo per entrare nel vivo. Esploriamo i concetti delle variabili d’ambiente partendo dalle basi.

Cosa Sono Le Variabili D’ambiente?

esempio di variabili d'ambiente che mostra un esempio di un valore dinamico come $SUGAR e a cosa corrisponde quel valore: 1 tazza di zucchero

Le variabili d’ambiente sono valori nominati dinamici che possono influenzare il comportamento dei processi in esecuzione su un computer. Alcune proprietà chiave delle variabili d’ambiente sono:

  • Denominate: Usa nomi di variabile descrittivi come APP_MODE e DB_URL.
  • Esterna: I valori sono impostati esternamente al codice dell’app tramite file, linee di comando e sistemi.
  • Dinamica: Può aggiornare le variabili senza riavviare le app.
  • Configurata: Il codice si basa sulle variabili ma non le definisce.
  • Disaccoppiata: Non è necessario modificare le configurazioni del codice una volta impostate le variabili.

Ecco un’analogia. Immagina di seguire una ricetta per biscotti con gocce di cioccolato. La ricetta potrebbe dire:

  • Aggiungi 1 tazza di zucchero
  • Aggiungi 1 panetto di burro ammorbidito
  • Aggiungi 2 uova

Invece di quei valori fissi, potresti utilizzare le variabili d’ambiente:

  • Aggiungi $SUGAR tazza di zucchero
  • Aggiungi $BUTTER panetti di burro ammorbidito
  • Aggiungi $EGGS uova

Prima di preparare i biscotti, dovresti impostare i nomi delle variabili d’ambiente con valori a tua scelta:

ZUCCHERO=1 
BURRO=1
UOVA=2

Quindi, seguendo la ricetta, i tuoi ingredienti risulterebbero:

  • Aggiungi 1 tazza di zucchero
  • Aggiungi 1 panetto di burro ammorbidito
  • Aggiungi 2 uova

Questo ti permette di configurare la ricetta del cookie senza modificare il codice della ricetta.

Lo stesso concetto si applica all’elaborazione e allo sviluppo. Le variabili d’ambiente ti permettono di modificare l’ambiente in cui un processo viene eseguito senza cambiare il codice sottostante. Ecco alcuni esempi comuni:

  • Impostare l’ambiente su “development” o “production”
  • Configurazione delle chiavi API per servizi esterni
  • Inserimento di chiavi segrete o credenziali
  • Attivazione e disattivazione di determinate funzionalità

Le variabili di ambiente offrono grande flessibilità. Puoi distribuire lo stesso codice in più ambienti senza modificare il codice stesso. Ma cerchiamo di capire ulteriormente perché sono preziose.

Perché Le Variabili di Ambiente Sono Valutabili?

le variabili d'ambiente sono preziose per separare il codice dell'applicazione dalle configurazioni, semplificare la configurazione dell'applicazione, gestire segreti e credenziali e promuovere la consistenza

Considera le variabili di ambiente come manopole di applicazione utilizzate per regolare le preferenze. Esploreremo degli ottimi casi d’uso a breve.

Consolidiamo l’intuizione su perché le variabili d’ambiente sono importanti!

Motivo #1: Separano Il Codice Dell’applicazione Dalle Configurazioni

motivo #1 separano il codice dell'applicazione dalle configurazioni mostrando questi due elementi come caselle separate nella grafica

La codifica rigida delle configurazioni e delle credenziali direttamente nel tuo codice può causare ogni tipo di problema:

  • Commit accidentali al controllo del codice sorgente
  • Ricostruzione e ridistribuzione del codice solo per modificare un valore
  • Problemi di configurazione durante la promozione tra ambienti

Porta anche a codice disordinato:

import os

# Configurazione hardcoded
DB_USER = 'appuser' 
DB_PASS = 'password123'
DB_HOST = 'localhost'
DB_NAME = 'myappdb'

def connect_to_db():
  print(f"Collegamento a {DB_USER}:{DB_PASS}@{DB_HOST}/{DB_NAME}")  

connect_to_db()

Questo intreccia la logica di business con i dettagli della configurazione. Un’accoppiata stretta rende la manutenzione laboriosa nel tempo:

  • Le modifiche richiedono la modifica del codice sorgente
  • Rischio di divulgazione dei segreti nel controllo del codice sorgente

Utilizzare le variabili d’ambiente riduce questi problemi. Ad esempio, puoi impostare le variabili d’ambiente DB_USER e DB_NAME.

# file .env
DB_USER=appuser
DB_PASS=password123  
DB_HOST=localhost
DB_NAME=myappdb

Il codice dell’applicazione può accedere alle variabili di ambiente quando necessario, mantenendo il codice pulito e semplice.

import os

# Carica la configurazione dall'ambiente
DB_USER = os.environ['DB_USER']
DB_PASS = os.environ['DB_PASS'] 
DB_HOST = os.environ['DB_HOST']
DB_NAME = os.environ['DB_NAME']

def connect_to_db():
  print(f"Collegamento a {DB_USER}:{DB_PASS}@{DB_HOST}/{DB_NAME}")
  
connect_to_db()

Le variabili d’ambiente separano in modo pulito la configurazione dal codice, mantenendo i valori sensibili astratti nell’ambiente.

Puoi distribuire lo stesso codice dallo sviluppo alla produzione senza cambiare nulla. Le variabili di ambiente possono variare tra gli ambienti senza influenzare affatto il codice.

Motivo #2: Semplificano La Configurazione Delle Applicazioni

Applicazione con tre diversi rami ambientali: sviluppo, staging, produzione

Le variabili d’ambiente semplificano la modifica delle configurazioni senza intervenire sul codice:

# file .env:
DEBUG=true

Ecco come potremmo usarlo all’interno del file di script:

# Contenuto dello script:
import os

DEBUG = os.environ.get('DEBUG') == 'true' 

if DEBUG:
   print("In modalità DEBUG")

Attivare o disattivare la modalità di debug richiede solo l’aggiornamento del file .env—non sono necessari cambiamenti al codice, ricostruzioni o ridistribuzioni. Le “Env vars”, abbreviazione di variabili d’ambiente, aiutano anche nel distribuire in modo fluido tra diversi ambienti:

import os

# Recupera la variabile d'ambiente per determinare l'ambiente corrente (produzione o staging)
current_env = os.getenv('APP_ENV', 'staging')  # Default a 'staging' se non impostato

# Chiave API di produzione
PROD_API_KEY = os.environ['PROD_API_KEY']

# Chiave API di staging
STG_API_KEY = os.environ['STG_API_KEY']

# Logica che imposta api_key in base all'ambiente corrente
if current_env == 'production':
    api_key = PROD_API_KEY
else:
    api_key = STG_API_KEY

# Inizializza il client API con la chiave API appropriata
api = ApiClient(api_key)

Lo stesso codice può utilizzare separate API keys per la produzione rispetto allo staging senza alcuna modifica.

E infine, consentono l’attivazione di funzionalità senza nuovi deployment:

NEW_FEATURE = os.environ['NEW_FEATURE'] == 'true'

if NEW_FEATURE:
   enableNewFeature()

Modificare la variabile NEW_FEATURE attiva istantaneamente la funzionalità all’interno del nostro codice. L’interfaccia per aggiornare le configurazioni dipende dai sistemi:

  • Le piattaforme Cloud come Heroku utilizzano dashboard web
  • I server utilizzano strumenti di comando OS
  • Lo sviluppo locale può utilizzare file .env

Le variabili d’ambiente sono utili nella creazione di applicazioni, permettendo agli utenti di configurare gli elementi secondo le loro esigenze.

Motivo #3: Gestiscono Segreti E Credenziali

codice applicativo ramificato in variabili d'ambiente con cinque rami etichettati come segreti

Salvare segreti come chiavi API, password e chiavi private direttamente nel codice sorgente comporta notevoli rischi di sicurezza:

# Evita di esporre segreti nel codice!
STRIPE_KEY = 'sk_live_1234abc'
DB_PASSWORD = 'password123'

stripe.api_key = STRIPE_KEY 
db.connect(DB_PASSWORD)

Queste credenziali sono ora esposte se questo codice viene inserito in un repository GitHub pubblico!

Le variabili d’ambiente prevengono le perdite esternalizzando i segreti:

import os

STRIPE_KEY = os.environ.get('STRIPE_KEY')  
DB_PASS = os.environ.get('DB_PASS')   

stripe.api_key = STRIPE_KEY  
db.connect(DB_PASS)

I valori segreti effettivi vengono impostati in un file .env locale.

# file .env

STRIPE_KEY=sk_live_1234abc
DB_PASS=password123

Non dimenticare di .gitignore il file .env per mantenere segreti fuori dal controllo del codice sorgente. Questo comporta la definizione del file .env in un file .gitignore nella radice di qualsiasi repo, che indica a git di ignorare il file durante la creazione del commit.

Questo separa le definizioni segrete dal codice dell’applicazione, caricandole in modo sicuro da ambienti protetti durante l’esecuzione. Il rischio di esporre accidentalmente le credenziali si riduce drasticamente.

Motivo #4: Promuovono la Coerenza

configurazione con quattro rami che si diramano verso variabili d'ambiente

Immagina di avere diversi file di configurazione per gli ambienti di sviluppo, QA e produzione:

# Sviluppo
DB_HOST = 'localhost'
DB_NAME = 'appdb_dev'

# Produzione
DB_HOST = 'db.myapp.com'
DB_NAME = 'appdb_prod'

Questa discrepanza introduce bug sottili che sono difficili da individuare. Il codice che funziona perfettamente in sviluppo potrebbe improvvisamente interrompersi in produzione a causa di configurazioni non corrispondenti.

Le variabili di ambiente risolvono questo problema centralizzando la configurazione in un unico luogo:

DB_HOST=db.myapp.com
DB_NAME=appdb_prod

Ora, le stesse variabili vengono utilizzate in modo coerente in tutti gli ambienti. Non devi più preoccuparti di impostazioni casuali o errate che vengono applicate.

Il codice dell’applicazione fa semplicemente riferimento alle variabili:

import os

db_host = os.environ['DB_HOST']
db_name = os.environ['DB_NAME']

db.connect(db_host, db_name)

Indipendentemente dal fatto che l’applicazione venga eseguita localmente o su un server di produzione, utilizza sempre il nome host e il nome del database corretti.

Questa uniformità riduce gli errori, migliora la prevedibilità e rende l’applicazione complessivamente più robusta. Gli sviluppatori possono avere la certezza che il codice si comporterà identicamente in ogni ambiente.

Ricevi contenuti direttamente nella tua casella di posta

Iscriviti ora per ricevere tutti gli ultimi aggiornamenti direttamente nella tua casella di posta.

Come Puoi Definire Le Variabili D’ambiente

Le variabili d’ambiente possono essere definite in diversi luoghi, consentendo flessibilità nella configurazione e nell’accesso tra processi e sistemi.

1. Variabili D’ambiente del Sistema Operativo

La maggior parte dei sistemi operativi fornisce meccanismi integrati per definire variabili globali. Questo rende le variabili accessibili a livello di sistema a tutti gli utenti, applicazioni, ecc.

Sui sistemi Linux/Unix, le variabili possono essere definite negli script di avvio della shell.

Ad esempio, ~/.bashrc può essere utilizzato per impostare variabili a livello utente, mentre /etc/environment è per variabili di sistema accessibili a tutti gli utenti.

Le variabili possono anche essere impostate in linea prima di eseguire i comandi utilizzando il comando export o direttamente tramite il comando env in bash:

# In ~/.bashrc
export DB_URL=localhost
export APP_PORT=3000
# In /etc/environment
DB_HOST=localhost
DB_NAME=mydatabase

Le variabili possono anche essere impostate in linea prima di eseguire i comandi:

export TOKEN=abcdef
python app.py

Definire le variabili a livello di sistema operativo le rende globalmente disponibili, il che è molto utile quando vuoi eseguire l’app senza dipendere da valori interni.

Puoi anche fare riferimento a variabili definite in script o argomenti della riga di comando.

python app.py --db-name $DB_NAME --db-host $DB_HOST --batch-size $BATCH_SIZE

2. Definizione delle Variabili di Ambiente nel Codice dell’Applicazione

Oltre alle variabili a livello di sistema operativo, le variabili d’ambiente possono essere definite e accessibili direttamente all’interno del codice dell’applicazione durante l’esecuzione.

Il dizionario os.environ in Python contiene tutte le variabili di ambiente attualmente definite. Possiamo impostarne di nuove semplicemente aggiungendo coppie chiave-valore:

Le variabili d’ambiente possono anche essere definite e accessibili direttamente all’interno del codice dell’applicazione. In Python, il dizionario os.environ contiene tutte le variabili d’ambiente definite:

import os
os.environ["API_KEY"] = "123456" 
api_key = os.environ.get("API_KEY")

Allora, il dizionario os.environ permette l’impostazione e il recupero dinamico delle variabili di ambiente all’interno del codice Python.

La maggior parte dei linguaggi è fornita con le proprie librerie, offrendo accesso alle variabili di ambiente durante l’esecuzione.

Puoi anche utilizzare framework come Express, Django e Laravel per avere integrazioni più approfondite, come il caricamento automatico di file .env che contengono variabili d’ambiente.

3. Creare File di Configurazione Locali per le Variabili d’Ambiente

Oltre alle variabili a livello di sistema, le variabili di ambiente possono essere caricate dai file di configurazione locali di un’applicazione. Questo mantiene i dettagli della configurazione separati dal codice, anche per lo sviluppo e il testing locali.

Alcuni approcci popolari:

.env Files

La convenzione di formato file .env popolarizzata da Node.js offre un modo comodo per specificare le variabili di ambiente in un formato chiave-valore:

# .env
DB_URL=localhost
API_KEY=123456

I framework web come Django e Laravel caricano automaticamente le variabili definite nei file .env nell’ambiente dell’applicazione. Per altri linguaggi come Python, librerie come python-dotenv gestiscono l’importazione dei file .env:

from dotenv import load_dotenv
load_dotenv() # Carica le variabili .env

print(os.environ['DB_URL']) # localhost

Il vantaggio dell’utilizzo dei file .env è che mantengono la configurazione pulita e separata senza apportare modifiche al codice.

File di Configurazione JSON

Per esigenze di configurazione più complesse che coinvolgono più variabili d’ambiente, l’utilizzo di file JSON o YAML aiuta ad organizzare le variabili insieme:

// config.json
{
  "api_url": "https://api.example.com",
  "api_key": "123456", 
  "port": 3000
}

Il codice dell’applicazione può quindi caricare rapidamente questi dati JSON come un dizionario per accedere alle variabili configurate:

import json

config = json.load('config.json')  

api_url = config['api_url']
api_key = config['api_key'] 
port = config['port'] # 3000

Questo impedisce la presenza di file dotenv disordinati quando si gestiscono molteplici configurazioni di app.

Come Accedi Alle Variabili D’ambiente In Diversi Linguaggi Di Programmazione?

Tuttavia scegliamo di definire le variabili d’ambiente, le nostre applicazioni necessitano di un modo coerente per cercare i valori durante l’esecuzione.

Mentre esistono vari modi per definire le variabili di ambiente, il codice dell’applicazione necessita di un metodo standard per accedervi al momento dell’esecuzione, indipendentemente dal linguaggio. Ecco una panoramica delle tecniche per accedere alle variabili di ambiente nei linguaggi più diffusi:

Python

Python fornisce il dizionario os.environ per accedere alle variabili d’ambiente definite:

import os

db = os.environ.get('DB_NAME')

print(db)

Possiamo ottenere una variabile utilizzando os.environ.get(), che restituisce None se non definita. Oppure accedere direttamente tramite os.environ(), che solleverà un KeyError se non presente.

Metodi aggiuntivi come os.getenv() e os.environ.get() permettono di specificare valori predefiniti se non impostati.

JavaScript (Node.js)

In codice JavaScript Node.js, le variabili di ambiente sono disponibili sull’oggetto globale process.env:

// Ottieni variabile d'ambiente
const db = process.env.DB_NAME;

console.log(db);

Se non definito, process.env conterrà undefined. Possiamo anche fornire valori predefiniti come:

const db = process.env.DB_NAME || 'defaultdb';

Ruby

Le applicazioni Ruby accedono alle variabili di ambiente tramite l’hash ENV:

# Access variable 
db = ENV['DB_NAME']  

puts db

Possiamo anche passare un valore predefinito se la chiave desiderata non esiste:

db = ENV.fetch('DB_NAME', 'defaultdb')

PHP

PHP offre i metodi globali getenv(), $_ENV e $_SERVER per accedere alle variabili d’ambiente:

// Ottieni la variabile d'ambiente
$db_name = getenv('DB_NAME');

// Oppure accedi agli array $_ENV o $_SERVER 
$db_name = $_ENV['DB_NAME'];

A seconda della fonte della variabile, potrebbero essere disponibili in diversi globali.

Java

In Java, il metodo System.getenv() restituisce le variabili env che possono essere accessibili:

String dbName = System.getenv("DB_NAME");

Questo permette l’accesso alle variabili definite a livello di sistema globalmente in Java.

Per ora, alcune delle migliori pratiche riguardo l’igiene delle variabili di ambiente.

Guida Alla Sicurezza Delle Variabili di Ambiente

non conservare informazioni sensibili, utilizzare variabili specifiche per l'ambiente, mantenere i segreti fuori dal controllo versione, proteggere i segreti sui server di produzione, utilizzare algoritmi di crittografia robusti, ruotare regolarmente i segreti

Quando si tratta di gestire le variabili di ambiente in modo sicuro, dovremmo tenere a mente diverse best practice.

Non Memorizzare Informazioni Sensibili Nel Codice

Prima di tutto, non memorizzare mai informazioni sensibili come password, chiavi API o token direttamente nel tuo codice.

Potrebbe essere allettante inserire direttamente una password del database o una chiave di crittografia nel tuo codice sorgente per un accesso rapido, ma resisti a quella tentazione!

Se accidentalmente invii quel codice a un repository pubblico su GitHub, stai praticamente trasmettendo i tuoi segreti a tutto il mondo. Immagina se un hacker ottenesse le credenziali del tuo database di produzione solo perché erano visibili in chiaro nel tuo codice. Spaventoso, vero?

Invece, utilizza sempre le variabili d’ambiente per memorizzare qualsiasi tipo di configurazione sensibile. Conserva i tuoi segreti in un luogo sicuro come un file .env o uno strumento di gestione dei segreti e fai riferimento ad essi nel tuo codice tramite variabili d’ambiente. Ad esempio, invece di fare qualcosa del genere nel tuo codice Python:

db_password = "supers3cr3tpassw0rd"

Conservi quella password in una variabile d’ambiente in questo modo:

# file .env
DB_PASSWORD=supers3cr3tpassw0rd

Poi accedi nel tuo codice come:

import os
db_password = os.environ.get('DB_PASSWORD')

In questo modo, i tuoi segreti rimangono al sicuro anche se il tuo codice sorgente viene compromesso. Le variabili di ambiente agiscono come uno strato di astrazione sicuro.

Utilizza Variabili Specifiche dell’Ambiente

Un’altra pratica consiste nell’utilizzare variabili di ambiente diverse per ciascun ambiente applicativo, come sviluppo, Staging o sito provvisorio e produzione.

Non vuoi connetterti accidentalmente al tuo database di produzione mentre sviluppi localmente solo perché hai dimenticato di aggiornare una variabile di configurazione! Utilizza uno spazio dei nomi per le tue variabili d’ambiente per ogni ambiente:

# Sviluppo
DEV_API_KEY=abc123
DEV_DB_URL=localhost

# Produzione
PROD_API_KEY=xyz789
PROD_DB_URL=proddb.amazonaws.com

Poi, fai riferimento alle variabili appropriate nel tuo codice a seconda dell’ambiente corrente. Molti Framework come Rails forniscono file di configurazione specifici per ambiente per questo scopo.

Mantieni I Segreti Fuori dal Controllo delle Versioni

È anche fondamentale mantenere i tuoi file .env e di configurazione contenenti segreti fuori dal controllo di versione. Aggiungi .env al tuo .gitignore per non commettere accidentalmente nel tuo repository.

Puoi utilizzare git-secrets per scansionare le informazioni sensibili prima di ogni commit. Per una sicurezza aggiuntiva, crittografa il file dei segreti prima di memorizzarlo. Strumenti come Ansible Vault e BlackBox possono aiutarti in questo.

Proteggi I Segreti Sui Server Di Produzione

Quando gestisci le variabili d’ambiente sui tuoi server di produzione, evita di impostarle utilizzando argomenti della riga di comando, che possono essere ispezionati attraverso la tabella dei processi.

Invece, utilizza gli strumenti di gestione dell’ambiente del tuo sistema operativo o della piattaforma di orchestrazione dei container. Ad esempio, puoi utilizzare i Secrets di Kubernetes per memorizzare ed esporre in modo sicuro i segreti ai tuoi pod dell’applicazione.

Utilizza Algoritmi di Crittografia Forte

Utilizza algoritmi di crittografia robusti e moderni quando crittografi i tuoi segreti, sia in transito che inattivi. Evita algoritmi obsoleti come DES o MD5, che presentano vulnerabilità note. Scegli invece algoritmi standard del settore come AES-256 per la crittografia simmetrica e RSA-2048 o ECDSA per la crittografia asimmetrica.

Ruota I Segreti Regolarmente

Ruota regolarmente i tuoi segreti, specialmente se sospetti che possano essere stati compromessi. Tratta i segreti come faresti con una password — aggiornali ogni pochi mesi. Uno strumento di gestione dei segreti come Hashicorp Vault o AWS Secrets Manager può aiutare ad automatizzare questo processo.

Attenzione al Logging e alla Segnalazione degli Errori

Fai attenzione alla registrazione e alla segnalazione degli errori. Assicurati di non registrare variabili d’ambiente che contengono valori sensibili. Se utilizzi uno strumento di tracciamento degli errori di terze parti, configuralo per sanificare i dati sensibili. L’ultima cosa che desideri è che i tuoi segreti compaiano in una traccia dello stack su una dashboard di segnalazione delle eccezioni!

Quando Evitare Le Variabili Di Ambiente?

variabile di ambiente con 4 diramazioni, ognuna con una x che blocca la via verso configurazione complessa, informazioni sensibili, ambienti multipli, condivisione con il team

Ci sono diversi casi in cui le variabili d’ambiente dovrebbero essere evitate:

Gestione di Configurazioni Complesse

Utilizzare le variabili d’ambiente per gestire la configurazione di sistemi software complessi può diventare disordinato e soggetto a errori. Man mano che il numero di parametri di configurazione aumenta, finisci per avere nomi di variabili d’ambiente lunghi che possono collidere involontariamente. Non esiste inoltre un modo semplice per organizzare insieme i valori di configurazione correlati.

Invece di utilizzare variabili d’ambiente, considera l’uso di file di configurazione in un formato come JSON o YAML. Questi ti permettono di:

  • Raggruppa i parametri di configurazione correlati in una struttura annidata.
  • Evita collisioni di nomi incapsulando la configurazione in ambiti e spazi dei nomi.
  • Definisci tipi di dati personalizzati anziché solo stringhe.
  • Visualizza e modifica rapidamente le configurazioni utilizzando un editor di testo.

Conservazione di Informazioni Sensibili

Anche se le variabili d’ambiente sembrano semplici per inserire configurazioni esterne come chiavi API, password dei database, ecc., questo può causare problemi di sicurezza.

Il problema è che le variabili d’ambiente sono accessibili globalmente in un processo. Quindi, se esiste una vulnerabilità in una parte della tua applicazione, potrebbe compromettere i segreti memorizzati nelle variabili d’ambiente.

Un approccio più sicuro consiste nell’utilizzo di un servizio di gestione dei segreti che gestisce la crittografia e il controllo degli accessi. Questi servizi permettono la memorizzazione di dati sensibili esternamente e forniscono SDK per il recupero dei valori delle applicazioni.

Quindi, prendi in considerazione l’uso di una soluzione dedicata alla gestione dei segreti piuttosto che le variabili d’ambiente per le credenziali e le chiavi private. Ciò riduce il rischio di esporre accidentalmente dati sensibili attraverso exploit o registrazioni non intenzionali.

Lavorare Con Più Ambienti

Gestire le variabili d’ambiente può diventare noioso man mano che le applicazioni crescono e vengono distribuite in diversi ambienti (dev, staging, staging, prod). Potresti avere dati di configurazione frammentati distribuiti in vari script bash, strumenti di distribuzione, ecc.

Una soluzione di gestione delle configurazioni aiuta a consolidare tutte le impostazioni specifiche dell’ambiente in un luogo centralizzato. Questo potrebbe essere file in un repository, un server di configurazione dedicato o integrato con i tuoi pipeline CI/CD.

Se l’obiettivo è evitare la duplicazione delle variabili d’ambiente, una singola fonte di verità per le configurazioni ha più senso.

Condivisione Della Configurazione Tra Team

Poiché le variabili di ambiente sono caricate localmente per ogni processo, condividere e sincronizzare i dati di configurazione tra diversi team che lavorano sulla stessa applicazione o suite di servizi diventa molto difficile.

Ogni team può mantenere la propria copia dei valori di configurazione in diversi script bash, manifesti di distribuzione, ecc. Questa configurazione decentralizzata porta ai seguenti:

  1. Deriva della configurazione: Senza una fonte unica di verità, è facile che la configurazione diventi inconsistente tra gli ambienti poiché diversi team apportano modifiche indipendenti.
  2. Mancanza di visibilità: Non esiste un modo centralizzato per visualizzare, cercare e analizzare lo stato completo della configurazione su tutti i servizi. Questo rende estremamente difficile capire come un servizio sia configurato.
  3. Sfide nell’auditing: I cambiamenti alle variabili d’ambiente non sono tracciati in alcun modo standard, rendendo difficile l’audit di chi ha modificato quale configurazione e quando.
  4. Difficoltà nei test: Senza un modo semplice per fare uno snapshot e condividere la configurazione, garantire ambienti consistenti per lo sviluppo e i test diventa estremamente complicato.

Invece di questo approccio frammentato, avere una soluzione di configurazione centralizzata consente ai team di gestire la configurazione da una singola piattaforma o repository.

Costruisci Le Tue Applicazioni Con Variabili D’ambiente Per Il Lungo Termine

Man mano che la tua applicazione cresce, considera come potresti aver bisogno di modi più avanzati per gestire le sue impostazioni di configurazione.

Quello che ora sembra semplice potrebbe complicarsi più avanti. Avrai probabilmente bisogno di metodi migliori per controllare l’accesso, condividere le impostazioni del team, organizzare tutto chiaramente e aggiornare le configurazioni in modo fluido.

Non metterti in un angolo usando solo variabili d’ambiente fin dall’inizio. Devi pianificare come gestire le configurazioni man mano che le tue esigenze si espandono.

Mentre le variabili d’ambiente sono ottime per gestire dati focalizzati sull’ambiente come credenziali di accesso, nomi di database, IP locali, ecc., vuoi creare un sistema che segua principi solidi come sicurezza, condivisibilità, organizzazione e la capacità di adattarsi rapidamente ai cambiamenti.

Le alternative che abbiamo discusso, come l’utilizzo di un file di configurazione dedicato o di un servizio, hanno caratteristiche preziose che si allineano con quei principi. Questo ti aiuterà a procedere velocemente senza rallentamenti.

Ricevi contenuti direttamente nella tua casella di posta

Iscriviti ora per ricevere tutti gli ultimi aggiornamenti direttamente nella tua casella di posta.