Menggunakan titik akhir metadata Lambda - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan titik akhir metadata Lambda

Titik akhir metadata Lambda memungkinkan fungsi Anda menemukan Availability Zone (AZ) tempat mereka berjalan, memungkinkan Anda mengoptimalkan latensi dengan merutekan ke sumber daya AZ yang sama seperti titik akhir Amazon dan ElastiCache Amazon RDS, dan menerapkan pola ketahanan AZ-aware.

Titik akhir mengembalikan metadata dalam format JSON sederhana melalui API HTTP localhost dalam lingkungan eksekusi dan dapat diakses oleh runtime dan ekstensi.

Memulai

Powertools untuk AWS Lambda menyediakan utilitas untuk mengakses titik akhir metadata Lambda di Python,, Java, dan .NET. TypeScript Utilitas menyimpan respons setelah panggilan pertama dan menangani pembatalan SnapStart cache secara otomatis.

Gunakan utilitas metadata Powertools untuk AWS Lambda atau hubungi titik akhir metadata secara langsung

Python

Instal paket Powertools:

pip install "aws-lambda-powertools"

Gunakan utilitas metadata di handler Anda:

contoh Mengambil ID AZ dengan 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

Instal paket Powertools:

npm install @aws-lambda-powertools/commons

Gunakan utilitas metadata di handler Anda:

contoh Mengambil ID AZ dengan 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

Tambahkan dependensi Powertools ke: pom.xml

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

Gunakan klien metadata di handler Anda:

contoh Mengambil ID AZ dengan 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

Instal paket Powertools:

dotnet add package AWS.Lambda.Powertools.Metadata

Gunakan kelas metadata di handler Anda:

contoh Mengambil ID AZ dengan 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

Semua runtime Lambda mendukung titik akhir metadata, termasuk runtime kustom dan gambar kontainer. Gunakan contoh berikut untuk mengakses API metadata langsung dari fungsi Anda menggunakan variabel lingkungan yang secara otomatis ditetapkan Lambda di lingkungan eksekusi.

contoh Mengakses titik akhir metadata secara langsung
# 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"

Memahami Zona Ketersediaan IDs

AZ IDs (misalnya,use1-az1) selalu merujuk ke lokasi fisik yang sama di semua AWS akun, sementara nama AZ (misalnya,us-east-1a) dapat dipetakan ke infrastruktur fisik yang berbeda di setiap AWS akun di wilayah tertentu. Untuk informasi selengkapnya, lihat AZ IDs untuk konsistensi lintas akun.

Mengonversi ID AZ ke nama AZ:

Untuk mengonversi ID AZ ke nama AZ, gunakan Amazon EC2 API DescribeAvailabilityZones. Untuk menggunakan API ini, tambahkan ec2:DescribeAvailabilityZones izin ke peran eksekusi fungsi Anda.

Referensi API

Variabel-variabel lingkungan

Lambda secara otomatis menetapkan variabel lingkungan berikut di setiap lingkungan eksekusi:

  • AWS_LAMBDA_METADATA_API— Alamat server metadata dalam format {ipv4_address}:{port} (misalnya,169.254.100.1:9001).

  • AWS_LAMBDA_METADATA_TOKEN— Token otentikasi unik untuk lingkungan eksekusi saat ini. Lambda menghasilkan token ini secara otomatis saat inisialisasi. Sertakan dalam semua permintaan API metadata.

Titik akhir

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

Permintaan

Header yang diperlukan:

  • Authorization— Nilai token dari variabel AWS_LAMBDA_METADATA_TOKEN lingkungan dengan skema Bearer:Bearer <token>. Otentikasi berbasis token ini memberikan perlindungan mendalam terhadap kerentanan Pemalsuan Permintaan Sisi Server (SSRF). Setiap lingkungan eksekusi menerima token unik yang dihasilkan secara acak saat inisialisasi.

Respons

Status: 200 OK

Tipe Konten: application/json

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

Responsnya tidak dapat diubah dalam lingkungan eksekusi. Klien harus menyimpan respons dan menghormati Cache-Control TTL. Untuk SnapStart fungsi, TTL dikurangi selama inisialisasi sehingga klien menyegarkan metadata setelah pemulihan ketika lingkungan eksekusi mungkin berada di AZ yang berbeda. Jika Anda menggunakan Powertools, caching dan SnapStart invalidasi ditangani secara otomatis.

Tubuh:

{ "AvailabilityZoneID": "use1-az1" }

AvailabilityZoneIDBidang berisi pengenal unik untuk Availability Zone tempat lingkungan eksekusi berjalan.

catatan

Bidang tambahan dapat ditambahkan ke respons di pembaruan masa depan. Klien harus mengabaikan bidang yang tidak dikenal dan tidak gagal jika bidang baru muncul.

Tanggapan kesalahan

  • 401 Tidak SahAuthorization Header tidak ada atau berisi token yang tidak valid. Verifikasi Anda lewatBearer ${AWS_LAMBDA_METADATA_TOKEN}.

  • 405 Metode Tidak Diizinkan - Metode permintaan tidakGET.

  • 500 Kesalahan Server Internal - Kesalahan pemrosesan sisi server.