Utilizzo delle variabili di ambiente Lambda - AWS Lambda

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo delle variabili di ambiente Lambda

È possibile utilizzare le variabili di ambiente per regolare il comportamento della funzione senza aggiornare il codice. Una variabile di ambiente è una coppia di stringhe archiviata nella configurazione specifica della versione di una funzione. Il runtime Lambda rende le variabili di ambiente disponibili per il codice e imposta variabili di ambiente aggiuntive che contengono informazioni sulla richiesta di funzione e invocazione.

Nota

Per aumentare la sicurezza, consigliamo di utilizzare AWS Secrets Manager al posto delle variabili di ambiente per archiviare le credenziali del database e altre informazioni sensibili come chiavi API o token di autorizzazione. Per ulteriori informazioni, consulta Creare e gestire segreti con. AWS Secrets Manager

Le variabili di ambiente non vengono valutate prima dell'invocazione della funzione. Qualsiasi valore definito è considerato una stringa letterale e non espanso. Eseguire la valutazione della variabile nel codice funzione.

Creazione di variabili di ambiente Lambda

Puoi configurare le variabili di ambiente in Lambda utilizzando la console Lambda, (), AWS Command Line Interface (AWS CLI) o utilizzando un AWS SAM SDK. AWS Serverless Application Model AWS

Console

Puoi definire le variabili di ambiente sulla versione non pubblicata della funzione. Quando pubblichi una versione, le variabili di ambiente sono bloccate per quella versione insieme ad altre impostazioni di configurazioni specifiche della versione.

È possibile creare una variabile di ambiente per la funzione definendo una chiave e un valore. La funzione utilizza il nome della chiave per recuperare il valore della variabile di ambiente.

