Utilizzo dell'endpoint di metadati 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 dell'endpoint di metadati Lambda

L'endpoint di metadati Lambda consente alle tue funzioni di scoprire in quale zona di disponibilità (AZ) sono in esecuzione, consentendoti di ottimizzare la latenza indirizzando verso risorse Same-AZ come gli endpoint Amazon ElastiCache e Amazon RDS e di implementare modelli di resilienza compatibili con AZ.

L'endpoint restituisce i metadati in un semplice formato JSON tramite un'API HTTP localhost all'interno dell'ambiente di esecuzione ed è accessibile sia ai runtime che alle estensioni.

Nozioni di base

Powertools for AWS Lambda fornisce un'utilità per accedere all'endpoint dei metadati Lambda in Python, Java e.NET. TypeScript L'utilità memorizza nella cache la risposta dopo la prima chiamata e gestisce automaticamente l'invalidazione della cache. SnapStart

Utilizza l'utilità per i metadati Powertools for AWS Lambda o chiama direttamente l'endpoint dei metadati

Python

Installa il pacchetto Powertools:

pip install "aws-lambda-powertools"

Usa l'utilità per i metadati nel tuo gestore:

Esempio Recupero dell'ID AZ con Powertools (Python)
from aws_lambda_powertools.utilities.lambda_metadata import get_lambda_metadata def handler(event, context): metadata = get_lambda_metadata() az_id = metadata.availability_zone_id # e.g., "use1-az1" return {"az_id": az_id}
TypeScript

Installa il pacchetto Powertools:

npm install @aws-lambda-powertools/commons

Usa l'utilità per i metadati nel tuo gestore:

Esempio Recupero dell'ID AZ con Powertools () TypeScript
import { getMetadata } from '@aws-lambda-powertools/commons/utils/metadata'; const metadata = await getMetadata(); export const handler = async () => { const { AvailabilityZoneID: azId } = metadata; return azId; };
Java

Aggiungi la dipendenza Powertools al tuo: pom.xml

<dependencies> <dependency> <groupId>software.amazon.lambda</groupId> <artifactId>powertools-lambda-metadata</artifactId> <version>2.10.0</version> </dependency> </dependencies>

Usa il client di metadati nel tuo gestore:

Esempio Recupero dell'ID AZ con Powertools (Java)
import software.amazon.lambda.powertools.metadata.LambdaMetadata; import software.amazon.lambda.powertools.metadata.LambdaMetadataClient; public class App implements RequestHandler<Object, String> { @Override public String handleRequest(Object input, Context context) { LambdaMetadata metadata = LambdaMetadataClient.get(); String azId = metadata.getAvailabilityZoneId(); // e.g., "use1-az1" return "{\"azId\": \"" + azId + "\"}"; } }
.NET

Installa il pacchetto Powertools:

dotnet add package AWS.Lambda.Powertools.Metadata

Usa la classe di metadati nel tuo gestore:

Esempio Recupero dell'ID AZ con Powertools (.NET)
using AWS.Lambda.Powertools.Metadata; public class Function { public string Handler(object input, ILambdaContext context) { var azId = LambdaMetadata.AvailabilityZoneId; return $"Running in AZ: {azId}"; } }
All Runtimes

Tutti i runtime Lambda supportano l'endpoint dei metadati, inclusi i runtime personalizzati e le immagini dei contenitori. Usa l'esempio seguente per accedere all'API dei metadati direttamente dalla tua funzione utilizzando le variabili di ambiente che Lambda imposta automaticamente nell'ambiente di esecuzione.

Esempio Accesso diretto all'endpoint dei metadati
# Variables are automatically set by Lambda METADATA_ENDPOINT="http://${AWS_LAMBDA_METADATA_API}/2026-01-15/metadata/execution-environment" # Make the request RESPONSE=$(curl -s -H "Authorization: Bearer ${AWS_LAMBDA_METADATA_TOKEN}" "$METADATA_ENDPOINT") # Parse the AZ ID AZ_ID=$(echo "$RESPONSE" | jq -r '.AvailabilityZoneID') echo "Function is running in AZ ID: $AZ_ID"

Comprendere la zona di disponibilità IDs

AZ IDs (ad esempio,use1-az1) si riferisce sempre alla stessa posizione fisica in tutti gli AWS account, mentre i nomi AZ (ad esempious-east-1a) possono essere mappati a infrastrutture fisiche diverse in ciascun AWS account in determinate regioni. Per ulteriori informazioni, consulta AZ IDs per la coerenza tra account.

Conversione dell'ID AZ in un nome AZ:

Per convertire un ID AZ in un nome AZ, utilizza l'API Amazon EC2 DescribeAvailabilityZones. Per utilizzare questa API, aggiungi l'ec2:DescribeAvailabilityZonesautorizzazione al ruolo di esecuzione della funzione.

Guida di riferimento alle API

Variabili di ambiente

Lambda imposta automaticamente le seguenti variabili di ambiente in ogni ambiente di esecuzione:

  • AWS_LAMBDA_METADATA_API— L'indirizzo del server di metadati nel formato {ipv4_address}:{port} (ad esempio,169.254.100.1:9001).

  • AWS_LAMBDA_METADATA_TOKEN— Un token di autenticazione unico per l'ambiente di esecuzione corrente. Lambda genera questo token automaticamente al momento dell'inizializzazione. Includilo in tutte le richieste API di metadati.

Endpoint

GET http://${AWS_LAMBDA_METADATA_API}/2026-01-15/metadata/execution-environment

Richiesta

Intestazioni obbligatorie:

  • Authorization— Il valore del token della variabile di AWS_LAMBDA_METADATA_TOKEN ambiente con lo schema Bearer:. Bearer <token> Questa autenticazione basata su token fornisce una difesa approfondita contro le vulnerabilità SSRF (Server-Side Request Forgery). Ogni ambiente di esecuzione riceve un token unico generato casualmente al momento dell'inizializzazione.

Risposta

Stato: 200 OK

Tipo di contenuto: application/json

Controllo della cache: private, max-age=43200, immutable

La risposta è immutabile all'interno di un ambiente di esecuzione. I client devono memorizzare nella cache la risposta e rispettare il Cache-Control TTL. Per quanto riguarda SnapStart le funzioni, il TTL viene ridotto durante l'inizializzazione in modo che i client aggiornino i metadati dopo il ripristino quando l'ambiente di esecuzione può trovarsi in una AZ diversa. Se si utilizza Powertools, la memorizzazione nella cache e l'invalidazione vengono gestite automaticamente. SnapStart

Testo:

{ "AvailabilityZoneID": "use1-az1" }

Il AvailabilityZoneID campo contiene l'identificatore univoco per la zona di disponibilità in cui è in esecuzione l'ambiente di esecuzione.

Nota

Nei futuri aggiornamenti potrebbero essere aggiunti campi aggiuntivi alla risposta. I client devono ignorare i campi sconosciuti e non fallire se vengono visualizzati nuovi campi.

Risposte agli errori

  • 401 Non autorizzato: l'Authorizationintestazione è mancante o contiene un token non valido. Verifica che stai superando il test. Bearer ${AWS_LAMBDA_METADATA_TOKEN}

  • Metodo 405 non consentito: il metodo di richiesta non GET lo è.

  • 500 Errore interno del server: errore di elaborazione lato server.