View a markdown version of this page

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

Dengan titik akhir metadata Lambda, fungsi Anda dapat menemukan Availability Zone (AZ) mana mereka berjalan. Anda dapat menggunakan ini untuk mengoptimalkan latensi dengan merutekan ke sumber daya Same-AZ seperti titik akhir Amazon ElastiCache dan Amazon RDS, dan untuk 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 for AWS Lambda menyediakan utilitas untuk mengakses endpoint metadata Lambda di Python, Java TypeScript, dan .NET. Utilitas menyimpan respons setelah panggilan pertama dan menangani pembatalan SnapStart cache secara otomatis.

Gunakan utilitas metadata Powertools for AWS Lambda atau panggil 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 khusus 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 ID Zona Ketersediaan

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

Mengkonversi ID AZ ke nama AZ:

Untuk mengonversi ID AZ menjadi nama AZ, gunakan Amazon EC2 DescribeAvailabilityZones API. 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 pada 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 Pembawa:Bearer <token>. Otentikasi berbasis token ini memberikan perlindungan mendalam terhadap kerentanan Pemalsuan Per Server-Side mintaan (SSRF). Setiap lingkungan eksekusi menerima token unik yang dihasilkan secara acak pada inisialisasi.

Respons

Status: 200 OK

Content-Type: application/json

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

Responsnya tidak berubah 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 pembatalan dit SnapStart angani secara otomatis.

Tubuh:

{ "AvailabilityZoneID": "use1-az1" }

Bid AvailabilityZoneID ang berisi pengidentifikasi unik untuk Zona Ketersediaan tempat lingkungan eksekusi berjalan.

catatan

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

Tanggapan kesalahan

  • 401 Tidak Sah - Authorization Header hilang atau berisi token yang tidak valid. Pastikan Anda lewatBearer ${AWS_LAMBDA_METADATA_TOKEN}.

  • 405 Metode Tidak Diizinkan — Metode permintaan tidakGET.

  • 500 Kesalahan Server Inter nal — kesalahan Server-side pemrosesan.