Per impostare le variabili di ambiente nella console Lambda
  1. Aprire la pagina Funzioni della console Lambda.

  2. Scegliere una funzione.

  3. Scegli Configurazione, quindi scegli Variabili di ambiente.

  4. In Environment variables (Variabili di ambiente), scegliere Edit (Modifica).

  5. Scegli Add environment variable (Aggiungi variabile d'ambiente).

  6. Inserisci una coppia chiave valore.

    Requisiti
    • Le chiavi iniziano con una lettera e sono di almeno due caratteri.

    • Le chiavi contengono solo lettere, numeri e il carattere di sottolineatura (_).

    • Le chiavi non sono riservate da Lambda.

    • La dimensione totale di tutte le variabili di ambiente non supera i 4 KB.

  7. Seleziona Salva.

Generazione di un elenco di variabili di ambiente nell'editor di codice della console

Puoi generare un elenco di variabili di ambiente nell'editor di codice Lambda. È un modo rapido per fare riferimento alle variabili di ambiente durante la scrittura del codice.

  1. Scegli la scheda Codice.

  2. Scorri verso il basso fino alla sezione VARIABILI DI AMBIENTE dell'editor di codice. Le variabili di ambiente esistenti sono elencate qui:

    Sezione VARIABILI DI AMBIENTE dell'editor di codice della console Lambda
  3. Per creare nuove variabili di ambiente, scegli il segno più ( plus sign ):

    Aggiungere le variabili di ambiente nell'editor di codice della console Lambda

Le variabili di ambiente rimangono crittografate quando sono elencate nell'editor di codice della console. Se hai abilitato gli helper di crittografia per la crittografia in transito, tali impostazioni rimangono invariate. Per ulteriori informazioni, consulta Protezione delle variabili di ambiente Lambda.

L'elenco delle variabili di ambiente è di sola lettura ed è disponibile solo nella console Lambda. Questo file non è incluso quando scarichi l'archivio di file .zip della funzione e non è possibile aggiungere variabili di ambiente caricando questo file.

AWS CLI

L'esempio seguente imposta due variabili di ambiente in una funzione denominata my-function.

aws lambda update-function-configuration \ --function-name my-function \ --environment "Variables={BUCKET=amzn-s3-demo-bucket,KEY=file.txt}"

Quando applichi le variabili di ambiente con il comando update-function-configuration, viene sostituito l'intero contenuto della struttura Variables. Per mantenere le variabili di ambiente esistenti quando ne aggiungi una nuova, includi tutti i valori esistenti nella richiesta.

Per ottenere la configurazione corrente, utilizza il comando get-function-configuration.

aws lambda get-function-configuration \ --function-name my-function

Verrà visualizzato l'output seguente:

{
    "FunctionName": "my-function",
    "FunctionArn": "arn:aws:lambda:us-east-2:111122223333:function:my-function",
    "Runtime": "nodejs22.x",
    "Role": "arn:aws:iam::111122223333:role/lambda-role",
    "Environment": {
        "Variables": {
            "BUCKET": "amzn-s3-demo-bucket",
            "KEY": "file.txt"
        }
    },
    "RevisionId": "0894d3c1-2a3d-4d48-bf7f-abade99f3c15",
    ...
}

È possibile passare l'ID di revisione dall'output di get-function-configuration come parametro a update-function-configuration. Ciò garantisce che i valori non cambino da quando leggi la configurazione a quando la aggiorni.

Per configurare la chiave di crittografia di una funzione, imposta l'opzione KMSKeyARN.

aws lambda update-function-configuration \ --function-name my-function \ --kms-key-arn arn:aws:kms:us-east-2:111122223333:key/055efbb4-xmpl-4336-ba9c-538c7d31f599
AWS SAM

Per configurare le variabili di ambiente per la tua funzione, puoi utilizzare AWS Serverless Application Model. Aggiorna le proprietà Environment e Variables nel tuo file template.yaml, quindi esegui sam deploy.

Esempio template.yaml
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An AWS Serverless Application Model template describing your function. Resources: my-function: Type: AWS::Serverless::Function Properties: CodeUri: . Description: '' MemorySize: 128 Timeout: 120 Handler: index.handler Runtime: nodejs22.x Architectures: - x86_64 EphemeralStorage: Size: 10240 Environment: Variables: BUCKET: amzn-s3-demo-bucket KEY: file.txt # Other function properties...
AWS SDKs

Per gestire le variabili di ambiente utilizzando un AWS SDK, utilizzate le seguenti operazioni API.

Per ulteriori informazioni, consulta la documentazione dell'SDK AWS relativa al linguaggio di programmazione preferito.

Scenario di esempio per le variabili di ambiente

È possibile utilizzare le variabili di ambiente per personalizzare il comportamento delle funzioni nell'ambiente di test e nell'ambiente di produzione. Ad esempio, puoi creare due funzioni con stesso codice ma configurazione diversa. Una funzione si connette a un database di test e l'altra a un database di produzione. In questo caso, puoi utilizzare le variabili di ambiente per passare alla funzione il nome host e altri dettagli di connessione per il database.

Nell'esempio seguente viene illustrato come definire l'host del database e il nome del database come variabili di ambiente.

Variabili di ambiente nella console Lambda.

Se si desidera che l'ambiente di test generi più informazioni di debug rispetto all'ambiente di produzione, è possibile impostare una variabile di ambiente per configurare l'ambiente di test in modo da utilizzare una registrazione più dettagliata o una traccia più dettagliata.

Ad esempio, nell'ambiente di test, è possibile impostare una variabile di ambiente con la chiave LOG_LEVEL e un valore che indica un livello di log di debug o trace. Nel codice della funzione Lambda, puoi quindi utilizzare questa variabile di ambiente per impostare il livello di registro.

I seguenti esempi di codice in Python e Node.js illustrano come è possibile raggiungere questo obiettivo. Questi esempi presuppongono che la variabile di ambiente abbia un valore DEBUG in Python o debug in Node.js.

Python
Esempio Codice Python per impostare il livello di registro
import os import logging # Initialize the logger logger = logging.getLogger() # Get the log level from the environment variable and default to INFO if not set log_level = os.environ.get('LOG_LEVEL', 'INFO') # Set the log level logger.setLevel(log_level) def lambda_handler(event, context): # Produce some example log outputs logger.debug('This is a log with detailed debug information - shown only in test environment') logger.info('This is a log with standard information - shown in production and test environments')
Node.js (ES module format)
Esempio Codice Node.js per impostare il livello di registro

Questo esempio utilizza la libreria winston di registrazione. Usa npm per aggiungere questa libreria al pacchetto di distribuzione della tua funzione. Per ulteriori informazioni, consulta Creazione di un pacchetto di implementazione .zip con dipendenze.

import winston from 'winston'; // Initialize the logger using the log level from environment variables, defaulting to INFO if not set const logger = winston.createLogger({ level: process.env.LOG_LEVEL || 'info', format: winston.format.json(), transports: [new winston.transports.Console()] }); export const handler = async (event) => { // Produce some example log outputs logger.debug('This is a log with detailed debug information - shown only in test environment'); logger.info('This is a log with standard information - shown in production and test environment'); };

Recupero delle variabili di ambiente Lambda

Per recuperare le variabili di ambiente nel codice della funzione, utilizza il metodo standard per il linguaggio di programmazione.

Node.js
let region = process.env.AWS_REGION
Python
import os region = os.environ['AWS_REGION']
Nota

In alcuni casi, potrebbe essere necessario utilizzare il seguente formato:

region = os.environ.get('AWS_REGION')
Ruby
region = ENV["AWS_REGION"]
Java
String region = System.getenv("AWS_REGION");
Go
var region = os.Getenv("AWS_REGION")
C#
string region = Environment.GetEnvironmentVariable("AWS_REGION");
PowerShell
$region = $env:AWS_REGION

Lambda memorizza le variabili di ambiente in modo sicuro crittografandole quando inattive. Puoi configurare Lambda per utilizzare una chiave di crittografia diversa, crittografare i valori delle variabili di ambiente sul lato client o impostare le variabili di ambiente in un AWS CloudFormation modello con. AWS Secrets Manager

Variabili di ambiente di runtime definite

I tempi di esecuzione Lambda impostano diverse variabili di ambiente durante l'inizializzazione. La maggior parte delle variabili di ambiente fornisce informazioni sulla funzione o sul runtime. Le chiavi per queste variabili di ambiente sono riservate e non possono essere impostate nella configurazione della funzione.

Variabili d'ambiente riservate
  • _HANDLER: la posizione del gestore configurata nella funzione.

  • _X_AMZN_TRACE_ID: l'intestazione di traccia X-Ray. Questa variabile di ambiente cambia a ogni invocazione.

    • Questa variabile di ambiente non è definita per i runtime solo per il sistema operativo (la famiglia di runtime provided). Puoi impostare _X_AMZN_TRACE_ID per runtime personalizzati utilizzando l'intestazione di risposta Lambda-Runtime-Trace-Id dal Chiamata successiva.

    • Per le versioni di runtime Java 17 e successive, questa variabile di ambiente non viene utilizzata. Lambda archivia invece le informazioni di tracciamento nella proprietà di sistema com.amazonaws.xray.traceHeader.

  • AWS_DEFAULT_REGION— L'impostazione predefinita Regione AWS in cui viene eseguita la funzione Lambda.

  • AWS_REGION— Il Regione AWS luogo in cui viene eseguita la funzione Lambda. Se immesso, questo valore sovrascrive AWS_DEFAULT_REGION.

    • Per ulteriori informazioni sull'utilizzo delle variabili di Regione AWS ambiente con AWS SDKs, vedete AWS Region nella AWS SDKs and Tools Reference Guide.

  • AWS_EXECUTION_ENV: l'identificatore di runtime, preceduto da AWS_Lambda_, ad esempio AWS_Lambda_java8. Questa variabile di ambiente non è definita per i runtime solo per il sistema operativo (la famiglia di runtime provided).

  • AWS_LAMBDA_FUNCTION_NAME: il nome della funzione.

  • AWS_LAMBDA_FUNCTION_MEMORY_SIZE: la quantità di memoria disponibile per la funzione in MB.

  • AWS_LAMBDA_FUNCTION_VERSION: la versione della funzione in esecuzione.

  • AWS_LAMBDA_INITIALIZATION_TYPE: il tipo di inizializzazione della funzione, che è on-demand,provisioned-concurrency o snap-start. Per informazioni, consulta Configurazione della simultaneità fornita o Migliorare le prestazioni di avvio con Lambda SnapStart.

  • AWS_LAMBDA_LOG_GROUP_NAME, AWS_LAMBDA_LOG_STREAM_NAME — Il nome del gruppo e dello stream Amazon CloudWatch Logs per la funzione. Le variabili di AWS_LAMBDA_LOG_STREAM_NAME ambiente AWS_LAMBDA_LOG_GROUP_NAME e non sono disponibili nelle funzioni Lambda SnapStart .

  • AWS_ACCESS_KEY, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN: le chiavi di accesso ottenute dal ruolo di esecuzione della funzione.

  • AWS_LAMBDA_RUNTIME_API: (Runtime personalizzato) L'host e la porta dell'API di runtime.

  • LAMBDA_TASK_ROOT: il percorso del codice della funzione Lambda.

  • LAMBDA_RUNTIME_DIR: il percorso delle librerie di runtime.

Le seguenti variabili di ambiente aggiuntive non sono riservate e possono essere estese nella configurazione della funzione.

Variabili d'ambiente non riservate
  • LANG – Le impostazioni locali del runtime (en_US.UTF-8).

  • PATH: il percorso di esecuzione (/usr/local/bin:/usr/bin/:/bin:/opt/bin).

  • LD_LIBRARY_PATH: il percorso della libreria di sistema (/var/lang/lib:/lib64:/usr/lib64:$LAMBDA_RUNTIME_DIR:$LAMBDA_RUNTIME_DIR/lib:$LAMBDA_TASK_ROOT:$LAMBDA_TASK_ROOT/lib:/opt/lib).

  • NODE_PATH – (Node.js) Il percorso della libreria Node.js (/opt/nodejs/node12/node_modules/:/opt/nodejs/node_modules:$LAMBDA_RUNTIME_DIR/node_modules).

  • PYTHONPATH: (Python) il percorso della libreria Python ($LAMBDA_RUNTIME_DIR).

  • GEM_PATH – (Ruby) Il percorso della libreria Ruby ($LAMBDA_TASK_ROOT/vendor/bundle/ruby/3.3.0:/opt/ruby/gems/3.3.0).

  • AWS_XRAY_CONTEXT_MISSING – Per il tracciamento X-Ray, Lambda imposta questo valore su LOG_ERROR per evitare di generare errori di runtime dall'SDK X-Ray.

  • AWS_XRAY_DAEMON_ADDRESS – Per il tracciamento X-Ray, l'indirizzo IP e la porta del daemon X-Ray.

  • AWS_LAMBDA_DOTNET_PREJIT: (.NET) imposta questa variabile per abilitare o disabilitare le ottimizzazioni di runtime specifiche di .NET. I valori includono always, never e provisioned-concurrency. Per ulteriori informazioni, consulta Configurazione della simultaneità fornita per una funzione.

  • TZ: il fuso orario dell'ambiente (:UTC). L'ambiente di esecuzione utilizza NTP per sincronizzare l'orologio di sistema.

I valori di esempio mostrati riflettono i runtime più recenti. La presenza di variabili specifiche o dei loro valori può variare nei runtime precedenti.