

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

# Menambah fungsi Lambda menggunakan ekstensi Lambda
<a name="lambda-extensions"></a>

Anda dapat menggunakan ekstensi Lambda untuk memperbanyak fungsi Lambda. Misalnya, gunakan ekstensi Lambda untuk mengintegrasikan fungsi Anda dengan alat bantu pemantauan, pengamatan, keamanan, dan pengaturan pilihan Anda. Anda dapat memilih dari serangkaian luas alat yang disediakan oleh [AWS Lambda Mitra](https://aws.amazon.com/lambda/partners/), atau Anda dapat [membuat ekstensi Lambda Anda sendiri](runtimes-extensions-api.md).

Lambda mendukung ekstensi eksternal dan internal. Ekstensi eksternal berjalan sebagai proses independen di lingkungan eksekusi dan terus berjalan setelah invokasi fungsi diproses sepenuhnya. Karena ekstensi berjalan sebagai proses terpisah, Anda dapat menulisnya dalam bahasa yang berbeda dari fungsi. Semua ekstensi [Runtime Lambda](lambda-runtimes.md) dukungan.

Ekstensi internal berjalan sebagai bagian dari proses runtime. Fungsi Anda mengakses ekstensi internal dengan menggunakan skrip pembungkus atau mekanisme dalam proses seperti `JAVA_TOOL_OPTIONS`. Untuk informasi selengkapnya, lihat [Memodifikasi lingkungan waktu pengoperasian](runtimes-modify.md).

Anda dapat menambahkan ekstensi ke fungsi menggunakan konsol Lambda, layanan AWS Command Line Interface (AWS CLI), atau infrastruktur sebagai kode (IAc) dan alat seperti CloudFormation, AWS Serverless Application Model (AWS SAM), dan Terraform.

Anda dikenakan biaya untuk waktu eksekusi yang digunakan oleh ekstensi (dengan penambahan 1 ms). Tidak ada biaya untuk menginstal ekstensi Anda sendiri. Untuk informasi harga ekstensi selengkapnya, lihat [AWS Lambda Harga](https://aws.amazon.com/lambda/pricing/). Untuk informasi harga ekstensi mitra, lihat situs web mitra tersebut. Lihat [AWS Lambda mitra ekstensi](extensions-api-partners.md) daftar ekstensi mitra resmi.

**Topics**
+ [

## Lingkungan eksekusi
](#using-extensions-env)
+ [

## Dampak pada performa dan sumber daya
](#using-extensions-reg)
+ [

## Izin
](#using-extensions-permissions)
+ [

# Mengkonfigurasi ekstensi Lambda
](extensions-configuration.md)
+ [

# AWS Lambda mitra ekstensi
](extensions-api-partners.md)
+ [

# Menggunakan API Ekstensi Lambda untuk membuat ekstensi
](runtimes-extensions-api.md)
+ [

# Mengakses data telemetri real-time untuk ekstensi menggunakan API Telemetri
](telemetry-api.md)

## Lingkungan eksekusi
<a name="using-extensions-env"></a>

Lambda memanggil fungsi dalam [lingkungan eksekusi](lambda-runtime-environment.md), yang menyediakan lingkungan runtime yang aman dan terisolasi. Lingkungan eksekusi mengelola sumber daya yang diperlukan untuk menjalankan fungsi Anda dan menyediakan dukungan siklus hidup untuk runtime dan ekstensi fungsi.

Siklus hidup lingkungan eksekusi mencakup fase-fase berikut:
+ `Init`: Dalam fase ini, Lambda membuat atau membatalkan pembekuan lingkungan eksekusi dengan sumber daya terkonfigurasi, mengunduh kode untuk fungsi dan semua lapisan, menginisialisasi ekstensi apa pun, menginisialisasi runtime, lalu menjalankan kode inisialisasi fungsi (yaitu kode di luar handler utama). Fase `Init` terjadi saat invokasi pertama, atau sebelum invokasi fungsi jika Anda telah mengaktifkan [konkurensi terprovisi](provisioned-concurrency.md).

  Fase `Init` dibagi ke dalam tiga subfase: `Extension init`, `Runtime init`, dan `Function init`. Subfase ini memastikan semua ekstensi dan runtime menyelesaikan tugas penyiapam mereka sebelum kode fungsi berjalan.

  Ketika [Lambda SnapStart](snapstart.md) diaktifkan, `Init` fase terjadi ketika Anda mempublikasikan versi fungsi. Lambda menyimpan snapshot memori dan status disk dari lingkungan eksekusi yang diinisialisasi, mempertahankan snapshot terenkripsi, dan menyimpannya dalam cache untuk akses latensi rendah. Jika Anda memiliki [hook runtime](snapstart-runtime-hooks.md) sebelum-checkpoint, maka kode berjalan di akhir fase. `Init`
+ `Restore`(SnapStart only): Saat Anda pertama kali memanggil [SnapStart](snapstart.md)fungsi dan saat fungsi meningkat, Lambda melanjutkan lingkungan eksekusi baru dari snapshot yang bertahan alih-alih menginisialisasi fungsi dari awal. Jika Anda memiliki [hook runtime](snapstart-runtime-hooks.md) after-restore, kode berjalan di akhir fase. `Restore` Anda dikenakan biaya untuk durasi kait runtime setelah pemulihan. Runtime harus dimuat dan kait runtime setelah pemulihan harus selesai dalam batas waktu tunggu (10 detik). Jika tidak, Anda akan mendapatkan SnapStartTimeoutException. Ketika `Restore` fase selesai, Lambda memanggil fungsi handler (the). [Fase invokasi](lambda-runtime-environment.md#runtimes-lifecycle-invoke)
+ `Invoke`Dalam fase ini, Lambda memicu handler fungsi. Setelah fungsi berjalan hingga selesai, Lambda bersiap untuk menangani invokasi fungsi lain.
+ `Shutdown`: Fase ini dipicu jika fungsi Lambda tidak menerima invokasi apa pun selama jangka waktu tertentu. Di fase `Shutdown`, Lambda menonaktifkan runtime, memberi tahu ekstensi agar mereka berhenti dengan bersih, lalu menghapus lingkungan. Lambda mengirim peristiwa `Shutdown` ke setiap ekstensi, yang memberi tahu ekstensi bahwa lingkungan akan dimatikan.

Selama fase `Init`, Lambda mengekstrak lapisan yang berisi ekstensi ke direktori `/opt` di lingkungan eksekusi. Lambda mencari ekstensi di direktori `/opt/extensions/`, menginterpretasikan setiap file sebagai bootstrap yang dapat dijalankan untuk meluncurkan ekstensi, dan memulai semua ekstensi secara paralel.

## Dampak pada performa dan sumber daya
<a name="using-extensions-reg"></a>

Ukuran jumlah ekstensi fungsi Anda dipertimbangkan untuk batasan ukuran paket deployment. Untuk arsip file .zip, ukuran total fungsi tanpa zip, dan semua ekstensi tidak boleh melebihi ukuran paket deployment tanpa zip sebesar 250 MB.

Ekstensi dapat memengaruhi performa fungsi Anda karena mereka berbagi sumber daya fungsi seperti CPU, memori, dan penyimpanan. Sebagai contoh, jika ekstensi melakukan operasi yang intensif-komputasi, Anda dapat melihat durasi eksekusi fungsi Anda meningkat.

Setiap ekstensi harus melengkapi inisialisasinya sebelum Lambda mengaktifkan fungsi. Oleh karena itu, ekstensi yang menggunakan waktu inisialisasi yang signifikan dapat meningkatkan latensi invokasi fungsi.

Untuk mengukur waktu ekstra yang diperlukan ekstensi setelah eksekusi fungsi, Anda dapat menggunakan [metrik fungsi](monitoring-metrics.md) `PostRuntimeExtensionsDuration`. Untuk mengukur peningkatan memori yang digunakan, Anda dapat menggunakan metrik `MaxMemoryUsed`. Untuk memahami dampak dari ekstensi tertentu, Anda dapat menjalankan versi yang berbeda dari fungsi Anda secara berdampingan.

**catatan**  
`MaxMemoryUsed`metrik adalah salah satu [Metrik yang dikumpulkan oleh Lambda](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Lambda-Insights-metrics.html) Insights dan bukan metrik asli Lambda.

## Izin
<a name="using-extensions-permissions"></a>

Ekstensi memiliki akses ke sumber daya yang sama dengan fungsi. Karena ekstensi dieksekusi dalam lingkungan yang sama dengan fungsi, izin dibagikan antara fungsi dan ekstensi.

Untuk arsip file.zip, Anda dapat membuat CloudFormation templat untuk menyederhanakan tugas melampirkan konfigurasi ekstensi yang sama—termasuk izin AWS Identity and Access Management (IAM) — ke beberapa fungsi.

# Mengkonfigurasi ekstensi Lambda
<a name="extensions-configuration"></a>

## Mengonfigurasi ekstensi (arsip file .zip)
<a name="using-extensions-config"></a>

Anda dapat menambahkan ekstensi ke fungsi Anda sebagai [lapisan Lambda](chapter-layers.md). Dengan menggunakan lapisan, Anda dapat berbagi ekstensi di seluruh organisasi Anda atau ke seluruh komunitas developer Lambda. Anda dapat menambahkan satu ekstensi atau lebih ke satu lapisan. Anda dapat mendaftarkan hingga 10 ekstensi untuk satu fungsi.

Anda menambahkan ekstensi ke fungsi Anda menggunakan metode yang sama seperti yang Anda lakukan untuk setiap lapisan. Untuk informasi selengkapnya, lihat [Mengelola dependensi Lambda dengan lapisan](chapter-layers.md).

**Menambahkan ekstensi ke fungsi Anda (konsol)**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih fungsi.

1. Pilih tab **Kode** jika belum dipilih.

1. Di bagian **Lapisan**, pilih **Edit**.

1. Untuk **Pilih lapisan**, pilih **Tentukan ARN**.

1. Untuk **Tentukan ARN**, masukkan Amazon Resource Name (ARN) dari lapisan ekstensi.

1. Pilih **Tambahkan**.

## Menggunakan ekstensi dalam gambar kontainer
<a name="invocation-extensions-images"></a>

Anda dapat menambahkan ekstensi ke [gambar kontainer](images-create.md) Anda. Pengaturan gambar kontainer ENTRYPOINT menentukan proses utama untuk fungsi. Konfigurasi pengaturan ENTRYPOINT di Dockerfile, atau sebagai penimpa dalam konfigurasi fungsi. 

Anda dapat menjalankan beberapa proses dalam satu kontainer. Lambda mengelola siklus hidup proses utama dan proses tambahan. Lambda menggunakan[API Ekstensi](runtimes-extensions-api.md)untuk mengelola siklus hidup ekstensi. 

### Contoh: Menambahkan ekstensi eksternal
<a name="extensions-images-ex1"></a>

Ekstensi eksternal berjalan dalam proses terpisah dari fungsi Lambda. Lambda memulai proses untuk setiap ekstensi di direktori `/opt/extensions/`. Lambda menggunakan API Ekstensi untuk mengelola siklus hidup ekstensi. Setelah fungsi berjalan sampai selesai, Lambda mengirimkan peristiwa `Shutdown` untuk setiap ekstensi eksternal.

**Example dari menambahkan ekstensi eksternal ke gambar dasar Python**  

```
FROM public.ecr.aws/lambda/python:3.11

# Copy and install the app
COPY /app /app
WORKDIR /app
RUN pip install -r requirements.txt

# Add an extension from the local directory into /opt/extensions
ADD my-extension.zip /opt/extensions
CMD python ./my-function.py
```

## Langkah selanjutnya
<a name="using-extensions-next"></a>

Untuk mempelajari selengkapnya tentang ekstensi, kami merekomendasikan sumber daya berikut:
+ Untuk contoh kerja dasar, lihat [Membangun Ekstensi untuk AWS Lambda](https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/) di AWS Compute Blog.
+ Untuk informasi tentang ekstensi yang disediakan AWS Lambda Partner, lihat [Memperkenalkan AWS Lambda Ekstensi](https://aws.amazon.com/blogs/compute/introducing-aws-lambda-extensions-in-preview/) di Blog AWS Komputasi.
+ Untuk melihat contoh ekstensi dan skrip pembungkus yang tersedia, lihat [AWS Lambda Ekstensi](https://github.com/aws-samples/aws-lambda-extensions) pada repositori AWS Sampel GitHub .

# AWS Lambda mitra ekstensi
<a name="extensions-api-partners"></a>

AWS Lambda telah bermitra dengan beberapa entitas pihak ketiga untuk menyediakan ekstensi untuk diintegrasikan dengan fungsi Lambda Anda. Daftar berikut merinci ekstensi pihak ketiga yang siap Anda gunakan kapan saja.
+ [https://docs.appdynamics.com/display/PRO20X/Use+the+AppDynamics+AWS+Lambda+Extension+to+Instrument+Serverless+APM+at+Runtime](https://docs.appdynamics.com/display/PRO20X/Use+the+AppDynamics+AWS+Lambda+Extension+to+Instrument+Serverless+APM+at+Runtime)— Menyediakan instrumentasi otomatis fungsi Node.js atau Python Lambda, memberikan visibilitas dan peringatan pada kinerja fungsi.
+ [https://axiom.co/docs/apps/lambda](https://axiom.co/docs/apps/lambda)— Menyediakan dasbor untuk memantau kinerja fungsi Lambda dan metrik tingkat sistem agregat.
+ [https://docs.datadoghq.com/serverless/datadog_lambda_library/extension/](https://docs.datadoghq.com/serverless/datadog_lambda_library/extension/)— Menyediakan visibilitas real-time yang komprehensif ke aplikasi tanpa server Anda melalui penggunaan metrik, jejak, dan log.
+ [https://www.dynatrace.com/support/help/technology-support/cloud-platforms/amazon-web-services/integrations/deploy-oneagent-as-lambda-extension/](https://www.dynatrace.com/support/help/technology-support/cloud-platforms/amazon-web-services/integrations/deploy-oneagent-as-lambda-extension/)— Memberikan visibilitas ke dalam jejak dan metrik, dan memanfaatkan AI untuk deteksi kesalahan otomatis dan analisis akar penyebab di seluruh tumpukan aplikasi.
+ [https://www.elastic.co/guide/en/apm/agent/nodejs/current/lambda.html](https://www.elastic.co/guide/en/apm/agent/nodejs/current/lambda.html)Menyediakan Application Performance Monitoring (APM) untuk mengidentifikasi dan menyelesaikan masalah akar penyebab menggunakan jejak, metrik, dan log yang berkorelasi.
+ [https://docs.epsagon.com/docs/environment-monitoring/lambda/intro](https://docs.epsagon.com/docs/environment-monitoring/lambda/intro)— Mendengarkan acara pemanggilan, menyimpan jejak, dan mengirimkannya secara paralel dengan eksekusi fungsi Lambda.
+ [https://docs.fastly.com/signalsciences/install-guides/paas/aws-lambda/](https://docs.fastly.com/signalsciences/install-guides/paas/aws-lambda/)— Melindungi fungsi Lambda Anda dari aktivitas mencurigakan, seperti serangan gaya injeksi, pengambilalihan akun melalui isian kredenal, bot berbahaya, dan penyalahgunaan API.
+ [https://learn.hashicorp.com/tutorials/vault/aws-lambda](https://learn.hashicorp.com/tutorials/vault/aws-lambda)— Mengelola rahasia dan membuatnya tersedia bagi pengembang untuk digunakan dalam kode fungsi, tanpa membuat fungsi Vault sadar.
+ [https://docs.honeycomb.io/getting-data-in/integrations/aws/aws-lambda/](https://docs.honeycomb.io/getting-data-in/integrations/aws/aws-lambda/)— Alat observabilitas untuk men-debug tumpukan aplikasi Anda.
+ [https://docs.lumigo.io/docs/lambda-extensions](https://docs.lumigo.io/docs/lambda-extensions)— Profil Lambda memanggil fungsi dan mengumpulkan metrik untuk memecahkan masalah di lingkungan tanpa server dan layanan mikro.
+ [https://docs.newrelic.com/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/monitoring-aws-lambda-serverless-monitoring](https://docs.newrelic.com/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/monitoring-aws-lambda-serverless-monitoring)— Berjalan bersama fungsi Lambda, secara otomatis mengumpulkan, meningkatkan, dan mengangkut telemetri ke platform observabilitas terpadu New Relic.
+ [https://docs.sedai.io/get-started/platform/optimization/aws/lambda](https://docs.sedai.io/get-started/platform/optimization/aws/lambda)— Platform manajemen cloud otonom, didukung oleh AI/ML, yang memberikan optimasi berkelanjutan untuk tim operasi cloud untuk memaksimalkan penghematan biaya cloud, kinerja, dan ketersediaan dalam skala besar.
+ [https://docs.sentry.io/platforms/javascript/guides/aws-lambda/](https://docs.sentry.io/platforms/javascript/guides/aws-lambda/)— Mendiagnosis, memperbaiki, dan mengoptimalkan kinerja fungsi Lambda.
+ [https://www.site24x7.com/help/aws/lambda-execution-logs.html](https://www.site24x7.com/help/aws/lambda-execution-logs.html)— Mencapai observabilitas waktu nyata ke lingkungan Lambda Anda
+ [https://github.com/signalfx/splunk-otel-lambda](https://github.com/signalfx/splunk-otel-lambda)— Mengumpulkan metrik resolusi tinggi, latensi rendah untuk pemantauan fungsi Lambda yang efisien dan efektif.
+ [https://help.sumologic.com/03Send-Data/Collect-from-Other-Data-Sources/Collect_AWS_Lambda_Logs_using_an_Extension](https://help.sumologic.com/03Send-Data/Collect-from-Other-Data-Sources/Collect_AWS_Lambda_Logs_using_an_Extension)— Memberikan visibilitas ke dalam kesehatan dan kinerja aplikasi tanpa server.
+ [Salt Security](https://salt.security/press-releases/salt-security-becomes-the-first-and-only-api-security-vendor-to-join-aws-lambda-ready-program?) — Menyederhanakan tata kelola postur API dan keamanan API untuk fungsi Lambda melalui pengaturan otomatis dan dukungan untuk runtime yang beragam.

## AWS ekstensi terkelola
<a name="aws-managed-extensions"></a>

AWS menyediakan ekstensi terkelola sendiri, termasuk:
+ [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-integration-lambda-extensions.html#appconfig-integration-lambda-extensions-enabling)— Gunakan bendera fitur dan data dinamis untuk memperbarui fungsi Lambda Anda. Anda juga dapat menggunakan ekstensi ini untuk memperbarui konfigurasi dinamis lainnya, seperti pelambatan operasi dan penyetelan. 
+ [Amazon CodeGuru Profiler](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/python-lambda-layers.html) — Meningkatkan kinerja aplikasi dan mengurangi biaya dengan menentukan baris kode aplikasi yang paling mahal dan memberikan rekomendasi untuk meningkatkan kode.
+ [CloudWatch Lambda Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Lambda-Insights.html) — Pantau, pecahkan masalah, dan optimalkan kinerja fungsi Lambda Anda melalui dasbor otomatis.
+ [AWS Distro for OpenTelemetry (ADOT)](https://aws.amazon.com/otel) - Memungkinkan fungsi untuk mengirim data jejak ke layanan AWS pemantauan seperti AWS X-Ray, dan ke tujuan yang mendukung OpenTelemetry seperti Honeycomb dan Lightstep.
+ [AWS Parameter dan Rahasia](with-secrets-manager.md) - Aman mengambil parameter dari AWS Systems Manager Parameter Store dan rahasia dari dalam fungsi AWS Secrets Manager Lambda.

Untuk contoh ekstensi tambahan dan proyek demo, lihat [AWS Lambda Ekstensi](https://github.com/aws-samples/aws-lambda-extensions).

# Menggunakan API Ekstensi Lambda untuk membuat ekstensi
<a name="runtimes-extensions-api"></a>

Penulis fungsi Lambda menggunakan ekstensi untuk mengintegrasikan Lambda Anda dengan alat pilihan mereka untuk pemantauan, pengamatan, keamanan, dan pengaturan. Penulis fungsi dapat menggunakan ekstensi dari AWS, [AWS Mitra](extensions-api-partners.md), dan proyek sumber terbuka. Untuk informasi selengkapnya tentang penggunaan ekstensi, lihat [Memperkenalkan AWS Lambda Ekstensi](https://aws.amazon.com/blogs/aws/getting-started-with-using-your-favorite-operational-tools-on-aws-lambda-extensions-are-now-generally-available/) di Blog AWS Komputasi. Bagian ini menjelaskan cara menggunakan API Ekstensi Lambda, siklus hidup lingkungan eksekusi Lambda, dan referensi API Ekstensi Lambda. 

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/telemetry-api-concept-diagram.png)


Sebagai penulis ekstensi, Anda dapat menggunakan API Ekstensi Lambda untuk mengintegrasikan secara mendalam ke [Lingkungan eksekusi](lambda-runtime-environment.md) Lambda. Ekstensi Anda dapat mendaftar untuk fungsi dan peristiwa siklus hidup lingkungan eksekusi. Menanggapi peristiwa ini, Anda dapat memulai proses baru, menjalankan logika, dan mengontrol serta berpartisipasi dalam semua fase siklus hidup Lambda: inisialisasi, invokasi, dan penonaktifan. Selain itu, Anda dapat menggunakan [API Log Runtime](runtimes-logs-api.md) untuk menerima aliran log.

Ekstensi berjalan sebagai proses independen di lingkungan eksekusi dan dapat terus berjalan setelah invokasi fungsi diproses sepenuhnya. Karena ekstensi berjalan sebagai proses, Anda dapat menulisnya dalam bahasa yang berbeda dari fungsi. Sebaiknya terapkan ekstensi eksternal menggunakan bahasa terkompilasi. Dalam hal ini, ekstensi adalah biner mandiri yang kompatibel dengan runtime yang didukung. Semua ekstensi [Runtime Lambda](lambda-runtimes.md) dukungan. Jika Anda menggunakan bahasa nonkompilasi, pastikan Anda memasukkan waktu pengoperasian yang kompatibel di ekstensi. 

Lambda juga mendukung *ekstensi internal*. Ekstensi internal berjalan sebagai thread terpisah dari proses runtime. Runtime memulai dan menghentikan ekstensi internal. Cara alternatif untuk berintegrasi dengan lingkungan Lambda adalah dengan menggunakan [variabel lingkungan dan skrip wrapper](runtimes-modify.md) khusus bahasa. Anda dapat menggunakan ini untuk mengonfigurasi lingkungan runtime dan memodifikasi perilaku startup proses runtime.

Anda dapat menambahkan ekstensi ke fungsi dengan dua cara. Untuk fungsi yang di-deploy sebagai[arsip file .zip](configuration-function-zip.md), Anda men-deploy ekstensi sebagai [lapisan](chapter-layers.md). Untuk fungsi yang didefinisikan sebagai gambar kontainer, Anda menambahkan [ekstensi](extensions-configuration.md#invocation-extensions-images) ke gambar kontainer Anda.

**catatan**  
Misalnya ekstensi dan skrip pembungkus, lihat [AWS Lambda Ekstensi](https://github.com/aws-samples/aws-lambda-extensions) pada repositori AWS Sampel GitHub .

**Topics**
+ [

## Siklus hidup lingkungan eksekusi Lambda
](#runtimes-extensions-api-lifecycle)
+ [

## Referensi API ekstensi
](#runtimes-extensions-registration-api)

## Siklus hidup lingkungan eksekusi Lambda
<a name="runtimes-extensions-api-lifecycle"></a>

Siklus hidup lingkungan eksekusi mencakup fase-fase berikut:
+ `Init`: Dalam fase ini, Lambda membuat atau membatalkan pembekuan lingkungan eksekusi dengan sumber daya terkonfigurasi, mengunduh kode untuk fungsi dan semua lapisan, menginisialisasi ekstensi apa pun, menginisialisasi runtime, lalu menjalankan kode inisialisasi fungsi (yaitu kode di luar handler utama). Fase `Init` terjadi saat invokasi pertama, atau sebelum invokasi fungsi jika Anda telah mengaktifkan [konkurensi terprovisi](provisioned-concurrency.md).

  Fase `Init` dibagi ke dalam tiga subfase: `Extension init`, `Runtime init`, dan `Function init`. Subfase ini memastikan semua ekstensi dan runtime menyelesaikan tugas penyiapam mereka sebelum kode fungsi berjalan.
+ `Invoke`Dalam fase ini, Lambda memicu handler fungsi. Setelah fungsi berjalan hingga selesai, Lambda bersiap untuk menangani invokasi fungsi lain.
+ `Shutdown`: Fase ini dipicu jika fungsi Lambda tidak menerima invokasi apa pun selama jangka waktu tertentu. Di fase `Shutdown`, Lambda menonaktifkan runtime, memberi tahu ekstensi agar mereka berhenti dengan bersih, lalu menghapus lingkungan. Lambda mengirim kejadian `Shutdown` ke setiap ekstensi, yang memberi tahu ekstensi bahwa lingkungan akan dimatikan.

Setiap fase dimulai dengan peristiwa dari Lambda ke runtime dan ke semua ekstensi terdaftar. Waktu pengoperasian dan setiap ekstensi memberi sinyal penyelesaian dengan mengirimkan permintaan API `Next`. Lambda membekukan lingkungan eksekusi saat waktu proses telah selesai dan tidak ada kejadian yang tertunda.

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/Overview-Full-Sequence.png)


 

**Topics**
+ [

### Fase inisialisasi
](#runtimes-extensions-api-reg)
+ [

### Fase invokasi
](#runtimes-lifecycle-extensions-invoke)
+ [

### Fase pematian
](#runtimes-lifecycle-extensions-shutdown)
+ [

### Izin dan konfigurasi
](#runtimes-extensions-registration-api-e)
+ [

### Penanganan kegagalan
](#runtimes-extensions-api-failure)
+ [

### Pemecahan masalah ekstensi
](#runtimes-extensions-api-trbl)

### Fase inisialisasi
<a name="runtimes-extensions-api-reg"></a>

Selama fase `Extension init`, setiap ekstensi perlu mendaftarkan dengan Lambda untuk menerima kejadian. Lambda menggunakan nama file ekstensi lengkap untuk memvalidasi bahwa ekstensi telah menyelesaikan sekuens bootstrap. Oleh karena itu, tiap panggilan API `Register` harus menyertakan header `Lambda-Extension-Name` dengan nama ekstensi file lengkap.

Anda dapat mendaftarkan hingga 10 ekstensi untuk satu fungsi. Batasan ini ditegakkan melalui panggilan API `Register`.

Setelah setiap ekstensi mendaftar, Lambda memulai fase `Runtime init`. Proses runtime memanggil `functionInit` untuk memulai fase `Function init`.

Fase `Init` selesai setelah waktu pengoperasian dan setiap ekstensi terdaftar menunjukkan penyelesaian dengan mengirim permintaan API `Next`.

**catatan**  
Ekstensi dapat menyelesaikan inisialisasinya dalam fase `Init` kapan pun.

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/Init-Phase.png)


### Fase invokasi
<a name="runtimes-lifecycle-extensions-invoke"></a>

Saat fungsi Lambda diinvokasi untuk menanggapi permintaan API `Next`, Lambda mengirim kejadian `Invoke` ke waktu pengoperasian dan tiap ekstensi yang terdaftar untuk kejadian `Invoke`.

**catatan**  
**Instans Terkelola Lambda: Ekstensi untuk fungsi Instans** Terkelola Lambda tidak dapat mendaftar untuk acara tersebut. `Invoke` Karena Instans Terkelola Lambda mendukung pemanggilan bersamaan dalam satu lingkungan eksekusi, acara tidak didukung. `Invoke` Ekstensi hanya dapat mendaftar untuk `Shutdown` acara tersebut. Jika Anda perlu melacak kapan pemanggilan dimulai dan selesai, gunakan acara `platform.report` platform melalui API [Telemetri](telemetry-api.md).

Selama invokasi, ekstensi eksternal berjalan secara paralel dengan fungsi. Ekstensi ini juga terus berjalan setelah fungsi selesai. Ini memungkinkan Anda menangkap informasi diagnostik atau mengirim log, metrik, dan jejak ke lokasi pilihan Anda.

Setelah menerima respon fungsi dari runtime, Lambda mengembalikan respon ke klien, bahkan jika ekstensi masih berjalan.

Fase `Invoke` berakhir ketika waktu pengoperasian dan semua ekstensi menandakan bahwa ekstensi selesai dengan mengirim permintaan API `Next`. 

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/Invoke-Phase.png)


**Muatan peristiwa**: Peristiwa yang dikirim ke runtime (dan fungsi Lambda) memuat seluruh permintaan, header (seperti `RequestId`), dan muatan. Kejadian yang dikirim ke setiap ekstensi berisi metadata yang menjelaskan konten kejadian. Peristiwa siklus hidup ini mencakup tipe peristiwa, waktu saat waktu fungsi habis (`deadlineMs`), `requestId`, Amazon Resource Name (ARN) yang dipanggil fungsi, dan header pelacakan.

Ekstensi yang ingin mengakses isi kejadian fungsi dapat menggunakan SDK yang berjalan dalam waktu pengoperasian dan berkomunikasi dengan ekstensi. Pengembang fungsi menggunakan SDK dalam waktu pengoperasian untuk mengirim muatan ke ekstensi saat fungsi diinvokasi.

Berikut adalah contoh muatan:

```
{
    "eventType": "INVOKE",
    "deadlineMs": 676051,
    "requestId": "3da1f2dc-3222-475e-9205-e2e6c6318895",
    "invokedFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:ExtensionTest",
    "tracing": {
        "type": "X-Amzn-Trace-Id",
        "value": "Root=1-5f35ae12-0c0fec141ab77a00bc047aa2;Parent=2be948a625588e32;Sampled=1"
    }
 }
```

**Batas durasi**: Pengaturan batas waktu fungsi membatasi durasi seluruh `Invoke` fase. Misalnya, jika Anda mengatur waktu fungsi habis sebagai 360 detik, fungsi dan semua ekstensi harus selesai dalam 360 detik. Perhatikan bahwa tidak ada fase pasca-invokasi yang independen. Durasi adalah total waktu yang dibutuhkan untuk runtime Anda dan semua pemanggilan ekstensi Anda selesai dan tidak dihitung sampai fungsi dan semua ekstensi selesai berjalan.

**Dampak performa dan pengeluaran tambahan ekstensi**: Ekstensi dapat memengaruhi performa fungsi. Sebagai penulis ekstensi, Anda memiliki kontrol atas dampak kinerja dari ekstensi Anda. Misalnya, jika ekstensi Anda melakukan operasi dengan banyak komputasi, durasi fungsi meningkat karena ekstensi dan kode fungsi berbagi sumber daya CPU yang sama. Selain itu, jika ekstensi Anda melakukan operasi ekstensif setelah invokasi fungsi selesai, durasi fungsi meningkat karena fase `Invoke` berlanjut hingga semua sinyal ekstensi selesai.

**catatan**  
Lambda mengalokasikan daya CPU sebanding dengan pengaturan memori fungsi. Anda mungkin melihat peningkatan eksekusi dan inisialisasi durasi pada pengaturan memori yang lebih rendah karena fungsi dan ekstensi proses bersaing untuk sumber daya CPU yang sama. Untuk mengurangi eksekusi dan inisialisasi durasi, coba tingkatkan pengaturan memori.

Untuk membantu mengidentifikasi dampak performa yang muncul karena ekstensi di fase `Invoke`, Lambda mengeluarkan metrik `PostRuntimeExtensionsDuration`. Metrik ini mengukur waktu kumulatif yang dihabiskan antara waktu pengoperasian permintaan API `Next` dan ekstensi permintaan API `Next` terakhir. Untuk mengukur peningkatan memori yang digunakan, gunakan metrik `MaxMemoryUsed`. Untuk informasi selengkapnya tentang fungsi metrik, lihat [Menggunakan CloudWatch metrik dengan Lambda](monitoring-metrics.md).

Pengembang fungsi dapat menjalankan versi fungsi yang berbeda secara berdampingan untuk memahami dampak ekstensi tertentu. Kami merekomendasikan agar penulis ekstensi memublikasikan konsumsi sumber daya yang diharapkan untuk mempermudah pengembang fungsi dalam memilih ekstensi yang sesuai.

### Fase pematian
<a name="runtimes-lifecycle-extensions-shutdown"></a>

Ketika Lambda akan mematikan runtime, Lambda mengirimkan `Shutdown` ke setiap ekstensi eksternal terdaftar. Ekstensi dapat menggunakan waktu ini untuk tugas pembersihan akhir. Kejadian `Shutdown` dikirim untuk menanggapi permintaan API `Next`.

**Batas durasi**: Durasi maksimum fase `Shutdown` bergantung pada konfigurasi ekstensi terdaftar:
+ 0 ms - Fungsi tanpa ekstensi terdaftar
+ 500 md – Fungsi dengan ekstensi internal terdaftar.
+ 2.000 md – Fungsi dengan satu atau beberapa ekstensi eksternal terdaftar.

Jika waktu pengoperasian atau ekstensi tidak merespons kejadian `Shutdown` dalam batasan, Lambda mengakhiri proses menggunakan sinyal `SIGKILL`.

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/Shutdown-Phase.png)


**Muatan peristiwa**: Peristiwa `Shutdown` tersebut berisi alasan penonaktifan dan waktu yang tersisa dalam milidetik.

 `shutdownReason` mencakup nilai-nilai berikut:
+ SPINDOWN – Pematian normal
+ TIMEOUT – Batas waktu durasi habis
+ FAILURE – Kondisi kesalahan, seperti kejadian `out-of-memory`

```
{ 
  "eventType": "SHUTDOWN", 
  "shutdownReason": "reason for shutdown", 
  "deadlineMs": "the time and date that the function times out in Unix time milliseconds" 
}
```

### Izin dan konfigurasi
<a name="runtimes-extensions-registration-api-e"></a>

Ekstensi berjalan di lingkungan eksekusi yang sama dengan fungsi Lambda. Ekstensi juga berbagi sumber daya dengan fungsi, seperti CPU, memori, dan penyimpanan disk `/tmp`. Selain itu, ekstensi menggunakan peran AWS Identity and Access Management (IAM) dan konteks keamanan yang sama dengan fungsinya.

**Sistem file dan izin akses jaringan**: Ekstensi berjalan di namespace sistem file dan jaringan yang sama dengan runtime fungsi. Ini berarti ekstensi harus kompatibel dengan sistem operasi terkait. Jika ekstensi memerlukan aturan lalu lintas jaringan keluar, Anda harus menerapkan aturan ini ke konfigurasi fungsi.

**catatan**  
Karena direktori kode fungsi diatur ke baca-saja, ekstensi tidak dapat mengubah kode fungsi.

**Variabel lingkungan**: Ekstensi dapat mengakses [variabel lingkungan](configuration-envvars.md) fungsi, kecuali untuk variabel berikut yang spesifik untuk proses runtime:
+ `AWS_EXECUTION_ENV`
+ `AWS_LAMBDA_LOG_GROUP_NAME`
+ `AWS_LAMBDA_LOG_STREAM_NAME`
+ `AWS_XRAY_CONTEXT_MISSING`
+ `AWS_XRAY_DAEMON_ADDRESS`
+ `LAMBDA_RUNTIME_DIR`
+ `LAMBDA_TASK_ROOT`
+ `_AWS_XRAY_DAEMON_ADDRESS`
+ `_AWS_XRAY_DAEMON_PORT`
+ `_HANDLER`

**catatan**  
**Mendeteksi Instans Terkelola Lambda**: Ekstensi dapat memeriksa `AWS_LAMBDA_INITIALIZATION_TYPE` variabel lingkungan untuk menentukan apakah mereka berjalan pada Instans Terkelola Lambda versus fungsi Lambda (default). Ini adalah metode yang direkomendasikan untuk ekstensi untuk menyesuaikan perilakunya berdasarkan jenis lingkungan eksekusi.

### Penanganan kegagalan
<a name="runtimes-extensions-api-failure"></a>

**Kegagalan insialisasi**: Jika ekstensi gagal, Lambda memulai ulang lingkungan eksekusi untuk memberlakukan perilaku yang konsisten dan mendorong kegagalan cepat untuk ekstensi. Selain itu, untuk beberapa pelanggan, ekstensi tersebut harus memenuhi kebutuhan kritis misi, seperti pencatatan log, keamanan, tata kelola, dan pengumpulan telemetri.

**Memanggil kegagalan** (seperti kehabisan memori, waktu habis fungsi): Karena ekstensi berbagi sumber daya dengan runtime, kehabisan dapat memengaruhi keduanya. Saat waktu pengoperasian gagal, semua ekstensi dan waktu pengoperasian sendiri ikut serta dalam fase `Shutdown`. Selain itu, waktu pengoperasian dimulai ulang—baik otomatis sebagai bagian dari invokasi saat ini, atau melalui mekanisme inisialisasi ulang yang ditangguhkan.

Jika ada kegagalan (seperti waktu fungsi habis atau kesalahan waktu pengoperasian) selama `Invoke`, layanan Lambda akan melakukan reset. Reset berperilaku seperti kejadian `Shutdown`. Pertama, Lambda mematikan waktu pengoperasian, lalu ia mengirim kejadian `Shutdown` untuk setiap ekstensi eksternal terdaftar. Kejadian ini mencakup alasan untuk pematian. Jika lingkungan ini digunakan untuk invokasi baru, ekstensi dan waktu pengoperasian diinisialisasi ulang sebagai bagian dari invokasi berikutnya.

![\[Contoh lingkungan eksekusi: Init, Invoke, Invoke with Error, Invoke, Shutdown\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/Overview-Invoke-with-Error.png)


Untuk penjelasan lebih rinci tentang diagram sebelumnya, lihat[Kegagalan selama fase pemanggilan](lambda-runtime-environment.md#runtimes-lifecycle-invoke-with-errors).

**Log ekstensi**: Lambda mengirimkan keluaran log ekstensi ke CloudWatch Log. Lambda juga menghasilkan log acara tambahan untuk setiap ekstensi selama `Init`. Log acara mencatat preferensi nama dan registrasi (peristiwa, konfigurasi) saat berhasil, atau alasan kegagalan saat gagal.

### Pemecahan masalah ekstensi
<a name="runtimes-extensions-api-trbl"></a>
+ Jika permintaan `Register` gagal, pastikan header `Lambda-Extension-Name` di panggilan API `Register` berisi nama file lengkap ekstensi.
+ Jika permintaan `Register` gagal untuk ekstensi internal, pastikan permintaan tersebut tidak terdaftar untuk kejadian `Shutdown`.

## Referensi API ekstensi
<a name="runtimes-extensions-registration-api"></a>

Spesifikasi OpenAPI untuk versi API ekstensi **2020-01-01** tersedia di sini: [extensions-api.zip](samples/extensions-api.zip)

Anda dapat mengambil nilai titik akhir API dari variabel lingkungan `AWS_LAMBDA_RUNTIME_API`. Untuk mengirim permintaan `Register`, gunakan prefiks `2020-01-01/` sebelum setiap jalur API. Sebagai contoh:

```
http://${AWS_LAMBDA_RUNTIME_API}/2020-01-01/extension/register 
```

**Topics**
+ [

### Pendaftaran
](#extensions-registration-api-a)
+ [

### Selanjutnya
](#extensions-api-next)
+ [

### Kesalahan init
](#runtimes-extensions-init-error)
+ [

### Kesalahan keluar
](#runtimes-extensions-exit-error)

### Pendaftaran
<a name="extensions-registration-api-a"></a>

Selama `Extension init`, semua ekstensi perlu mendaftar dengan Lambda untuk menerima kejadian. Lambda menggunakan nama file ekstensi lengkap untuk memvalidasi bahwa ekstensi telah menyelesaikan sekuens bootstrap. Oleh karena itu, tiap panggilan API `Register` harus menyertakan header `Lambda-Extension-Name` dengan nama ekstensi file lengkap.

Ekstensi internal dimulai dan dihentikan oleh proses waktu pengoperasian sehingga tidak diizinkan untuk terdaftar untuk kejadian `Shutdown`.

**Jalur** – `/extension/register`

**Metode** – **POST**

**Minta header**
+ `Lambda-Extension-Name` – Nama file lengkap ekstensi. Wajib: ya. Jenis: string.
+ `Lambda-Extension-Accept-Feature`— Gunakan ini untuk menentukan fitur Ekstensi opsional selama pendaftaran. Wajib: tidak. Jenis: string dipisahkan koma. Fitur yang tersedia untuk ditentukan menggunakan pengaturan ini:
  + `accountId`— Jika ditentukan, respons pendaftaran Ekstensi akan berisi ID akun yang terkait dengan fungsi Lambda tempat Anda mendaftarkan Ekstensi.

**Minta parameter tubuh**
+ `events` – Array kejadian yang akan didaftarkan. Wajib: tidak. Jenis: array string. String yang valid: `INVOKE`, `SHUTDOWN`.
**catatan**  
**Instans Terkelola Lambda: Ekstensi untuk fungsi Instans** Terkelola Lambda hanya dapat mendaftar untuk acara tersebut. `SHUTDOWN` Mencoba mendaftar untuk `INVOKE` acara tersebut akan mengakibatkan kesalahan. Ini karena Instans Terkelola Lambda mendukung pemanggilan bersamaan dalam satu lingkungan eksekusi.

**Header respons**
+ `Lambda-Extension-Identifier` – Menghasilkan pengidentifikasi agen unik (string UUID) yang diperlukan untuk semua permintaan berikutnya.

**Kode respons**
+ 200 – Isi respons berisi nama fungsi, versi fungsi, dan nama penangan.
+ 400 – Permintaan Buruk
+ 403 – Dilarang
+ 500 – Kesalahan penampung. Keadaan yang tidak dapat dipulihkan. Ekstensi harus segera keluar.

**Example Contoh isi permintaan**  

```
{
    'events': [ 'INVOKE', 'SHUTDOWN']
}
```

**Example Contoh isi respons**  

```
{
    "functionName": "helloWorld",
    "functionVersion": "$LATEST",
    "handler": "lambda_function.lambda_handler"
}
```

**Example Contoh badan respons dengan fitur AccountID opsional**  

```
{
    "functionName": "helloWorld",
    "functionVersion": "$LATEST",
    "handler": "lambda_function.lambda_handler",
    "accountId": "123456789012"
}
```

### Selanjutnya
<a name="extensions-api-next"></a>

Ekstensi mengirim permintaan API `Next` untuk menerima kejadian berikutnya, yang dapat menjadi kejadian `Invoke` atau kejadian `Shutdown`. Isi respons berisi muatan, yang merupakan dokumen JSON yang berisi data kejadian.

Ekstensi mengirimkan permintaan API `Next` untuk menandakan bahwa ia siap menerima kejadian baru. Ini adalah panggilan blokir.

Jangan mengatur batas waktu pada panggilan GET karena ekstensi dapat ditangguhkan selama jangka waktu tertentu hingga ada kejadian yang akan dikembalikan.

**Jalur** – `/extension/event/next`

**Metode** – **GET**

**Minta header**
+ `Lambda-Extension-Identifier` – Pengidentifikasi untuk ekstensi (string UUID). Wajib: ya. Tipe: String UID.

**Header respons**
+ `Lambda-Extension-Event-Identifier`— Pengidentifikasi unik untuk acara (string UUID).

**Kode respons**
+ 200 – Respons berisi informasi tentang kejadian berikutnya (`EventInvoke` atau `EventShutdown`).
+ 403 – Dilarang
+ 500 – Kesalahan penampung. Keadaan yang tidak dapat dipulihkan. Ekstensi harus segera keluar.

### Kesalahan init
<a name="runtimes-extensions-init-error"></a>

Ekstensi menggunakan metode ini untuk melaporkan kesalahan inisialisasi ke Lambda. Panggil ini saat ekstensi gagal menginisialisasi setelah ia terdaftar. Setelah Lambda menerima kesalahan, tidak ada panggilan API lebih lanjut yang berhasil. Ekstensi harus keluar setelah menerima respon dari Lambda.

**Jalur** – `/extension/init/error`

**Metode** – **POST**

**Minta header**
+ `Lambda-Extension-Identifier` – Pengidentifikasi unik untuk ekstensi. Wajib: ya. Tipe: String UID.
+ `Lambda-Extension-Function-Error-Type` – Tipe kesalahan yang ekstensi ditemui. Wajib: ya. Header ini terdiri dari nilai string. Lambda menerima string apa pun, tetapi kami merekomendasikan format <category.reason>. Contoh:
  + Perpanjangan. NoSuchHandler
  + Perpanjangan. APIKeyNotFound
  + Perpanjangan. ConfigInvalid
  + Perpanjangan. UnknownReason

**Minta parameter tubuh**
+ `ErrorRequest` – Informasi tentang kesalahan. Wajib: tidak. 

Bidang ini adalah objek JSON dengan struktur berikut:

```
{
      errorMessage: string (text description of the error),
      errorType: string,
      stackTrace: array of strings
}
```

Perhatikan bahwa Lambda menerima nilai apa pun untuk `errorType`.

Contoh berikut menunjukkan pesan kesalahan fungsi Lambda ketika fungsi tidak dapat mengurai data peristiwa yang disediakan dalam invokasi.

**Example Kesalahan fungsi**  

```
{
      "errorMessage" : "Error parsing event data.",
      "errorType" : "InvalidEventDataException",
      "stackTrace": [ ]
}
```

**Kode respons**
+ 202 – Diterima
+ 400 – Permintaan Buruk
+ 403 – Dilarang
+ 500 – Kesalahan penampung. Keadaan yang tidak dapat dipulihkan. Ekstensi harus segera keluar.

### Kesalahan keluar
<a name="runtimes-extensions-exit-error"></a>

Ekstensi menggunakan metode ini untuk melaporkan kesalahan ke Lambda sebelum keluar. Panggil ini saat Anda mengalami kegagalan tak terduga. Setelah Lambda menerima kesalahan, tidak ada panggilan API lebih lanjut yang berhasil. Ekstensi harus keluar setelah menerima respon dari Lambda.

**Jalur** – `/extension/exit/error`

**Metode** – **POST**

**Minta header**
+ `Lambda-Extension-Identifier` – Pengidentifikasi unik untuk ekstensi. Wajib: ya. Tipe: String UID.
+ `Lambda-Extension-Function-Error-Type` – Tipe kesalahan yang ekstensi ditemui. Wajib: ya. Header ini terdiri dari nilai string. Lambda menerima string apa pun, tetapi kami merekomendasikan format <category.reason>. Contoh:
  + Perpanjangan. NoSuchHandler
  + Perpanjangan. APIKeyNotFound
  + Perpanjangan. ConfigInvalid
  + Perpanjangan. UnknownReason

**Minta parameter tubuh**
+ `ErrorRequest` – Informasi tentang kesalahan. Wajib: tidak.

Bidang ini adalah objek JSON dengan struktur berikut:

```
{
      errorMessage: string (text description of the error),
      errorType: string,
      stackTrace: array of strings
}
```

Perhatikan bahwa Lambda menerima nilai apa pun untuk `errorType`.

Contoh berikut menunjukkan pesan kesalahan fungsi Lambda ketika fungsi tidak dapat mengurai data peristiwa yang disediakan dalam invokasi.

**Example Kesalahan fungsi**  

```
{
      "errorMessage" : "Error parsing event data.",
      "errorType" : "InvalidEventDataException",
      "stackTrace": [ ]
}
```

**Kode respons**
+ 202 – Diterima
+ 400 – Permintaan Buruk
+ 403 – Dilarang
+ 500 – Kesalahan penampung. Keadaan yang tidak dapat dipulihkan. Ekstensi harus segera keluar.

 

# Mengakses data telemetri real-time untuk ekstensi menggunakan API Telemetri
<a name="telemetry-api"></a>

API Telemetri memungkinkan ekstensi Anda menerima data telemetri langsung dari Lambda. Selama inisialisasi dan pemanggilan fungsi, Lambda secara otomatis menangkap telemetri, termasuk log, metrik platform, dan jejak platform. API Telemetri memungkinkan ekstensi untuk mengakses data telemetri ini langsung dari Lambda dalam waktu dekat.

Dalam lingkungan eksekusi Lambda, Anda dapat berlangganan ekstensi Lambda Anda ke aliran telemetri. Setelah berlangganan, Lambda secara otomatis mengirimkan semua data telemetri ke ekstensi Anda. Anda kemudian memiliki fleksibilitas untuk memproses, memfilter, dan mengirimkan data ke tujuan pilihan Anda, seperti bucket Amazon Simple Storage Service (Amazon S3) atau penyedia alat observabilitas pihak ketiga.

Diagram berikut menunjukkan bagaimana Extensions API dan Telemetry API menghubungkan ekstensi ke Lambda dari dalam lingkungan eksekusi. Selain itu, Runtime API menghubungkan runtime dan fungsi Anda ke Lambda.

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/telemetry-api-concept-diagram.png)


**penting**  
API Telemetri Lambda menggantikan API Lambda Logs. **Meskipun API Log tetap berfungsi penuh, kami sarankan hanya menggunakan API Telemetri di masa mendatang.** Anda dapat berlangganan ekstensi Anda ke aliran telemetri menggunakan API Telemetri atau API Log. Setelah berlangganan menggunakan salah satu dari ini APIs, setiap upaya untuk berlangganan menggunakan API lain mengembalikan kesalahan.

**Persyaratan versi skema Instans Terkelola Lambda**  
Instans Terkelola Lambda hanya mendukung versi `2025-01-29` skema API Telemetri. Saat berlangganan aliran telemetri untuk fungsi Instans Terkelola, Anda **harus** menggunakannya `"schemaVersion": "2025-01-29"` dalam permintaan langganan. Menggunakan versi skema sebelumnya akan mengakibatkan peristiwa ditolak oleh Lambda.  
Versi `2025-01-29` skema kompatibel ke belakang dan dapat digunakan dengan fungsi Lambda Managed Instances dan Lambda (default). Sebaiknya gunakan versi ini untuk semua ekstensi baru guna memastikan kompatibilitas di kedua model penerapan.

Ekstensi dapat menggunakan API Telemetri untuk berlangganan tiga aliran telemetri yang berbeda:
+ **Telemetri platform** — Log, metrik, dan jejak, yang menjelaskan peristiwa dan kesalahan yang terkait dengan siklus hidup runtime lingkungan eksekusi, siklus hidup ekstensi, dan pemanggilan fungsi.
+ **Log fungsi** - Log khusus yang dihasilkan oleh kode fungsi Lambda.
+ **Log ekstensi** - Log khusus yang dihasilkan oleh kode ekstensi Lambda.

**catatan**  
Lambda mengirimkan log dan metrik ke CloudWatch, dan melacak ke X-Ray (jika Anda telah mengaktifkan penelusuran), bahkan jika ekstensi berlangganan aliran telemetri.

**Topics**
+ [

## Membuat ekstensi menggunakan API Telemetri
](#telemetry-api-creating-extensions)
+ [

## Mendaftarkan ekstensi Anda
](#telemetry-api-registration)
+ [

## Membuat pendengar telemetri
](#telemetry-api-listener)
+ [

## Menentukan protokol tujuan
](#telemetry-api-destination)
+ [

## Mengkonfigurasi penggunaan memori dan buffering
](#telemetry-api-buffering)
+ [

## Mengirim permintaan berlangganan ke API Telemetri
](#telemetry-api-subscription)
+ [

## Pesan API Telemetri Masuk
](#telemetry-api-messages)
+ [

# Referensi API Telemetri Lambda
](telemetry-api-reference.md)
+ [

# Referensi skema API Telemetri Lambda `Event`
](telemetry-schema-reference.md)
+ [

# Mengonversi objek API `Event` Telemetri Lambda ke Span OpenTelemetry
](telemetry-otel-spans.md)
+ [

# Menggunakan Lambda Logs API
](runtimes-logs-api.md)

## Membuat ekstensi menggunakan API Telemetri
<a name="telemetry-api-creating-extensions"></a>

Ekstensi Lambda berjalan sebagai proses independen di lingkungan eksekusi. Ekstensi dapat terus berjalan setelah pemanggilan fungsi selesai. Karena ekstensi adalah proses yang terpisah, Anda dapat menulisnya dalam bahasa yang berbeda dari kode fungsi. Kami merekomendasikan menulis ekstensi menggunakan bahasa yang dikompilasi seperti Golang atau Rust. Dengan cara ini, ekstensi adalah biner mandiri yang dapat kompatibel dengan runtime yang didukung.

Diagram berikut menggambarkan proses empat langkah untuk membuat ekstensi yang menerima dan memproses data telemetri menggunakan API Telemetri.

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/telemetry-api-creation-steps.png)


Berikut adalah setiap langkah secara lebih rinci:

1. Daftarkan ekstensi Anda menggunakan[Menggunakan API Ekstensi Lambda untuk membuat ekstensi](runtimes-extensions-api.md). Ini memberi Anda`Lambda-Extension-Identifier`, yang Anda perlukan dalam langkah-langkah berikut. Untuk informasi selengkapnya tentang cara mendaftarkan ekstensi Anda, lihat[Mendaftarkan ekstensi Anda](#telemetry-api-registration).

1. Buat pendengar telemetri. Ini bisa berupa server HTTP atau TCP dasar. Lambda menggunakan URI pendengar telemetri untuk mengirim data telemetri ke ekstensi Anda. Untuk informasi selengkapnya, lihat [Membuat pendengar telemetri](#telemetry-api-listener).

1. Menggunakan Subscribe API di API Telemetri, berlangganan ekstensi Anda ke aliran telemetri yang diinginkan. Anda akan memerlukan URI pendengar telemetri Anda untuk langkah ini. Untuk informasi selengkapnya, lihat [Mengirim permintaan berlangganan ke API Telemetri](#telemetry-api-subscription).

1. Dapatkan data telemetri dari Lambda melalui pendengar telemetri. Anda dapat melakukan pemrosesan kustom data ini, seperti mengirimkan data ke Amazon S3 atau ke layanan observabilitas eksternal.

**catatan**  
[Lingkungan eksekusi fungsi Lambda dapat dimulai dan berhenti beberapa kali sebagai bagian dari siklus hidupnya.](runtimes-extensions-api.md#runtimes-extensions-api-lifecycle) Secara umum, kode ekstensi Anda berjalan selama pemanggilan fungsi, dan juga hingga 2 detik selama fase shutdown. Kami merekomendasikan pengelompokan telemetri saat sampai ke pendengar Anda. Kemudian, gunakan peristiwa `Invoke` dan `Shutdown` siklus hidup untuk mengirim setiap batch ke tujuan yang diinginkan.

## Mendaftarkan ekstensi Anda
<a name="telemetry-api-registration"></a>

Sebelum Anda dapat berlangganan data telemetri, Anda harus mendaftarkan ekstensi Lambda Anda. Registrasi terjadi selama [fase inisialisasi ekstensi](runtimes-extensions-api.md#runtimes-extensions-api-reg). Contoh berikut menunjukkan permintaan HTTP untuk mendaftarkan ekstensi.

```
POST http://${AWS_LAMBDA_RUNTIME_API}/2020-01-01/extension/register
 Lambda-Extension-Name: lambda_extension_name
{
    'events': [ 'INVOKE', 'SHUTDOWN']
}
```

Jika permintaan berhasil, pelanggan akan menerima respons keberhasilan HTTP 200. Header respon berisi file`Lambda-Extension-Identifier`. Badan respons mengandung sifat lain dari fungsi tersebut.

```
HTTP/1.1 200 OK
Lambda-Extension-Identifier: a1b2c3d4-5678-90ab-cdef-EXAMPLE11111
{
    "functionName": "lambda_function",
    "functionVersion": "$LATEST",
    "handler": "lambda_handler",
    "accountId": "123456789012"
}
```

Untuk informasi selengkapnya, lihat [Referensi API ekstensi](runtimes-extensions-api.md#runtimes-extensions-registration-api).

## Membuat pendengar telemetri
<a name="telemetry-api-listener"></a>

Ekstensi Lambda Anda harus memiliki listener yang menangani permintaan masuk dari API Telemetri. Kode berikut menunjukkan contoh implementasi pendengar telemetri di Golang:

```
// Starts the server in a goroutine where the log events will be sent
func (s *TelemetryApiListener) Start() (string, error) {
	address := listenOnAddress()
	l.Info("[listener:Start] Starting on address", address)
	s.httpServer = &http.Server{Addr: address}
	http.HandleFunc("/", s.http_handler)
	go func() {
		err := s.httpServer.ListenAndServe()
		if err != http.ErrServerClosed {
			l.Error("[listener:goroutine] Unexpected stop on Http Server:", err)
			s.Shutdown()
		} else {
			l.Info("[listener:goroutine] Http Server closed:", err)
		}
	}()
	return fmt.Sprintf("http://%s/", address), nil
}

// http_handler handles the requests coming from the Telemetry API.
// Everytime Telemetry API sends log events, this function will read them from the response body
// and put into a synchronous queue to be dispatched later.
// Logging or printing besides the error cases below is not recommended if you have subscribed to
// receive extension logs. Otherwise, logging here will cause Telemetry API to send new logs for
// the printed lines which may create an infinite loop.
func (s *TelemetryApiListener) http_handler(w http.ResponseWriter, r *http.Request) {
	body, err := ioutil.ReadAll(r.Body)
	if err != nil {
		l.Error("[listener:http_handler] Error reading body:", err)
		return
	}

	// Parse and put the log messages into the queue
	var slice []interface{}
	_ = json.Unmarshal(body, &slice)

	for _, el := range slice {
		s.LogEventsQueue.Put(el)
	}

	l.Info("[listener:http_handler] logEvents received:", len(slice), " LogEventsQueue length:", s.LogEventsQueue.Len())
	slice = nil
}
```

## Menentukan protokol tujuan
<a name="telemetry-api-destination"></a>

Saat berlangganan untuk menerima telemetri menggunakan API Telemetri, Anda dapat menentukan protokol tujuan selain URI tujuan:

```
{
    "destination": {
        "protocol": "HTTP",
        "URI": "http://sandbox.localdomain:8080"
    }
}
```

Lambda menerima dua protokol untuk menerima telemetri:
+ **HTTP (direkomendasikan)** - Lambda mengirimkan telemetri ke titik akhir HTTP lokal (`http://sandbox.localdomain:${PORT}/${PATH}`) sebagai larik catatan dalam format JSON. Parameter `$PATH` bersifat opsional. Lambda hanya mendukung HTTP, bukan HTTPS. Lambda mengirimkan telemetri melalui permintaan POST.
+ **TCP** — Lambda mengirimkan telemetri ke port TCP dalam format JSON (NDJSON) yang dibatasi [Newline](https://github.com/ndjson/ndjson-spec).

**catatan**  
Kami sangat menyarankan menggunakan HTTP daripada TCP. Dengan TCP, platform Lambda tidak dapat mengakui kapan mengirimkan telemetri ke lapisan aplikasi. Oleh karena itu, jika ekstensi Anda macet, Anda mungkin kehilangan telemetri. HTTP tidak memiliki batasan ini.

Sebelum berlangganan untuk menerima telemetri, buat pendengar HTTP lokal atau port TCP. Selama penyetelan, perhatikan hal berikut ini:
+ Lambda mengirimkan telemetri hanya ke tujuan yang berada di dalam lingkungan eksekusi.
+ Lambda mencoba lagi untuk mengirim telemetri (dengan backoff) tanpa adanya pendengar, atau jika permintaan POST mengalami kesalahan. Jika pendengar telemetri mogok, ia melanjutkan menerima telemetri setelah Lambda memulai ulang lingkungan eksekusi.
+ Lambda mencadangkan port 9001. Tidak ada pembatasan atau rekomendasi nomor port lainnya.

## Mengkonfigurasi penggunaan memori dan buffering
<a name="telemetry-api-buffering"></a>

Penggunaan memori di lingkungan eksekusi tumbuh secara linier dengan jumlah pelanggan. Langganan mengkonsumsi sumber daya memori karena masing-masing membuka buffer memori baru untuk menyimpan data telemetri. Penggunaan memori buffer berkontribusi pada konsumsi memori secara keseluruhan di lingkungan eksekusi.

Saat berlangganan untuk menerima telemetri melalui API Telemetri, Anda memiliki opsi untuk menyangga data telemetri dan mengirimkannya ke pelanggan dalam batch. Untuk mengoptimalkan penggunaan memori, Anda dapat menentukan konfigurasi buffering:

```
{
    "buffering": {
        "maxBytes": 256*1024,
        "maxItems": 1000,
        "timeoutMs": 100
    }
}
```


| Parameter | Deskripsi | Default dan batas | 
| --- | --- | --- | 
|  `maxBytes`  |  Volume maksimum telemetri (dalam byte) untuk buffer dalam memori.  |  standar: 262.144 Minimal: 262.144 Maksimal: 1.048.576  | 
|  `maxItems`  |  Jumlah maksimum peristiwa untuk buffer dalam memori.  |  Default: 10.000 Minimal: 1.000 Maksimum: 10.000.  | 
|  `timeoutMs`  |  Waktu maksimum (dalam milidetik) untuk buffer batch.  |  Default: 1.000 Minimal: 25 Maksimal: 30.000  | 

Saat menyiapkan buffering, ingatlah poin-poin ini:
+ Jika salah satu aliran input ditutup, Lambda akan menyiram log. Misalnya, ini dapat terjadi jika runtime mogok.
+ Setiap pelanggan dapat menyesuaikan konfigurasi buffering mereka dalam permintaan berlangganan mereka.
+ Saat menentukan ukuran buffer untuk membaca data, antisipasi menerima muatan sebesar`2 * maxBytes + metadataBytes`, di mana `maxBytes` merupakan komponen penyiapan buffering Anda. Untuk mengukur jumlah yang `metadataBytes` perlu dipertimbangkan, tinjau metadata berikut. Lambda menambahkan metadata yang mirip dengan ini ke setiap catatan:

  ```
  {
     "time": "2022-08-20T12:31:32.123Z",
     "type": "function",
     "record": "Hello World"
  }
  ```
+ Jika pelanggan tidak dapat memproses telemetri masuk dengan cukup cepat, atau jika kode fungsi Anda menghasilkan volume log yang sangat tinggi, Lambda mungkin akan menjatuhkan catatan untuk menjaga pemanfaatan memori tetap terbatas. Ketika ini terjadi, Lambda mengirimkan acara. `platform.logsDropped`

## Mengirim permintaan berlangganan ke API Telemetri
<a name="telemetry-api-subscription"></a>

Ekstensi Lambda dapat berlangganan untuk menerima data telemetri dengan mengirimkan permintaan berlangganan ke API Telemetri. Permintaan berlangganan harus berisi informasi tentang jenis acara yang Anda inginkan untuk berlangganan ekstensi. Selain itu, permintaan dapat berisi [informasi tujuan pengiriman](#telemetry-api-destination) dan [konfigurasi buffering](#telemetry-api-buffering).

Sebelum mengirim permintaan berlangganan, Anda harus memiliki ID ekstensi (`Lambda-Extension-Identifier`). Saat [mendaftarkan ekstensi dengan Extensions API](#telemetry-api-registration), Anda mendapatkan ID ekstensi dari respons API.

Langganan terjadi selama [fase inisialisasi ekstensi](runtimes-extensions-api.md#runtimes-extensions-api-reg). Contoh berikut menunjukkan permintaan HTTP untuk berlangganan ketiga aliran telemetri: telemetri platform, log fungsi, dan log ekstensi.

```
PUT http://${AWS_LAMBDA_RUNTIME_API}/2022-07-01/telemetry HTTP/1.1
{
   "schemaVersion": "2025-01-29",
   "types": [
        "platform",
        "function",
        "extension"
   ],
   "buffering": {
        "maxItems": 1000,
        "maxBytes": 256*1024,
        "timeoutMs": 100
   },
   "destination": {
        "protocol": "HTTP",
        "URI": "http://sandbox.localdomain:8080"
   }
}
```

Jika permintaan berhasil, maka pelanggan menerima respons sukses HTTP 200.

```
HTTP/1.1 200 OK
"OK"
```

## Pesan API Telemetri Masuk
<a name="telemetry-api-messages"></a>

Setelah berlangganan menggunakan API Telemetri, ekstensi secara otomatis mulai menerima telemetri dari Lambda melalui permintaan POST. Setiap badan permintaan POST berisi array `Event` objek. Masing-masing `Event` memiliki skema berikut:

```
{
   time: String,
   type: String,
   record: Object
}
```
+ `time`Properti menentukan kapan platform Lambda menghasilkan acara. Ini berbeda dengan saat peristiwa itu benar-benar terjadi. Nilai string `time` adalah stempel waktu dalam format ISO 8601.
+ `type`Properti mendefinisikan jenis acara. Tabel berikut menjelaskan semua nilai yang mungkin.
+ `record`Properti mendefinisikan objek JSON yang berisi data telemetri. Skema objek JSON ini tergantung pada. `type`

**Pemesanan acara dengan pemanggilan bersamaan**  
Untuk [Instans Terkelola Lambda](lambda-managed-instances.md), beberapa pemanggilan fungsi dapat dijalankan secara bersamaan dalam lingkungan eksekusi yang sama. Dalam hal ini, urutan `platform.start` dan `platform.report` acara tidak dijamin antara pemanggilan bersamaan yang berbeda. Ekstensi harus menangani peristiwa dari beberapa pemanggilan yang berjalan secara paralel dan tidak boleh mengasumsikan urutan berurutan.  
Untuk mengaitkan peristiwa dengan benar ke pemanggilan tertentu, ekstensi harus menggunakan `requestId` bidang yang ada dalam acara platform ini. Setiap pemanggilan memiliki ID permintaan unik yang tetap konsisten di semua peristiwa untuk pemanggilan itu, memungkinkan ekstensi untuk menghubungkan peristiwa dengan benar bahkan ketika mereka tiba di luar pesanan.

Tabel berikut merangkum semua jenis `Event` objek, dan menautkan ke [referensi `Event` skema API Telemetri](telemetry-schema-reference.md) untuk setiap jenis peristiwa.


| Kategori | Tipe peristiwa | Deskripsi | Skema catatan acara | 
| --- | --- | --- | --- | 
|  Acara platform  |  `platform.initStart`  |  Inisialisasi fungsi dimulai.  |  [`platform.initStart`](telemetry-schema-reference.md#platform-initStart)skema  | 
|  Acara platform  |  `platform.initRuntimeDone`  |  Inisialisasi fungsi selesai.  |  [`platform.initRuntimeDone`](telemetry-schema-reference.md#platform-initRuntimeDone)skema  | 
|  Acara platform  |  `platform.initReport`  |  Laporan inisialisasi fungsi.  |  [`platform.initReport`](telemetry-schema-reference.md#platform-initReport)skema  | 
|  Acara platform  |  `platform.start`  |  Pemanggilan fungsi dimulai.  |  [`platform.start`](telemetry-schema-reference.md#platform-start)skema  | 
|  Acara platform  |  `platform.runtimeDone`  |  Runtime selesai memproses acara dengan keberhasilan atau kegagalan.  |  [`platform.runtimeDone`](telemetry-schema-reference.md#platform-runtimeDone)skema  | 
|  Acara platform  |  `platform.report`  |  Laporan pemanggilan fungsi.  |  [`platform.report`](telemetry-schema-reference.md#platform-report)skema  | 
|  Acara platform  |  `platform.restoreStart`  |  Pemulihan runtime dimulai.  |  [`platform.restoreStart`](telemetry-schema-reference.md#platform-restoreStart)skema  | 
|  Acara platform  |  `platform.restoreRuntimeDone`  |  Pemulihan runtime selesai.  |  [`platform.restoreRuntimeDone`](telemetry-schema-reference.md#platform-restoreRuntimeDone)skema  | 
|  Acara platform  |  `platform.restoreReport`  |  Laporan pemulihan runtime.  |  [`platform.restoreReport`](telemetry-schema-reference.md#platform-restoreReport)skema  | 
|  Acara platform  |  `platform.telemetrySubscription`  |  Ekstensi berlangganan API Telemetri.  |  [`platform.telemetrySubscription`](telemetry-schema-reference.md#platform-telemetrySubscription)skema  | 
|  Acara platform  |  `platform.logsDropped`  |  Lambda menjatuhkan entri log.  |  [`platform.logsDropped`](telemetry-schema-reference.md#platform-logsDropped)skema  | 
|  Log fungsi  |  `function`  |  Sebuah baris log dari kode fungsi.  |  [`function`](telemetry-schema-reference.md#telemetry-api-function)skema  | 
|  Log ekstensi:  |  `extension`  |  Sebuah baris log dari kode ekstensi.  |  [`extension`](telemetry-schema-reference.md#telemetry-api-extension)skema  | 

# Referensi API Telemetri Lambda
<a name="telemetry-api-reference"></a>

Gunakan titik akhir API Telemetri Lambda untuk berlangganan ekstensi ke aliran telemetri. Anda dapat mengambil titik akhir API Telemetri dari variabel lingkungan. `AWS_LAMBDA_RUNTIME_API` Untuk mengirim permintaan API, tambahkan versi API (`2022-07-01/`) dan`telemetry/`. Contoh:

```
http://${AWS_LAMBDA_RUNTIME_API}/2022-07-01/telemetry/
```

Untuk definisi OpenAPI Specification (OAS) dari versi respons langganan`2025-01-29`, lihat berikut ini:
+ **HTTP** — [telemetry-api-http-schema.zip](samples/events_http_schema_v2025_01_29.zip)
+ **TCP** [— telemetry-api-tcp-schema .zip](samples/events_tcp_schema_v2025_01_29.zip)

**Topics**
+ [

## Langganan
](#telemetry-subscribe-api)

## Langganan
<a name="telemetry-subscribe-api"></a>

Untuk berlangganan aliran telemetri, ekstensi Lambda dapat mengirim permintaan API Berlangganan.
+ **Jalur** – `/telemetry`
+ **Metode** - `PUT`
+ **Header**
  + `Content-Type`: `application/json`
+ **Minta parameter tubuh**
  + **SchemaVersion**
    + Wajib: Ya
    + Tipe: String
    + Nilai valid: `"2025-01-29"`, `"2022-12-13"`, atau `"2022-07-01"`
    + **Catatan:** Instans Terkelola Lambda memerlukan. `"2025-01-29"` Versi ini kompatibel dengan fungsi Lambda (default).
  + **tujuan** — Pengaturan konfigurasi yang menentukan tujuan acara telemetri dan protokol untuk pengiriman acara.
    + Wajib: Ya
    + Tipe: Objek

      ```
      {
          "protocol": "HTTP",
          "URI": "http://sandbox.localdomain:8080"
      }
      ```
    + **Protokol** — Protokol yang digunakan Lambda untuk mengirim data telemetri.
      + Wajib: Ya
      + Tipe: String
      + Nilai yang valid: `"HTTP"` \$1 `"TCP"`
    + **URI** — URI untuk mengirim data telemetri ke.
      + Wajib: Ya
      + Tipe: String
    + Untuk informasi selengkapnya, lihat [Menentukan protokol tujuan](telemetry-api.md#telemetry-api-destination).
  + **jenis** — Jenis telemetri yang Anda inginkan untuk berlangganan ekstensi.
    + Wajib: Ya
    + Tipe: Array string
    + Nilai yang valid: `"platform"` \$1 `"function"` \$1 `"extension"`
  + **buffering** - Pengaturan konfigurasi untuk buffering acara.
    + Wajib: Tidak
    + Tipe: Objek

      ```
      {
         "buffering": {
              "maxItems": 1000,
              "maxBytes": 256*1024,
              "timeoutMs": 100
         }
      }
      ```
    + **maxItems** – Jumlah maksimum peristiwa untuk buffer dalam memori.
      + Wajib: Tidak
      + Jenis: Integer
      + Default: 1.000
      + Minimal: 1.000
      + Maksimum: 10.000.
    + **MaxBytes** — Volume maksimum telemetri (dalam byte) untuk buffer dalam memori.
      + Wajib: Tidak
      + Jenis: Integer
      + standar: 262.144
      + Minimal: 262.144
      + Maksimal: 1.048.576
    + **timeoutMs** – Waktu maksimum (dalam milidetik) untuk mem-buffer batch.
      + Wajib: Tidak
      + Jenis: Integer
      + Default: 1.000
      + Minimal: 25
      + Maksimal: 30.000
    + Untuk informasi selengkapnya, lihat [Mengkonfigurasi penggunaan memori dan buffering](telemetry-api.md#telemetry-api-buffering).

### Contoh Permintaan API Berlangganan
<a name="telemetry-subscribe-api-example"></a>

```
PUT http://${AWS_LAMBDA_RUNTIME_API}/2022-07-01/telemetry HTTP/1.1
{
   "schemaVersion": "2025-01-29",
   "types": [
        "platform",
        "function",
        "extension"
   ],
   "buffering": {
        "maxItems": 1000,
        "maxBytes": 256*1024,
        "timeoutMs": 100
   },
   "destination": {
        "protocol": "HTTP",
        "URI": "http://sandbox.localdomain:8080"
   }
}
```

Jika permintaan Berlangganan berhasil, ekstensi menerima respons sukses HTTP 200:

```
HTTP/1.1 200 OK
"OK"
```

Jika permintaan Berlangganan gagal, ekstensi menerima respons kesalahan. Contoh:

```
HTTP/1.1 400 OK
{
    "errorType": "ValidationError",
    "errorMessage": "URI port is not provided; types should not be empty"
}
```

Berikut adalah beberapa kode respons tambahan yang dapat diterima ekstensi:
+ 200 – Permintaan berhasil diselesaikan
+ 202 – Permintaan diterima. Respons permintaan berlangganan di lingkungan pengujian lokal
+ 400 — Permintaan buruk
+ 500 – Kesalahan Layanan

# Referensi skema API Telemetri Lambda `Event`
<a name="telemetry-schema-reference"></a>

Gunakan titik akhir API Telemetri Lambda untuk berlangganan ekstensi ke aliran telemetri. Anda dapat mengambil titik akhir API Telemetri dari variabel lingkungan. `AWS_LAMBDA_RUNTIME_API` Untuk mengirim permintaan API, tambahkan versi API (`2022-07-01/`) dan`telemetry/`. Contoh:

```
http://${AWS_LAMBDA_RUNTIME_API}/2022-07-01/telemetry/
```

Untuk definisi OpenAPI Specification (OAS) dari versi respons langganan`2025-01-29`, lihat berikut ini:
+ **HTTP** — [telemetry-api-http-schema.zip](samples/events_http_schema_v2025_01_29.zip)
+ **TCP** [— telemetry-api-tcp-schema .zip](samples/events_tcp_schema_v2025_01_29.zip)

Tabel berikut adalah ringkasan dari semua jenis `Event` objek yang didukung oleh API Telemetri.


| Kategori | Tipe peristiwa | Deskripsi | Skema catatan acara | 
| --- | --- | --- | --- | 
|  Acara platform  |  `platform.initStart`  |  Inisialisasi fungsi dimulai.  |  [`platform.initStart`](#platform-initStart)skema  | 
|  Acara platform  |  `platform.initRuntimeDone`  |  Inisialisasi fungsi selesai.  |  [`platform.initRuntimeDone`](#platform-initRuntimeDone)skema  | 
|  Acara platform  |  `platform.initReport`  |  Laporan inisialisasi fungsi.  |  [`platform.initReport`](#platform-initReport)skema  | 
|  Acara platform  |  `platform.start`  |  Pemanggilan fungsi dimulai.  |  [`platform.start`](#platform-start)skema  | 
|  Acara platform  |  `platform.runtimeDone`  |  Runtime selesai memproses acara dengan keberhasilan atau kegagalan.  |  [`platform.runtimeDone`](#platform-runtimeDone)skema  | 
|  Acara platform  |  `platform.report`  |  Laporan pemanggilan fungsi.  |  [`platform.report`](#platform-report)skema  | 
|  Acara platform  |  `platform.restoreStart`  |  Pemulihan runtime dimulai.  |  [`platform.restoreStart`](#platform-restoreStart)skema  | 
|  Acara platform  |  `platform.restoreRuntimeDone`  |  Pemulihan runtime selesai.  |  [`platform.restoreRuntimeDone`](#platform-restoreRuntimeDone)skema  | 
|  Acara platform  |  `platform.restoreReport`  |  Laporan pemulihan runtime.  |  [`platform.restoreReport`](#platform-restoreReport)skema  | 
|  Acara platform  |  `platform.telemetrySubscription`  |  Ekstensi berlangganan API Telemetri.  |  [`platform.telemetrySubscription`](#platform-telemetrySubscription)skema  | 
|  Acara platform  |  `platform.logsDropped`  |  Lambda menjatuhkan entri log.  |  [`platform.logsDropped`](#platform-logsDropped)skema  | 
|  Log fungsi  |  `function`  |  Sebuah baris log dari kode fungsi.  |  [`function`](#telemetry-api-function)skema  | 
|  Log ekstensi:  |  `extension`  |  Sebuah baris log dari kode ekstensi.  |  [`extension`](#telemetry-api-extension)skema  | 

**Contents**
+ [

## Jenis objek API `Event` telemetri
](#telemetry-api-events)
  + [

### `platform.initStart`
](#platform-initStart)
  + [

### `platform.initRuntimeDone`
](#platform-initRuntimeDone)
  + [

### `platform.initReport`
](#platform-initReport)
  + [

### `platform.start`
](#platform-start)
  + [

### `platform.runtimeDone`
](#platform-runtimeDone)
  + [

### `platform.report`
](#platform-report)
  + [

### `platform.restoreStart`
](#platform-restoreStart)
  + [

### `platform.restoreRuntimeDone`
](#platform-restoreRuntimeDone)
  + [

### `platform.restoreReport`
](#platform-restoreReport)
  + [

### `platform.extension`
](#platform-extension)
  + [

### `platform.telemetrySubscription`
](#platform-telemetrySubscription)
  + [

### `platform.logsDropped`
](#platform-logsDropped)
  + [

### `function`
](#telemetry-api-function)
  + [

### `extension`
](#telemetry-api-extension)
+ [

## Jenis objek bersama
](#telemetry-api-objects)
  + [

### `InitPhase`
](#InitPhase)
  + [

### `InitReportMetrics`
](#InitReportMetrics)
  + [

### `InitType`
](#InitType)
  + [

### `ReportMetrics`
](#ReportMetrics)
  + [

### `RestoreReportMetrics`
](#RestoreReportMetrics)
  + [

### `RuntimeDoneMetrics`
](#RuntimeDoneMetrics)
  + [

### `Span`
](#Span)
  + [

### `Status`
](#Status)
  + [

### `TraceContext`
](#TraceContext)
  + [

### `TracingType`
](#TracingType)

## Jenis objek API `Event` telemetri
<a name="telemetry-api-events"></a>

Bagian ini merinci jenis `Event` objek yang didukung oleh API Telemetri Lambda. Dalam deskripsi peristiwa, tanda tanya (`?`) menunjukkan bahwa atribut mungkin tidak ada dalam objek.

### `platform.initStart`
<a name="platform-initStart"></a>

Sebuah `platform.initStart` peristiwa menunjukkan bahwa fase inisialisasi fungsi telah dimulai. Sebuah `platform.initStart` `Event` objek memiliki bentuk sebagai berikut:

```
Event: Object
- time: String
- type: String = platform.initStart
- record: PlatformInitStart
```

`PlatformInitStart`Objek memiliki atribut berikut:
+ **FunctionName** - `String`
+ **FunctionVersion** - `String`
+ **InitializationType** - objek ``InitType``
+ **InstanceId?** — `String`
+ **instanceMaxMemory?** – `Integer`
+ **fase** — ``InitPhase`` objek
+ **RuntimeVersion?** — `String`
+ **runtimeVersionArn?** – `String`

Berikut ini adalah contoh `Event` tipe`platform.initStart`:

```
{
    "time": "2022-10-12T00:00:15.064Z",
    "type": "platform.initStart",
    "record": {
        "initializationType": "on-demand",
        "phase": "init",
        "runtimeVersion": "nodejs-14.v3",
        "runtimeVersionArn": "arn",
        "functionName": "myFunction",
        "functionVersion": "$LATEST",
        "instanceId": "82561ce0-53dd-47d1-90e0-c8f5e063e62e",
        "instanceMaxMemory": 256
    }
}
```

### `platform.initRuntimeDone`
<a name="platform-initRuntimeDone"></a>

Sebuah `platform.initRuntimeDone` peristiwa menunjukkan bahwa fase inisialisasi fungsi telah selesai. Sebuah `platform.initRuntimeDone` `Event` objek memiliki bentuk sebagai berikut:

```
Event: Object
- time: String
- type: String = platform.initRuntimeDone
- record: PlatformInitRuntimeDone
```

`PlatformInitRuntimeDone`Objek memiliki atribut berikut:
+ **InitializationType** - objek ``InitType``
+ **fase** — ``InitPhase`` objek
+ **status** - ``Status`` objek
+ **bentang?** — Daftar ``Span`` objek

Berikut ini adalah contoh `Event` tipe`platform.initRuntimeDone`:

```
{
    "time": "2022-10-12T00:01:15.000Z",
    "type": "platform.initRuntimeDone",
    "record": {
        "initializationType": "on-demand"
        "status": "success",
        "spans": [
            {
                "name": "someTimeSpan",
                "start": "2022-06-02T12:02:33.913Z",
                "durationMs": 70.5
            }
        ]
    }
}
```

### `platform.initReport`
<a name="platform-initReport"></a>

Sebuah `platform.initReport` peristiwa berisi laporan keseluruhan dari fase inisialisasi fungsi. Sebuah `platform.initReport` `Event` objek memiliki bentuk sebagai berikut:

```
Event: Object
- time: String
- type: String = platform.initReport
- record: PlatformInitReport
```

`PlatformInitReport`Objek memiliki atribut berikut:
+ **ErrorType?** — tali
+ **InitializationType** - objek ``InitType``
+ **fase** — ``InitPhase`` objek
+ **metrik** — objek ``InitReportMetrics``
+ **bentang?** — Daftar ``Span`` objek
+ **status** - ``Status`` objek

Berikut ini adalah contoh `Event` tipe`platform.initReport`:

```
{
    "time": "2022-10-12T00:01:15.000Z",
    "type": "platform.initReport",
    "record": {
        "initializationType": "on-demand",
        "status": "success",
        "phase": "init",
        "metrics": {
            "durationMs": 125.33
        },
        "spans": [
            {
                "name": "someTimeSpan",
                "start": "2022-06-02T12:02:33.913Z",
                "durationMs": 90.1
            }
        ]
    }
}
```

### `platform.start`
<a name="platform-start"></a>

Sebuah `platform.start` peristiwa menunjukkan bahwa fase pemanggilan fungsi telah dimulai. Sebuah `platform.start` `Event` objek memiliki bentuk sebagai berikut:

```
Event: Object
- time: String
- type: String = platform.start
- record: PlatformStart
```

`PlatformStart`Objek memiliki atribut berikut:
+ **RequesTid** — `String`
+ **versi?** — `String`
+ **menelusuri?** — ``TraceContext``

Berikut ini adalah contoh `Event` tipe`platform.start`:

```
{
    "time": "2022-10-12T00:00:15.064Z",
    "type": "platform.start",
    "record": {
        "requestId": "6d68ca91-49c9-448d-89b8-7ca3e6dc66aa",
        "version": "$LATEST",
        "tracing": {
            "spanId": "54565fb41ac79632",
            "type": "X-Amzn-Trace-Id",
            "value": "Root=1-62e900b2-710d76f009d6e7785905449a;Parent=0efbd19962d95b05;Sampled=1"
        }
    }
}
```

### `platform.runtimeDone`
<a name="platform-runtimeDone"></a>

Sebuah `platform.runtimeDone` peristiwa menunjukkan bahwa fase pemanggilan fungsi telah selesai. Sebuah `platform.runtimeDone` `Event` objek memiliki bentuk sebagai berikut:

**Instans Terkelola Lambda**  
`platform.runtimeDone`Acara ini tidak didukung untuk Instans Terkelola Lambda. Ekstensi yang berjalan pada Instans Terkelola tidak akan menerima acara ini karena ekstensi tidak dapat berlangganan `INVOKE` acara di Instans Terkelola. Karena model eksekusi bersamaan di mana beberapa pemanggilan dapat diproses secara bersamaan, ekstensi tidak dapat melakukan pemrosesan pasca-pemanggilan untuk pemanggilan individu seperti yang biasanya dilakukan pada fungsi Lambda (default).  
Untuk `responseDuration` Instans Terkelola, rentang `responseLatency` dan yang biasanya disertakan dalam `platform.runtimeDone` acara tersebut `platform.report` tersedia. Lihat [`platform.report`](#platform-report) untuk detail.

```
Event: Object
- time: String
- type: String = platform.runtimeDone
- record: PlatformRuntimeDone
```

`PlatformRuntimeDone`Objek memiliki atribut berikut:
+ **ErrorType?** — `String`
+ **metrik?** — ``RuntimeDoneMetrics`` objek
+ **RequesTid** — `String`
+ **status** - ``Status`` objek
+ **bentang?** — Daftar ``Span`` objek
+ **menelusuri?** — ``TraceContext`` objek

Berikut ini adalah contoh `Event` tipe`platform.runtimeDone`:

```
{
    "time": "2022-10-12T00:01:15.000Z",
    "type": "platform.runtimeDone",
    "record": {
        "requestId": "6d68ca91-49c9-448d-89b8-7ca3e6dc66aa",
        "status": "success",
        "tracing": {
            "spanId": "54565fb41ac79632",
            "type": "X-Amzn-Trace-Id",
            "value": "Root=1-62e900b2-710d76f009d6e7785905449a;Parent=0efbd19962d95b05;Sampled=1"
        },
        "spans": [
            {
                "name": "someTimeSpan",
                "start": "2022-08-02T12:01:23:521Z",
                "durationMs": 80.0
            }
        ],
        "metrics": {
            "durationMs": 140.0,
            "producedBytes": 16
        }
    }
}
```

### `platform.report`
<a name="platform-report"></a>

Sebuah `platform.report` peristiwa berisi laporan keseluruhan dari fase pemanggilan fungsi. Sebuah `platform.report` `Event` objek memiliki bentuk sebagai berikut:

**Instans Terkelola Lambda**  
`platform.report`Acara untuk Instans Terkelola Lambda memiliki metrik dan rentang yang berbeda dibandingkan dengan fungsi Lambda (default). Untuk Instans Terkelola:  
**Rentang**: Berisi `responseLatency` dan `responseDuration` bukannya. `extensionOverhead` `extensionOverhead`Rentang tidak tersedia karena ekstensi tidak dapat berlangganan `INVOKE` acara pada Instans Terkelola karena model eksekusi bersamaan.
**Metrik**: Hanya termasuk`durationMs`. Metrik berikut tidak termasuk:`billedDurationMs`,, `initDurationMs``maxMemoryUsedMB`, dan`memorySizeMB`. Metrik per-pemanggilan ini tidak berlaku di lingkungan eksekusi bersamaan. [Untuk metrik pemanfaatan sumber daya, gunakan atau Wawasan [Memantau Instans Terkelola Lambda](lambda-managed-instances-monitoring.md) Lambda.](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-insights.html)

```
Event: Object
- time: String
- type: String = platform.report
- record: PlatformReport
```

`PlatformReport`Objek memiliki atribut berikut:
+ **metrik** — objek ``ReportMetrics``
+ **RequesTid** — `String`
+ **bentang?** — Daftar ``Span`` objek
+ **status** - ``Status`` objek
+ **menelusuri?** — ``TraceContext`` objek

Berikut ini adalah contoh `Event` tipe`platform.report`:

```
{
    "time": "2022-10-12T00:01:15.000Z",
    "type": "platform.report",
    "record": {
        "metrics": {
            "billedDurationMs": 694,
            "durationMs": 693.92,
            "initDurationMs": 397.68,
            "maxMemoryUsedMB": 84,
            "memorySizeMB": 128
        },
        "requestId": "6d68ca91-49c9-448d-89b8-7ca3e6dc66aa",
    }
}
```

### `platform.restoreStart`
<a name="platform-restoreStart"></a>

Sebuah `platform.restoreStart` peristiwa menunjukkan bahwa acara restorasi lingkungan fungsi dimulai. Dalam acara restorasi lingkungan, Lambda menciptakan lingkungan dari snapshot yang di-cache daripada menginisialisasi dari awal. Untuk informasi selengkapnya, lihat [Lambda SnapStart](snapstart.md). Sebuah `platform.restoreStart` `Event` objek memiliki bentuk sebagai berikut:

```
Event: Object
- time: String
- type: String = platform.restoreStart
- record: PlatformRestoreStart
```

`PlatformRestoreStart`Objek memiliki atribut berikut:
+ **FunctionName** - `String`
+ **FunctionVersion** - `String`
+ **InstanceId?** — `String`
+ **instanceMaxMemory?** – `String`
+ **RuntimeVersion?** — `String`
+ **runtimeVersionArn?** – `String`

Berikut ini adalah contoh `Event` tipe`platform.restoreStart`:

```
{
    "time": "2022-10-12T00:00:15.064Z",
    "type": "platform.restoreStart",
    "record": {
        "runtimeVersion": "nodejs-14.v3",
        "runtimeVersionArn": "arn",
        "functionName": "myFunction",
        "functionVersion": "$LATEST",
        "instanceId": "82561ce0-53dd-47d1-90e0-c8f5e063e62e",
        "instanceMaxMemory": 256
    }
}
```

### `platform.restoreRuntimeDone`
<a name="platform-restoreRuntimeDone"></a>

Sebuah `platform.restoreRuntimeDone` peristiwa menunjukkan bahwa acara restorasi lingkungan fungsi selesai. Dalam acara restorasi lingkungan, Lambda menciptakan lingkungan dari snapshot yang di-cache daripada menginisialisasi dari awal. Untuk informasi selengkapnya, lihat [Lambda SnapStart](snapstart.md). Sebuah `platform.restoreRuntimeDone` `Event` objek memiliki bentuk sebagai berikut:

```
Event: Object
- time: String
- type: String = platform.restoreRuntimeDone
- record: PlatformRestoreRuntimeDone
```

`PlatformRestoreRuntimeDone`Objek memiliki atribut berikut:
+ **ErrorType?** — `String`
+ **bentang?** — Daftar ``Span`` objek
+ **status** - ``Status`` objek

Berikut ini adalah contoh `Event` tipe`platform.restoreRuntimeDone`:

```
{
    "time": "2022-10-12T00:00:15.064Z",
    "type": "platform.restoreRuntimeDone",
    "record": {
        "status": "success",
        "spans": [
            {
                "name": "someTimeSpan",
                "start": "2022-08-02T12:01:23:521Z",
                "durationMs": 80.0
            }
        ]
    }
}
```

### `platform.restoreReport`
<a name="platform-restoreReport"></a>

Sebuah `platform.restoreReport` peristiwa berisi laporan keseluruhan dari acara restorasi fungsi. Sebuah `platform.restoreReport` `Event` objek memiliki bentuk sebagai berikut:

```
Event: Object
- time: String
- type: String = platform.restoreReport
- record: PlatformRestoreReport
```

`PlatformRestoreReport`Objek memiliki atribut berikut:
+ **ErrorType?** — tali
+ **metrik?** — ``RestoreReportMetrics`` objek
+ **bentang?** — Daftar ``Span`` objek
+ **status** - ``Status`` objek

Berikut ini adalah contoh `Event` tipe`platform.restoreReport`:

```
{
    "time": "2022-10-12T00:00:15.064Z",
    "type": "platform.restoreReport",
    "record": {
        "status": "success",
        "metrics": {
            "durationMs": 15.19
        },
        "spans": [
            {
                "name": "someTimeSpan",
                "start": "2022-08-02T12:01:23:521Z",
                "durationMs": 30.0
            }
        ]
    }
}
```

### `platform.extension`
<a name="platform-extension"></a>

Sebuah `extension` peristiwa berisi log dari kode ekstensi. Sebuah `extension` `Event` objek memiliki bentuk sebagai berikut:

```
Event: Object
- time: String
- type: String = extension
- record: {}
```

`PlatformExtension`Objek memiliki atribut berikut:
+ **event** — Daftar `String`
+ **nama** — `String`
+ **negara** — `String`

Berikut ini adalah contoh `Event` tipe`platform.extension`:

```
{
    "time": "2022-10-12T00:02:15.000Z",
    "type": "platform.extension",
    "record": {
        "events": [ "INVOKE", "SHUTDOWN" ],
        "name": "my-telemetry-extension",
        "state": "Ready"
    }
}
```

### `platform.telemetrySubscription`
<a name="platform-telemetrySubscription"></a>

`platform.telemetrySubscription`Acara berisi informasi tentang langganan ekstensi. Sebuah `platform.telemetrySubscription` `Event` objek memiliki bentuk sebagai berikut:

```
Event: Object
- time: String
- type: String = platform.telemetrySubscription
- record: PlatformTelemetrySubscription
```

`PlatformTelemetrySubscription`Objek memiliki atribut berikut:
+ **nama** — `String`
+ **negara** — `String`
+ **jenis** — Daftar `String`

Berikut ini adalah contoh `Event` tipe`platform.telemetrySubscription`:

```
{
    "time": "2022-10-12T00:02:35.000Z",
    "type": "platform.telemetrySubscription",
    "record": {
        "name": "my-telemetry-extension",
        "state": "Subscribed",
        "types": [ "platform", "function" ]
    }
}
```

### `platform.logsDropped`
<a name="platform-logsDropped"></a>

Sebuah `platform.logsDropped` acara berisi informasi tentang peristiwa yang dijatuhkan. Lambda memancarkan `platform.logsDropped` peristiwa ketika suatu fungsi mengeluarkan log pada tingkat yang terlalu tinggi bagi Lambda untuk memprosesnya. Ketika Lambda tidak dapat mengirim log ke CloudWatch atau ke ekstensi yang berlangganan Telemetri API dengan kecepatan yang dihasilkan oleh fungsi, itu akan menjatuhkan log untuk mencegah eksekusi fungsi melambat. Sebuah `platform.logsDropped` `Event` objek memiliki bentuk sebagai berikut:

```
Event: Object
- time: String
- type: String = platform.logsDropped
- record: PlatformLogsDropped
```

`PlatformLogsDropped`Objek memiliki atribut berikut:
+ **DroppedBytes** — `Integer`
+ **DroppedRecords** — `Integer`
+ **alasan** — `String`

Berikut ini adalah contoh `Event` tipe`platform.logsDropped`:

```
{
    "time": "2022-10-12T00:02:35.000Z",
    "type": "platform.logsDropped",
    "record": {
        "droppedBytes": 12345,
        "droppedRecords": 123,
        "reason": "Some logs were dropped because the downstream consumer is slower than the logs production rate"
    }
}
```

### `function`
<a name="telemetry-api-function"></a>

Sebuah `function` peristiwa berisi log dari kode fungsi. Sebuah `function` `Event` objek memiliki bentuk sebagai berikut:

```
Event: Object
- time: String
- type: String = function
- record: {}
```

Format `record` bidang tergantung pada apakah log fungsi Anda diformat dalam teks biasa atau format JSON. untuk mempelajari lebih lanjut tentang opsi konfigurasi format log, lihat [Mengkonfigurasi JSON dan format log teks biasa](monitoring-cloudwatchlogs-logformat.md)

Berikut ini adalah contoh `Event` jenis `function` di mana format log adalah teks biasa:

```
{
    "time": "2022-10-12T00:03:50.000Z",
    "type": "function",
    "record": "[INFO] Hello world, I am a function!"
}
```

Berikut ini adalah contoh `Event` jenis `function` di mana format log adalah JSON:

```
{
    "time": "2022-10-12T00:03:50.000Z",
    "type": "function",
    "record": {
        "timestamp": "2022-10-12T00:03:50.000Z",
        "level": "INFO",
        "requestId": "79b4f56e-95b1-4643-9700-2807f4e68189",
        "message": "Hello world, I am a function!"
    }
}
```

**catatan**  
Jika versi skema yang Anda gunakan lebih lama dari `2022-12-13` versi, maka versi selalu `"record"` dirender sebagai string bahkan ketika format logging fungsi Anda dikonfigurasi sebagai JSON. Untuk Instans Terkelola Lambda, Anda harus menggunakan versi skema. `2025-01-29`

### `extension`
<a name="telemetry-api-extension"></a>

Sebuah `extension` peristiwa berisi log dari kode ekstensi. Sebuah `extension` `Event` objek memiliki bentuk sebagai berikut:

```
Event: Object
- time: String
- type: String = extension
- record: {}
```

Format `record` bidang tergantung pada apakah log fungsi Anda diformat dalam teks biasa atau format JSON. untuk mempelajari lebih lanjut tentang opsi konfigurasi format log, lihat [Mengkonfigurasi JSON dan format log teks biasa](monitoring-cloudwatchlogs-logformat.md)

Berikut ini adalah contoh `Event` jenis `extension` di mana format log adalah teks biasa:

```
{
    "time": "2022-10-12T00:03:50.000Z",
    "type": "extension",
    "record": "[INFO] Hello world, I am an extension!"
}
```

Berikut ini adalah contoh `Event` jenis `extension` di mana format log adalah JSON:

```
{
    "time": "2022-10-12T00:03:50.000Z",
    "type": "extension",
    "record": {
       "timestamp": "2022-10-12T00:03:50.000Z",
       "level": "INFO",
       "requestId": "79b4f56e-95b1-4643-9700-2807f4e68189",
       "message": "Hello world, I am an extension!"
    }    
}
```

**catatan**  
Jika versi skema yang Anda gunakan lebih lama dari `2022-12-13` versi, maka versi selalu `"record"` dirender sebagai string bahkan ketika format logging fungsi Anda dikonfigurasi sebagai JSON. Untuk Instans Terkelola Lambda, Anda harus menggunakan versi skema. `2025-01-29`

## Jenis objek bersama
<a name="telemetry-api-objects"></a>

Bagian ini merinci jenis objek bersama yang didukung oleh API Telemetri Lambda.

### `InitPhase`
<a name="InitPhase"></a>

Sebuah string enum yang menggambarkan fase ketika langkah inisialisasi terjadi. Dalam kebanyakan kasus, Lambda menjalankan kode inisialisasi fungsi selama fase. `init` Namun, dalam beberapa kasus kesalahan, Lambda dapat menjalankan kembali kode inisialisasi fungsi selama fase. `invoke` (Ini disebut *init yang ditekan*.)
+ **Jenis** - `String`
+ **Nilai yang valid** - `init` \$1 `invoke` \$1 `snap-start`

### `InitReportMetrics`
<a name="InitReportMetrics"></a>

Objek yang berisi metrik tentang fase inisialisasi.
+ **Jenis** - `Object`

Sebuah `InitReportMetrics` objek memiliki bentuk sebagai berikut:

```
InitReportMetrics: Object
- durationMs: Double
```

Berikut ini adalah contoh `InitReportMetrics` objek:

```
{
    "durationMs": 247.88
}
```

### `InitType`
<a name="InitType"></a>

Sebuah string enum yang menjelaskan bagaimana Lambda menginisialisasi lingkungan.
+ **Jenis** - `String`
+ **Nilai yang valid** - `on-demand` \$1 `provisioned-concurrency`

### `ReportMetrics`
<a name="ReportMetrics"></a>

Objek yang berisi metrik tentang fase selesai.
+ **Jenis** - `Object`

Sebuah `ReportMetrics` objek memiliki bentuk sebagai berikut:

```
ReportMetrics: Object
- billedDurationMs: Integer
- durationMs: Double
- initDurationMs?: Double
- maxMemoryUsedMB: Integer
- memorySizeMB: Integer
- restoreDurationMs?: Double
```

Berikut ini adalah contoh `ReportMetrics` objek:

```
{
    "billedDurationMs": 694,
    "durationMs": 693.92,
    "initDurationMs": 397.68,
    "maxMemoryUsedMB": 84,
    "memorySizeMB": 128
}
```

### `RestoreReportMetrics`
<a name="RestoreReportMetrics"></a>

Objek yang berisi metrik tentang fase restorasi selesai.
+ **Jenis** - `Object`

Sebuah `RestoreReportMetrics` objek memiliki bentuk sebagai berikut:

```
RestoreReportMetrics: Object
- durationMs: Double
```

Berikut ini adalah contoh `RestoreReportMetrics` objek:

```
{
    "durationMs": 15.19
}
```

### `RuntimeDoneMetrics`
<a name="RuntimeDoneMetrics"></a>

Objek yang berisi metrik tentang fase pemanggilan.
+ **Jenis** - `Object`

Sebuah `RuntimeDoneMetrics` objek memiliki bentuk sebagai berikut:

```
RuntimeDoneMetrics: Object
- durationMs: Double
- producedBytes?: Integer
```

Berikut ini adalah contoh `RuntimeDoneMetrics` objek:

```
{
    "durationMs": 200.0,
    "producedBytes": 15
}
```

### `Span`
<a name="Span"></a>

Objek yang berisi detail tentang rentang. Rentang mewakili unit kerja atau operasi dalam jejak. Untuk informasi selengkapnya tentang [rentang, lihat Span](https://opentelemetry.io/docs/reference/specification/trace/api/#span) di halaman **Tracing API** di situs web OpenTelemetry Dokumen.

Lambda mendukung rentang berikut untuk acara tersebut: `platform.RuntimeDone`
+ `responseLatency`Rentang menjelaskan berapa lama waktu yang dibutuhkan fungsi Lambda Anda untuk mulai mengirim respons.
+ `responseDuration`Rentang menjelaskan berapa lama waktu yang dibutuhkan fungsi Lambda Anda untuk menyelesaikan pengiriman seluruh respons.
+ `runtimeOverhead`Rentang menjelaskan berapa lama waktu yang dibutuhkan runtime Lambda untuk memberi sinyal bahwa ia siap untuk memproses pemanggilan fungsi berikutnya. Ini adalah waktu yang dibutuhkan runtime untuk memanggil API [pemanggilan berikutnya](runtimes-api.md#runtimes-api-next) untuk mendapatkan acara berikutnya setelah mengembalikan respons fungsi Anda.

Berikut ini adalah contoh objek `responseLatency` span:

```
{
        "name": "responseLatency", 
        "start": "2022-08-02T12:01:23.521Z",
        "durationMs": 23.02
      }
```

### `Status`
<a name="Status"></a>

Objek yang menggambarkan status fase inisialisasi atau pemanggilan. Jika statusnya salah satu `failure` atau`error`, maka `Status` objek juga berisi `errorType` bidang yang menjelaskan kesalahan.
+ **Jenis** - `Object`
+ **Nilai status yang valid** - `success` \$1 `failure` \$1 `error` \$1 `timeout`

### `TraceContext`
<a name="TraceContext"></a>

Objek yang menggambarkan sifat-sifat jejak.
+ **Jenis** - `Object`

Sebuah `TraceContext` objek memiliki bentuk sebagai berikut:

```
TraceContext: Object
- spanId?: String
- type: TracingType enum
- value: String
```

Berikut ini adalah contoh `TraceContext` objek:

```
{
    "spanId": "073a49012f3c312e",
    "type": "X-Amzn-Trace-Id",
    "value": "Root=1-62e900b2-710d76f009d6e7785905449a;Parent=0efbd19962d95b05;Sampled=1"
}
```

### `TracingType`
<a name="TracingType"></a>

Sebuah string enum yang menggambarkan jenis tracing dalam suatu ``TraceContext`` objek.
+ **Jenis** - `String`
+ **Nilai yang valid** - `X-Amzn-Trace-Id`

# Mengonversi objek API `Event` Telemetri Lambda ke Span OpenTelemetry
<a name="telemetry-otel-spans"></a>

Skema API AWS Lambda Telemetri secara semantik kompatibel dengan (). OpenTelemetry OTel Ini berarti Anda dapat mengonversi `Event` objek API AWS Lambda Telemetri ke OpenTelemetry (OTel) Span. Saat mengonversi, Anda tidak boleh memetakan satu `Event` objek ke satu OTel Span. Sebagai gantinya, Anda harus menyajikan ketiga peristiwa yang terkait dengan fase siklus hidup dalam satu OTel Span. Misalnya, `start``runtimeDone`, dan `runtimeReport` peristiwa mewakili pemanggilan fungsi tunggal. Hadirkan ketiga acara ini sebagai OTel Span tunggal.

Anda dapat mengonversi acara menggunakan Span Events atau Child (nested) Span. Tabel di halaman ini menjelaskan pemetaan antara properti skema API Telemetri dan properti OTel Span untuk kedua pendekatan. Untuk informasi selengkapnya tentang OTel Rentang, lihat [Span](https://opentelemetry.io/docs/reference/specification/trace/api/#span) di halaman **Tracing API** di situs web OpenTelemetry Dokumen.

**Topics**
+ [

## Peta ke OTel Bentang dengan Acara Span
](#telemetry-otel-span-events)
+ [

## Peta ke OTel Bentang dengan Rentang Anak
](#telemetry-otel-child-spans)

## Peta ke OTel Bentang dengan Acara Span
<a name="telemetry-otel-span-events"></a>

Dalam tabel berikut, `e` mewakili peristiwa yang berasal dari sumber telemetri.

**Memetakan acara \$1Mulai**


| OpenTelemetry | Skema API Telemetri Lambda | 
| --- | --- | 
|  `Span.Name`  |  Ekstensi Anda menghasilkan nilai ini berdasarkan `type` bidang.  | 
|  `Span.StartTime`  |  Gunakan `e.time`.  | 
|  `Span.EndTime`  |  N/A, karena acara belum selesai.  | 
|  `Span.Kind`  |  Setel ke`Server`.  | 
|  `Span.Status`  |  Setel ke`Unset`.  | 
|  `Span.TraceId`  |  Parse AWS X-Ray header yang ditemukan di`e.tracing.value`, lalu gunakan `TraceId` nilainya.  | 
|  `Span.ParentId`  |  Parse header X-Ray yang ditemukan di`e.tracing.value`, lalu gunakan `Parent` nilainya.  | 
|  `Span.SpanId`  |  Gunakan `e.tracing.spanId` jika tersedia. Jika tidak, buat yang baru`SpanId`.  | 
|  `Span.SpanContext.TraceState`  |  N/A untuk konteks jejak X-Ray.  | 
|  `Span.SpanContext.TraceFlags`  |  Parse header X-Ray yang ditemukan di`e.tracing.value`, lalu gunakan `Sampled` nilainya.  | 
|  `Span.Attributes`  |  Ekstensi Anda dapat menambahkan nilai kustom apa pun di sini.  | 

**Memetakan acara\$1 RuntimeDone **


| OpenTelemetry | Skema API Telemetri Lambda | 
| --- | --- | 
|  `Span.Name`  |  Ekstensi Anda menghasilkan nilai berdasarkan `type` bidang.  | 
|  `Span.StartTime`  |  Gunakan `e.time` dari `*Start` acara yang cocok. Alternatif lainnya, gunakan `e.time - e.metrics.durationMs`.  | 
|  `Span.EndTime`  |  N/A, karena acara belum selesai.  | 
|  `Span.Kind`  |  Setel ke`Server`.  | 
|  `Span.Status`  |  Jika `e.status` tidak sama`success`, maka atur ke`Error`. Jika tidak, atur ke`Ok`.  | 
|  `Span.Events[]`  |  Gunakan `e.spans[]`.  | 
|  `Span.Events[i].Name`  |  Gunakan `e.spans[i].name`.  | 
|  `Span.Events[i].Time`  |  Gunakan `e.spans[i].start`.  | 
|  `Span.TraceId`  |  Parse AWS X-Ray header yang ditemukan di`e.tracing.value`, lalu gunakan `TraceId` nilainya.  | 
|  `Span.ParentId`  |  Parse header X-Ray yang ditemukan di`e.tracing.value`, lalu gunakan `Parent` nilainya.  | 
|  `Span.SpanId`  |  Gunakan hal yang sama `SpanId` dari `*Start` acara tersebut. Jika tidak tersedia, maka gunakan`e.tracing.spanId`, atau buat yang baru`SpanId`.  | 
|  `Span.SpanContext.TraceState`  |  N/A untuk konteks jejak X-Ray.  | 
|  `Span.SpanContext.TraceFlags`  |  Parse header X-Ray yang ditemukan di`e.tracing.value`, lalu gunakan `Sampled` nilainya.  | 
|  `Span.Attributes`  |  Ekstensi Anda dapat menambahkan nilai kustom apa pun di sini.  | 

**Memetakan \$1Laporkan peristiwa**


| OpenTelemetry | Skema API Telemetri Lambda | 
| --- | --- | 
|  `Span.Name`  |  Ekstensi Anda menghasilkan nilai berdasarkan `type` bidang.  | 
|  `Span.StartTime`  |  Gunakan `e.time` dari `*Start` acara yang cocok. Alternatif lainnya, gunakan `e.time - e.metrics.durationMs`.  | 
|  `Span.EndTime`  |  Gunakan `e.time`.  | 
|  `Span.Kind`  |  Setel ke`Server`.  | 
|  `Span.Status`  |  Gunakan nilai yang sama dengan `*RuntimeDone` acara.  | 
|  `Span.TraceId`  |  Parse AWS X-Ray header yang ditemukan di`e.tracing.value`, lalu gunakan `TraceId` nilainya.  | 
|  `Span.ParentId`  |  Parse header X-Ray yang ditemukan di`e.tracing.value`, lalu gunakan `Parent` nilainya.  | 
|  `Span.SpanId`  |  Gunakan hal yang sama `SpanId` dari `*Start` acara tersebut. Jika tidak tersedia, maka gunakan`e.tracing.spanId`, atau buat yang baru`SpanId`.  | 
|  `Span.SpanContext.TraceState`  |  N/A untuk konteks jejak X-Ray.  | 
|  `Span.SpanContext.TraceFlags`  |  Parse header X-Ray yang ditemukan di`e.tracing.value`, lalu gunakan `Sampled` nilainya.  | 
|  `Span.Attributes`  |  Ekstensi Anda dapat menambahkan nilai kustom apa pun di sini.  | 

## Peta ke OTel Bentang dengan Rentang Anak
<a name="telemetry-otel-child-spans"></a>

Tabel berikut menjelaskan cara mengonversi peristiwa API Telemetri Lambda menjadi OTel Rentang dengan Rentang Anak (bersarang) untuk Rentang. `*RuntimeDone` Untuk `*Start` dan `*Report` pemetaan, lihat tabel di[Peta ke OTel Bentang dengan Acara Span](#telemetry-otel-span-events), karena sama untuk Rentang Anak. Dalam tabel ini, `e` mewakili peristiwa yang berasal dari sumber telemetri.

**Memetakan acara\$1 RuntimeDone **


| OpenTelemetry | Skema API Telemetri Lambda | 
| --- | --- | 
|  `Span.Name`  |  Ekstensi Anda menghasilkan nilai berdasarkan `type` bidang.  | 
|  `Span.StartTime`  |  Gunakan `e.time` dari `*Start` acara yang cocok. Alternatif lainnya, gunakan `e.time - e.metrics.durationMs`.  | 
|  `Span.EndTime`  |  N/A, karena acara belum selesai.  | 
|  `Span.Kind`  |  Setel ke`Server`.  | 
|  `Span.Status`  |  Jika `e.status` tidak sama`success`, maka atur ke`Error`. Jika tidak, atur ke`Ok`.  | 
|  `Span.TraceId`  |  Parse AWS X-Ray header yang ditemukan di`e.tracing.value`, lalu gunakan `TraceId` nilainya.  | 
|  `Span.ParentId`  |  Parse header X-Ray yang ditemukan di`e.tracing.value`, lalu gunakan `Parent` nilainya.  | 
|  `Span.SpanId`  |  Gunakan hal yang sama `SpanId` dari `*Start` acara tersebut. Jika tidak tersedia, maka gunakan`e.tracing.spanId`, atau buat yang baru`SpanId`.  | 
|  `Span.SpanContext.TraceState`  |  N/A untuk konteks jejak X-Ray.  | 
|  `Span.SpanContext.TraceFlags`  |  Parse header X-Ray yang ditemukan di`e.tracing.value`, lalu gunakan `Sampled` nilainya.  | 
|  `Span.Attributes`  |  Ekstensi Anda dapat menambahkan nilai kustom apa pun di sini.  | 
|  `ChildSpan[i].Name`  |  Gunakan `e.spans[i].name`.  | 
|  `ChildSpan[i].StartTime`  |  Gunakan `e.spans[i].start`.  | 
|  `ChildSpan[i].EndTime`  |  Gunakan `e.spans[i].start + e.spans[i].durations`.  | 
|  `ChildSpan[i].Kind`  |  Sama seperti orang tua`Span.Kind`.  | 
|  `ChildSpan[i].Status`  |  Sama seperti orang tua`Span.Status`.  | 
|  `ChildSpan[i].TraceId`  |  Sama seperti orang tua`Span.TraceId`.  | 
|  `ChildSpan[i].ParentId`  |  Gunakan orang tua`Span.SpanId`.  | 
|  `ChildSpan[i].SpanId`  |  Hasilkan yang baru`SpanId`.  | 
|  `ChildSpan[i].SpanContext.TraceState`  |  N/A untuk konteks jejak X-Ray.  | 
|  `ChildSpan[i].SpanContext.TraceFlags`  |  Sama seperti orang tua`Span.SpanContext.TraceFlags`.  | 

# Menggunakan Lambda Logs API
<a name="runtimes-logs-api"></a>

**penting**  
API Telemetri Lambda menggantikan API Lambda Logs. **Meskipun API Log tetap berfungsi penuh, kami sarankan hanya menggunakan API Telemetri ke depannya.** Anda dapat berlangganan ekstensi Anda ke aliran telemetri menggunakan API Telemetri atau API Log. Setelah berlangganan menggunakan salah satu dari ini APIs, setiap upaya untuk berlangganan menggunakan API lain mengembalikan kesalahan.

**Instans Terkelola Lambda tidak mendukung API Log**  
Instans Terkelola Lambda tidak mendukung API Log. Jika Anda menggunakan fungsi Instans Terkelola, gunakan [API Telemetri](telemetry-api.md) sebagai gantinya. API Telemetri menyediakan kemampuan yang ditingkatkan untuk mengumpulkan dan memproses data telemetri dari fungsi Lambda Anda.

Lambda secara otomatis menangkap log runtime dan mengalirkannya ke Amazon. CloudWatch Aliran log ini berisi log yang dibuat oleh kode fungsi dan ekstensi Anda, dan juga log yang dibuat oleh Lambda sebagai bagian dari invokasi fungsi.

[Ekstensi Lambda](runtimes-extensions-api.md) dapat menggunakan API Lambda Runtime Logs untuk berlangganan aliran log langsung dari [lingkungan eksekusi](lambda-runtime-environment.md) Lambda. Lambda mengalirkan log ke ekstensi, dan ekstensi kemudian dapat memproses, memfilter, dan mengirim log ke tujuan yang diinginkan.

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/logs-api-concept-diagram.png)


API Log memungkinkan ekstensi untuk berlangganan ke tiga aliran log yang berbeda:
+ Log fungsi yang dibuat oleh fungsi Lambda dan ditulis ke `stdout` atau `stderr`.
+ Log ekstensi yang dibuat kode ekstensi.
+ Log platform Lambda, yang mencatat peristiwa dan kesalahan yang terkait dengan invokasi dan ekstensi.

**catatan**  
Lambda mengirimkan semua log ke CloudWatch, bahkan ketika ekstensi berlangganan ke satu atau beberapa aliran log.

**Topics**
+ [

## Berlangganan untuk menerima log
](#runtimes-logs-api-subscribing)
+ [

## Penggunaan memori
](#runtimes-logs-api-memory)
+ [

## Protokol tujuan
](#runtimes-logs-api-dest)
+ [

## Konfigurasi buffering
](#runtimes-logs-api-buffering)
+ [

## Contoh berlangganan
](#runtimes-logs-api-subs-example)
+ [

## Kode sampel untuk API Log
](#runtimes-logs-api-samples)
+ [

## Referensi API Log
](#runtimes-logs-api-ref)
+ [

## Log pesan
](#runtimes-logs-api-msg)

## Berlangganan untuk menerima log
<a name="runtimes-logs-api-subscribing"></a>

Ekstensi Lambda dapat berlangganan untuk menerima log dengan mengirim permintaan langganan ke API Log.

Untuk berlangganan guna menerima log, Anda memerlukan pengidentifikasi ekstensi (`Lambda-Extension-Identifier`). Pertama, [daftarkan ekstensi](runtimes-extensions-api.md#extensions-registration-api-a) untuk menerima pengidentifikasi ekstensi. Kemudian berlangganan API Log selama [inisialisasi](lambda-runtime-environment.md#runtimes-lifecycle-ib). Setelah fase inisialisasi selesai, Lambda tidak memproses permintaan langganan.

**catatan**  
Berlangganan Log API adalah idempoten. Permintaan berlangganan duplikat tidak menghasilkan langganan duplikat.

## Penggunaan memori
<a name="runtimes-logs-api-memory"></a>

Penggunaan memori meningkat secara linear seiring bertambahnya jumlah pelanggan. Langganan menghabiskan sumber daya memori karena setiap langganan membuka buffer memori baru untuk menyimpan log. Untuk membantu mengoptimalkan penggunaan memori, Anda dapat menyesuaikan [konfigurasi buffering](#runtimes-logs-api-buffering). Penggunaan memori buffer dihitung untuk konsumsi memori keseluruhan dalam lingkungan eksekusi.

## Protokol tujuan
<a name="runtimes-logs-api-dest"></a>

Anda dapat memilih salah satu protokol berikut untuk menerima log:

1. **HTTP** (disarankan) – Lambda mengirimkan log ke titik akhir HTTP lokal (`http://sandbox.localdomain:${PORT}/${PATH}`) sebagai array catatan dalam format JSON. Parameter `$PATH` bersifat opsional. Perhatikan bahwa hanya HTTP yang didukung, bukan HTTPS. Anda dapat memilih untuk menerima log melalui PUT atau POST.

1. **TCP** – Lambda mengirimkan log ke port TCP dalam [format JSON berbatas baris baru (NDJSON)](https://github.com/ndjson/ndjson-spec).

Kami menyarankan Anda untuk menggunakan HTTP alih-alih TCP. Dengan TCP, platform Lambda tidak dapat mengakui bahwa log dikirimkan ke lapisan aplikasi. Oleh karena itu, Anda mungkin kehilangan log jika ekstensi Anda mengalami crash. HTTP tidak berbagi batasan ini.

Kami juga menyarankan Anda untuk mengatur pendengar HTTP lokal atau port TCP sebelum berlangganan untuk menerima log. Selama penyetelan, perhatikan hal berikut ini:
+ Lambda hanya mengirimkan log ke tujuan yang berada di lingkungan eksekusi.
+ Lambda mengulang upaya untuk mengirim log (dengan pemunduran) jika tidak ada pendengar, atau jika permintaan POST atau PUT mengakibatkan kesalahan. Jika pelanggan log mengalami crahs, pelanggam terus menerima log setelah Lambda memulai ulang lingkungan eksekusi.
+ Lambda mencadangkan port 9001. Tidak ada pembatasan atau rekomendasi nomor port lainnya.

## Konfigurasi buffering
<a name="runtimes-logs-api-buffering"></a>

Lambda dapat mem-buffer log dan mengirimkannya kepada pelanggan. Anda dapat mengonfigurasi perilaku ini dalam permintaan langganan dengan menentukan bidang opsional berikut. Perhatikan bahwa Lambda menggunakan nilai default untuk setiap bidang yang tidak Anda tentukan.
+ **timeoutMs** – Waktu maksimum (dalam milidetik) untuk mem-buffer batch. Default: 1.000. Minimum: 25. Maksimum: 30.000.
+ **maxBytes** – Ukuran maksimum (dalam byte) log untuk buffer dalam memori. Default: 262.144. Minimum: 262.144. Maksimum: 1.048.576.
+ **maxItems** – Jumlah maksimum peristiwa untuk buffer dalam memori. Default: 10.000. Minimum: 1.000. Maksimum: 10.000.

Selama konfigurasi buffering, perhatikan poin-poin berikut:
+ Lambda membilas log jika salah satu aliran input tertutup, misalnya, jika waktu pengoperasian macet.
+ Setiap pelanggan dapat menentukan konfigurasi buffering yang berbeda dalam permintaan langganan.
+ Pertimbangkan ukuran buffer yang Anda butuhkan untuk membaca data. Perkirakan penerimaan muatan sebesar `2*maxBytes+metadata`, dengan `maxBytes` dikonfigurasi dalam permintaan berlangganan. Misalnya, Lambda menambahkan byte metadata berikut ke setiap catatan:

  ```
  {
  "time": "2020-08-20T12:31:32.123Z",
  "type": "function",
  "record": "Hello World"
  }
  ```
+ Jika pelanggan tidak dapat memproses log masuk dengan cukup cepat, Lambda mungkin akan menanggalkan log untuk menjaga pemanfaatan memori tetap terikat. Untuk menunjukkan jumlah catatan yang dihapus, Lambda mengirimkan log `platform.logsDropped`. Untuk informasi selengkapnya, lihat [Lambda: Tidak semua log fungsi saya muncul](troubleshooting-execution.md#troubleshooting-execution-missinglogs).

## Contoh berlangganan
<a name="runtimes-logs-api-subs-example"></a>

Contoh berikut menunjukkan permintaan untuk berlangganan ke platform dan log fungsi.

```
PUT http://${AWS_LAMBDA_RUNTIME_API}/2020-08-15/logs HTTP/1.1
{ "schemaVersion": "2020-08-15",
  "types": [
      "platform",
      "function"
    ],
  "buffering": {
      "maxItems": 1000,
      "maxBytes": 262144,
      "timeoutMs": 100
    },
  "destination": {
    "protocol": "HTTP",
    "URI": "http://sandbox.localdomain:8080/lambda_logs"
  }
}
```

Jika permintaan berhasil, pelanggan akan menerima respons keberhasilan HTTP 200.

```
HTTP/1.1 200 OK
"OK"
```

## Kode sampel untuk API Log
<a name="runtimes-logs-api-samples"></a>

Untuk kode contoh yang menunjukkan cara mengirim log ke tujuan kustom, lihat [Menggunakan AWS Lambda ekstensi untuk mengirim log ke tujuan khusus](https://aws.amazon.com/blogs/compute/using-aws-lambda-extensions-to-send-logs-to-custom-destinations/) di Blog AWS Komputasi.

Untuk contoh kode Python dan Go yang menunjukkan cara mengembangkan ekstensi Lambda dasar dan berlangganan API Log, lihat [AWS Lambda Ekstensi](https://github.com/aws-samples/aws-lambda-extensions) pada repositori Sampel. AWS GitHub Untuk informasi lebih lanjut tentang membangun ekstensi Lambda, lihat [Menggunakan API Ekstensi Lambda untuk membuat ekstensi](runtimes-extensions-api.md).

## Referensi API Log
<a name="runtimes-logs-api-ref"></a>

Anda dapat mengambil titik akhir API Log dari variabel lingkungan `AWS_LAMBDA_RUNTIME_API`. Untuk mengirim permintaan API, gunakan prefiks `2020-08-15/` sebelum jalur API. Contoh:

```
http://${AWS_LAMBDA_RUNTIME_API}/2020-08-15/logs
```

[Spesifikasi OpenAPI untuk Logs API versi **2020-08-15** tersedia di sini: .zip logs-api-request](samples/logs-api-request.zip)

### Langganan
<a name="runtimes-logs-api-ref-a"></a>

Untuk berlangganan satu atau beberapa aliran log yang tersedia di lingkungan eksekusi Lambda, ekstensi akan mengirim permintaan API Berlangganan.

**Jalur** – `/logs`

**Metode** – **PUT**

**Parameter tubuh**

`destination` – Lihat [Protokol tujuan](#runtimes-logs-api-dest). Wajib: ya. Jenis: string.

`buffering` – Lihat [Konfigurasi buffering](#runtimes-logs-api-buffering). Wajib: tidak. Jenis: string.

`types` – Array jenis log yang akan diterima. Wajib: ya. Jenis: array string. Nilai valid: "platform", "function", "extension".

`schemaVersion` – Wajib: tidak. Nilai default: "2020-08-15". Atur ke "2021-03-18" untuk ekstensi untuk menerima pesan [`platform.runtimeDone`](#runtimes-logs-api-ref-done).

****Parameter respons****

Spesifikasi OpenAPI untuk respons langganan versi **2020-08-15** tersedia untuk protokol HTTP dan TCP:
+ HTTP: [logs-api-http-response.zip](samples/logs-api-http-response.zip)
+ [TCP: logs-api-tcp-response .zip](samples/logs-api-tcp-response.zip)

****Kode respons****
+ 200 – Permintaan berhasil diselesaikan
+ 202 – Permintaan diterima. Respons terhadap permintaan berlangganan selama pengujian lokal.
+ 4XX – Permintaan Buruk
+ 500 – Kesalahan Layanan

Jika permintaan berhasil, pelanggan akan menerima respons keberhasilan HTTP 200.

```
HTTP/1.1 200 OK
"OK"
```

Jika permintaan gagal, pelanggan akan menerima respons kesalahan. Sebagai contoh:

```
HTTP/1.1 400 OK
{
    "errorType": "Logs.ValidationError",
    "errorMessage": URI port is not provided; types should not be empty"
}
```

## Log pesan
<a name="runtimes-logs-api-msg"></a>

API Log memungkinkan ekstensi untuk berlangganan ke tiga aliran log yang berbeda:
+ Fungsi –Log dibuat oleh fungsi Lambda dan menulis ke `stdout` atau `stderr`.
+ Ekstenso – Log yang dibuat kode ekstensi.
+ Platform –Log yang dibuat platform runtime, yang mencatat peristiwa dan kesalahan yang terkait dengan invokasi dan ekstensi.

**Topics**
+ [

### Log fungsi
](#runtimes-logs-api-msg-function)
+ [

### Log ekstensi:
](#runtimes-logs-api-msg-extension)
+ [

### Log platform
](#runtimes-logs-api-msg-platform)

### Log fungsi
<a name="runtimes-logs-api-msg-function"></a>

Fungsi Lambda dan ekstensi internal yang menghasilkan log fungsi dan menuliskannya ke `stdout` atau `stderr`.

Contoh berikut menunjukkan format pesan log fungsi. \$1 "time": "2020-08-20T12:31:32.123Z", "type": "function", "record": "ERROR encountered. Stack trace:\$1n\$1my-function (line 10)\$1n" \$1 

### Log ekstensi:
<a name="runtimes-logs-api-msg-extension"></a>

Ekstensi dapat menghasilkan log ekstensi. Format log sama seperti untuk log fungsi.

### Log platform
<a name="runtimes-logs-api-msg-platform"></a>

Lambda menghasilkan pesan log untuk peristiwa platform seperti `platform.start`, `platform.end`, dan `platform.fault`.

Atau, Anda dapat berlangganan ke versi **2021-03-18**skema API Log, yang mencakup pesan log `platform.runtimeDone`.

#### Contoh pesan log platform
<a name="runtimes-logs-api-examples"></a>

Contoh berikut menunjukkan log awal platform dan akhir platform. Log ini menunjukkan waktu mulai invokasi dan waktu berakhir invokasi untuk pemanggilan yang ditentukan oleh requestId. 

```
{     
    "time": "2020-08-20T12:31:32.123Z",
    "type": "platform.start",
    "record": {"requestId": "6f7f0961f83442118a7af6fe80b88d56"}   
}
{
    "time": "2020-08-20T12:31:32.123Z",
    "type": "platform.end",
    "record": {"requestId": "6f7f0961f83442118a7af6fe80b88d56"}   
}
```

**Platform. initRuntimeDone**pesan log menunjukkan status `Runtime init` sub-fase, yang merupakan bagian dari fase [lifecyle Init](lambda-runtime-environment.md#runtimes-lifecycle-ib). `Runtime init`Kapan berhasil, runtime mengirimkan permintaan API `/next` runtime (untuk tipe `on-demand` dan `provisioned-concurrency` inisialisasi) atau `restore/next` (untuk tipe `snap-start` inisialisasi). Contoh berikut menunjukkan **platform yang sukses. initRuntimeDone**pesan log untuk jenis `snap-start` inisialisasi.

```
{
  "time":"2022-07-17T18:41:57.083Z",
  "type":"platform.initRuntimeDone",
  "record":{
      "initializationType":"snap-start",
      "status":"success"
  }
}
```

Pesan log **Platform.initReport** menunjukkan berapa lama `Init` fase berlangsung dan berapa milidetik Anda ditagih selama fase ini. Ketika jenis inisialisasi`provisioned-concurrency`, Lambda mengirimkan pesan ini selama pemanggilan. Saat jenis inisialisasi`snap-start`, Lambda mengirimkan pesan ini setelah memulihkan snapshot. Contoh berikut menunjukkan pesan log **Platform.initReport** untuk jenis inisialisasi. `snap-start`

```
{
  "time":"2022-07-17T18:41:57.083Z",
  "type":"platform.initReport",
  "record":{
      "initializationType":"snap-start",
      "metrics":{
          "durationMs":731.79,
          "billedDurationMs":732
          }
  }
}
```

Log laporan platform menyertakan metrik tentang invokasi yang ditentukan oleh requestId. Bidang `initDurationMs` termasuk dalam log hanya jika invokasi termasuk mulai awal. Jika pelacakan AWS X-Ray aktif, log mencakup metadata X-Ray. Contoh berikut menunjukkan log laporan platform untuk invokasi yang mencakup mulai awal.

```
{     
    "time": "2020-08-20T12:31:32.123Z",
    "type": "platform.report",
    "record": {"requestId": "6f7f0961f83442118a7af6fe80b88d56",
        "metrics": {"durationMs": 101.51,
            "billedDurationMs": 300,
            "memorySizeMB": 512,
            "maxMemoryUsedMB": 33,
            "initDurationMs": 116.67
        }
    }
}
```

Log kesalahan platform menangkap waktu pengoperasian atau kesalahan lingkungan eksekusi. Contoh berikut ini menunjukkan pesan log kesalahan platform. 

```
{     
    "time": "2020-08-20T12:31:32.123Z",
    "type": "platform.fault",
    "record": "RequestId: d783b35e-a91d-4251-af17-035953428a2c Process exited before completing request"
}
```

**catatan**  
AWS saat ini menerapkan perubahan pada layanan Lambda. Karena perubahan ini, Anda mungkin melihat perbedaan kecil antara struktur dan konten pesan log sistem dan segmen jejak yang dipancarkan oleh fungsi Lambda yang berbeda di Anda. Akun AWS  
Salah satu output log yang terpengaruh oleh perubahan ini adalah `"record"` bidang log kesalahan platform. Contoh berikut menunjukkan `"record"` bidang ilustrasi dalam format lama dan baru. Gaya baru log kesalahan berisi pesan yang lebih ringkas  
Perubahan ini akan diterapkan selama beberapa minggu mendatang, dan semua fungsi di semua Wilayah AWS kecuali China GovCloud dan wilayah akan bertransisi untuk menggunakan pesan log format baru dan segmen pelacakan.



**Example catatan log kesalahan platform (gaya lama)**  

```
"record":"RequestId: ...\tError: Runtime exited with error: exit status 255\nRuntime.ExitError"
```

**Example catatan log kesalahan platform (gaya baru)**  

```
"record":"RequestId: ... Status: error\tErrorType: Runtime.ExitError"
```

Lambda membuat log ekstensi platform ketika ekstensi mendaftar dengan API ekstensi. Contoh berikut ini menunjukkan pesan ekstensi platform. 

```
{     
    "time": "2020-08-20T12:31:32.123Z",
    "type": "platform.extension",
    "record": {"name": "Foo.bar",
        "state": "Ready",
        "events": ["INVOKE", "SHUTDOWN"]
     }
}
```

Lambda menghasilkan log langganan log platform saat ekstensi berlangganan API log. Contoh berikut menunjukkan pesan langganan Log. 

```
{     
    "time": "2020-08-20T12:31:32.123Z",
    "type": "platform.logsSubscription",
    "record": {"name": "Foo.bar",
        "state": "Subscribed",
        "types": ["function", "platform"],
    }
}
```

Lambda menghasilkan log yang dihapus log platform ketika ekstensi tidak dapat memproses jumlah log yang diterimanya. Contoh berikut menunjukkan pesan log `platform.logsDropped`. 

```
{     
    "time": "2020-08-20T12:31:32.123Z",
    "type": "platform.logsDropped",
    "record": {"reason": "Consumer seems to have fallen behind as it has not acknowledged receipt of logs.",
        "droppedRecords": 123,
        "droppedBytes" 12345
    }
}
```

Pesan log **Platform.RestoRestart** menunjukkan waktu `Restore` fase dimulai (`snap-start`hanya jenis inisialisasi). Contoh:

```
{ 
  "time":"2022-07-17T18:43:44.782Z", 
  "type":"platform.restoreStart", 
  "record":{} 
}
```

Pesan log **Platform.RestoreReport** menunjukkan berapa lama `Restore` fase berlangsung dan berapa milidetik Anda ditagih selama fase ini (hanya jenis inisialisasi). `snap-start` Contoh:

```
{
  "time":"2022-07-17T18:43:45.936Z",
  "type":"platform.restoreReport",
  "record":{
      "metrics":{
          "durationMs":70.87,
          "billedDurationMs":13
      }
  }
}
```

#### Pesan `runtimeDone` platform
<a name="runtimes-logs-api-ref-done"></a>

Jika Anda mengatur versi skema ke "2021-03-18" dalam permintaan berlangganan, Lambda mengirimkan pesan `platform.runtimeDone`setelah fungsi invokasi selesai baik berhasil maupun dengan kesalahan. Ekstensi dapat menggunakan pesan ini untuk menghentikan semua kumpulan telemetri untuk fungsi invokasi ini.

Spesifikasi OpenAPI untuk tipe peristiwa Log dalam versi skema **2021-03-18** tersedia di sini: [schema-2021-03-18.zip](samples/schema-2021-03-18.zip)

Lambda menghasilkan pesan log `platform.runtimeDone` ketika runtime mengirimkan permintaan API runtime `Next` atau `Error`. Log `platform.runtimeDone` memberi tahu konsumen API Log bahwa fungsi invokasi selesai. Ekstensi dapat menggunakan informasi ini untuk memutuskan kapan harus mengirim semua telemetri yang dikumpulkan selama invokasi tersebut.

##### Contoh
<a name="runtimes-logs-api-examples"></a>

Lambda mengirimkan pesan `platform.runtimeDone` setelah runtime mengirimkan permintaan NEXT ketika fungsi invokasi selesai. Contoh berikut menunjukkan pesan untuk masing-masing nilai status: sukses, kegagalan, dan waktu habis.

**Example Contoh pesan sukses**  

```
{
    "time": "2021-02-04T20:00:05.123Z",
    "type": "platform.runtimeDone",
    "record": {
       "requestId":"6f7f0961f83442118a7af6fe80b88",
       "status": "success"
    }
}
```

**Example Contoh pesan kegagalan**  

```
{
   "time": "2021-02-04T20:00:05.123Z",
   "type": "platform.runtimeDone",
   "record": {
      "requestId":"6f7f0961f83442118a7af6fe80b88",
      "status": "failure"
   }
}
```

**Example Contoh pesan waktu habis**  

```
{
   "time": "2021-02-04T20:00:05.123Z",
   "type": "platform.runtimeDone",
   "record": {
      "requestId":"6f7f0961f83442118a7af6fe80b88",
      "status": "timeout"
  }
}
```

**Example Contoh platform. restoreRuntimeDone pesan (hanya jenis `snap-start` inisialisasi)**  
**Platform. restoreRuntimeDone**pesan log menunjukkan apakah `Restore` fase berhasil atau tidak. Lambda mengirimkan pesan ini saat runtime mengirimkan permintaan API `restore/next` runtime. Ada tiga kemungkinan status: keberhasilan, kegagalan, dan batas waktu. Contoh berikut menunjukkan **platform yang sukses. restoreRuntimeDone**pesan log.  

```
{
  "time":"2022-07-17T18:43:45.936Z",
  "type":"platform.restoreRuntimeDone",
  "record":{
      "status":"success"
  }
}
```