View a markdown version of this page

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

Con l'endpoint di metadati Lambda, le tue funzioni possono scoprire in quale zona di disponibilità (AZ) sono in esecuzione. Puoi utilizzarlo per ottimizzare la latenza indirizzando verso risorse della stessa AZ come gli endpoint Amazon ElastiCache e Amazon RDS e per implementare modelli di resilienza. AZ-aware

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à di 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 il seguente esempio 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"

Comprensione degli ID delle zone di disponibilità

Gli ID AZ (ad esempiouse1-az1) si riferiscono sempre alla stessa posizione fisica in tutti AWS gli account, mentre i nomi AZ (ad esempious-east-1a) potrebbero essere associati a infrastrutture fisiche diverse in ciascun AWS account in determinate regioni. Per ulteriori informazioni, consulta ID AZ per la coerenza tra più account.

Conversione dell'ID AZ in 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 tua 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 univoco 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 derivante dalla variabile di AWS_LAMBDA_METADATA_TOKEN ambiente con lo schema Bearer:. Bearer <token> Questa autenticazione basata su token fornisce una protezione approfondita contro le vulnerabilità di Server-Side Request Forgery (SSRF). Ogni ambiente di esecuzione riceve un token univoco generato casualmente al momento dell'inizializzazione.

Risposta

Stato: 200 OK

Content-Type: application/json

Cache-Control: private, max-age=43200, immutable

La risposta è immutabile all'interno di un ambiente di esecuzione. I client devono memorizzare la risposta nella cache 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 potrebbe trovarsi in una AZ diversa. Se si utilizza Powertools, la memorizzazione nella cache e l'invalidazione vengono gestiti automaticamente. SnapStart

Testo:

{ "AvailabilityZoneID": "use1-az1" }

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

Nota

Ulteriori campi potrebbero essere aggiunti alla risposta negli aggiornamenti futuri. 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 di aver superato il test. Bearer ${AWS_LAMBDA_METADATA_TOKEN}

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

  • Errore interno del server 500: errore di Server-side elaborazione.