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 del database, si consiglia di utilizzare AWS Secrets Manager al posto delle variabili di ambiente per archiviare le credenziali del database. Per ulteriori informazioni, consulta Utilizzo diAWS LambdaCon Amazon RDS.

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.

Configurazione delle variabili d'ambiente

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 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. Selezionare 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. Scegli la scheda Variabili di ambiente.

  3. Scegli Strumenti, quindi Mostra variabili di ambiente.

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 Impostazione della sicurezza delle variabili d'ambiente.

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.

Configurazione delle variabili di ambiente con l'API

Per gestire le variabili di ambiente con AWS CLI o AWS SDK, utilizza le seguenti operazioni API.

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=my-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:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Environment": { "Variables": { "BUCKET": "my-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:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599

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.

Recupera le variabili di ambiente

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 gli AWS SDK, consulta AWS Region nella Guida di riferimento agli AWS SDK and Tools.

  • 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à con provisioning 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 2.7, 3.6, 3.8) Il percorso della libreria Python ($LAMBDA_RUNTIME_DIR).

  • GEM_PATH – (Ruby) Il percorso della libreria Ruby ($LAMBDA_TASK_ROOT/vendor/bundle/ruby/2.5.0:/opt/ruby/gems/2.5.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: per i runtime .NET 6. .NET 7, 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.

  • 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.

Impostazione della sicurezza delle variabili d'ambiente

Per proteggere le variabili di ambiente, è possibile utilizzare la crittografia lato server per proteggere i dati inattivi e la crittografia lato client per proteggere i dati in transito.

Nota

Per aumentare la sicurezza del database, si consiglia di utilizzare AWS Secrets Manager al posto delle variabili di ambiente per memorizzare le credenziali del database. Per ulteriori informazioni, consulta Utilizzo diAWS LambdaCon Amazon RDS.

Sicurezza dei dati inattivi

Lambda fornisce sempre la crittografia lato server dei dati inattivi con un AWS KMS key. Per impostazione predefinita, Lambda utilizza un Chiave gestita da AWS. Se questo comportamento predefinito si adatta al flusso di lavoro, non è necessario impostare altro. Lambda li crea Chiave gestita da AWS nel tuo account e ne gestisce le autorizzazioni per conto tuo. AWS non ti addebita alcun costo per l'utilizzo di questa chiave.

Se preferisci, puoi invece fornire una chiave gestita AWS KMS dal cliente. È possibile eseguire questa operazione per avere il controllo sulla rotazione della chiave KMS o per soddisfare i requisiti dell'organizzazione per la gestione delle chiavi KMS. Quando si utilizza la chiave gestita dal cliente, solo gli utenti del tuo account con accesso alla chiave possono visualizzare o gestire le variabili di ambiente sulla funzione.

Le chiavi gestite dal cliente sono soggette a costi standard AWS KMS . Per ulteriori informazioni, consulta Prezzi di AWS Key Management Service.

Sicurezza in transito

Per una maggiore sicurezza, è possibile abilitare gli helper per la crittografia in transito, assicurando così che le variabili di ambiente siano crittografate lato client per la protezione in transito.

Per configurare la crittografia per le variabili di ambiente
  1. Usa AWS Key Management Service (AWS KMS) per creare qualsiasi chiave gestita dal cliente che Lambda possa utilizzare per la crittografia lato server e lato client. Per ulteriori informazioni, consulta Creazione di chiavi nella AWS Key Management Service Guida per gli sviluppatori di .

  2. Utilizzando la console Lambda, accedere alla pagina Edit environment variables (Modifica delle variabili di ambiente).

    1. Aprire la pagina Funzioni della console Lambda.

    2. Scegliere una funzione.

    3. Scegliere Configurazione, quindi scegliere Variabili di ambiente nella barra di navigazione sinistra.

    4. Nella sezione Variabili di ambiente, scegliere Modifica.

    5. Espandere Encryption configuration (Configurazione della crittografia).

  3. (Facoltativo) Abilita gli helper di crittografia della console per utilizzare la crittografia lato client per proteggere i dati in transito.

    1. In Crittografia in transito, scegliere Enable helpers for encryption in transit (Abilita helper per la crittografia in transito).

    2. Per ogni variabile di ambiente per cui si desidera abilitare gli helper di crittografia della console, scegliere Encrypt (Crittografia) accanto alla variabile di ambiente.

    3. In AWS KMS key Per crittografare in transito, scegli una chiave gestita dal cliente che hai creato all'inizio di questa procedura.

    4. Scegliere Execution role policy (Policy del ruolo di esecuzione) e copiare la policy. Questa policy concede l'autorizzazione al ruolo di esecuzione della funzione per decrittare le variabili di ambiente.

      Salvare la policy da utilizzare nell'ultima fase di questa procedura.

    5. Aggiungi il codice alla funzione che decritta le variabili di ambiente. Per visualizzare un esempio, scegli Decritta frammento di segreto.

  4. (Facoltativo) Specifica la chiave gestita dal cliente per la crittografia dei dati inattivi.

    1. Scegliere Use a customer master key (Utilizza una chiave master del cliente).

    2. Scegliere una chiave gestita dal cliente creata all'inizio di questa procedura.

  5. Selezionare Salva.

  6. Impostare le autorizzazioni.

    Se stai utilizzando una chiave gestita dal cliente con crittografia lato server, concedi le autorizzazioni a qualsiasi utente o ruolo che desideri possa visualizzare o gestire le variabili di ambiente sulla funzione. Per ulteriori informazioni, consulta Gestione delle autorizzazioni per la chiave KMS di crittografia lato server.

    Se si abilita la crittografia lato client per la sicurezza in transito, la funzione richiede l'autorizzazione per chiamare l'operazione API kms:Decrypt. Aggiungere la policy salvata in precedenza in questa procedura al ruolo di esecuzione della funzione.

Gestione delle autorizzazioni per la chiave KMS di crittografia lato server

Non sono necessarie AWS KMS autorizzazioni affinché l'utente o il ruolo di esecuzione della funzione utilizzino la chiave di crittografia predefinita. Per utilizzare una chiave gestita dal cliente, occorre l'autorizzazione all'utilizzo della chiave. Lambda utilizza queste autorizzazioni per creare una concessione sulla chiave. Questo consente a Lambda di usarla per la crittografia.

  • kms:ListAliases – Per visualizzare i tasti nella console Lambda.

  • kms:CreateGrant, kms:Encrypt – Per configurare una chiave gestita dal cliente su una funzione.

  • kms:Decrypt – Per visualizzare e gestire le variabili di ambiente crittografate con la chiave gestita dal cliente.

Puoi ottenere queste autorizzazioni dalla tua politica di autorizzazioni basata sulle risorse Account AWS o sulla politica delle autorizzazioni basata sulle risorse di una chiave. ListAliasesè fornito dalle policy gestite per Lambda. Le policy della chiave concedono le autorizzazioni rimanenti agli utenti del gruppo Key users (Utenti chiave).

Gli utenti senza autorizzazioni Decrypt possono comunque gestire le funzioni, ma non possono visualizzare le variabili di ambiente o gestirle nella console Lambda. Per impedire a un utente di visualizzare le variabili di ambiente, aggiungere un'istruzione alle autorizzazioni dell'utente che nega l'accesso alla chiave predefinita, a una chiave gestita dal cliente o a tutte le chiavi.

Esempio Policy IAM: negano l'accesso in base all'ARN della chiave
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Deny", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/3be10e2d-xmpl-4be4-bc9d-0405a71945cc" } ] }

          Messaggio di errore per l'utente senza decrittografare le autorizzazioni nella console Lambda.

Per informazioni dettagliate sulla gestione delle autorizzazioni delle chiavi, consulta la pagina Utilizzo delle policy delle chiavi in AWS KMS nella Guida per gli sviluppatori di AWS Key Management Service .

Codice e modelli di esempio

Le applicazioni di esempio presenti nell' GitHub archivio di questa guida dimostrano l'uso delle variabili di ambiente nel codice di funzione e AWS CloudFormation nei modelli.

Applicazioni di esempio
  • Funzione vuota: crea una funzione di base che mostri l'uso della registrazione, delle variabili di ambiente, del AWS X-Ray tracciamento, dei livelli, dei test unitari e dell'SDK. AWS

  • RDS MySQL: crea un VPC e un'istanza database di Amazon Relational Database Service (Amazon RDS) in un modello, con una password memorizzata in Secrets Manager. Nel modello dell'applicazione, importa i dettagli del database dallo stack VPC, leggi la password da Secrets Manager e passa tutta la configurazione della connessione alla funzione nelle variabili di ambiente.