

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
<a name="configuration-metadata-endpoint"></a>

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.

**Topics**
+ [Memulai](#metadata-endpoint-getting-started)
+ [Memahami Zona Ketersediaan IDs](#metadata-endpoint-az-ids)
+ [Referensi API](#metadata-endpoint-api-reference)

## Memulai
<a name="metadata-endpoint-getting-started"></a>

[Powertools untuk AWS Lambda](https://docs.aws.amazon.com/powertools/) 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:

**Example 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:

**Example 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:

**Example 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:

**Example 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.

**Example 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
<a name="metadata-endpoint-az-ids"></a>

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](https://docs.aws.amazon.com/global-infrastructure/latest/regions/az-ids.html).

**Mengonversi ID AZ ke nama AZ:**

Untuk mengonversi ID AZ ke nama AZ, gunakan Amazon EC2 API [DescribeAvailabilityZones](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html). Untuk menggunakan API ini, tambahkan `ec2:DescribeAvailabilityZones` izin ke peran eksekusi fungsi Anda.

## Referensi API
<a name="metadata-endpoint-api-reference"></a>

### Variabel-variabel lingkungan
<a name="metadata-endpoint-env-vars"></a>

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
<a name="metadata-endpoint-url"></a>

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

### Permintaan
<a name="metadata-endpoint-request"></a>

**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
<a name="metadata-endpoint-response"></a>

**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"
}
```

`AvailabilityZoneID`Bidang 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
<a name="metadata-endpoint-errors"></a>
+ **401 Tidak Sah** — `Authorization` Header tidak ada atau berisi token yang tidak valid. Verifikasi Anda lewat`Bearer ${AWS_LAMBDA_METADATA_TOKEN}`.
+ **405 Metode Tidak Diizinkan** - Metode permintaan tidak`GET`.
+ **500 Kesalahan Server Internal - Kesalahan** pemrosesan sisi server.