

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

# Membangun fungsi Lambda dengan Python
<a name="lambda-python"></a>

Anda bisa menjalankan kode Python di AWS Lambda. Lambda menyediakan [runtime](lambda-runtimes.md) untuk Python yang menjalankan kode Anda untuk memproses peristiwa. Kode Anda berjalan di lingkungan yang menyertakan SDK for Python (Boto3), dengan AWS Identity and Access Management kredensi dari peran (IAM) yang Anda kelola. Untuk mempelajari lebih lanjut tentang versi SDK yang disertakan dengan runtime Python, lihat. [Versi SDK yang disertakan Runtime](#python-sdk-included)

Lambda mendukung runtime Python berikut.


| Nama | Pengidentifikasi | Sistem operasi | Tanggal pengusangan | Buat fungsi blok | Pembaruan fungsi blok | 
| --- | --- | --- | --- | --- | --- | 
|  Python 3.14  |  `python3.14`  |  Amazon Linux 2023  |   30 Jun 2029   |   31 Jul 2029   |   Agustus 31, 2029   | 
|  Python 3.13  |  `python3.13`  |  Amazon Linux 2023  |   30 Jun 2029   |   31 Jul 2029   |   Agustus 31, 2029   | 
|  Python 3.12  |  `python3.12`  |  Amazon Linux 2023  |   Okt 31, 2028   |   Nov 30, 2028   |   10 Jan 2029   | 
|  Python 3.11  |  `python3.11`  |  Amazon Linux 2  |   30 Jun 2027   |   31 Jul 2027   |   Agustus 31, 2027   | 
|  Python 3.10  |  `python3.10`  |  Amazon Linux 2  |   Okt 31, 2026   |   Nov 30, 2026   |   15 Jan 2027   | 

**Untuk membuat fungsi Python**

1. Buka [Konsol Lambda](https://console.aws.amazon.com/lambda).

1. Pilih **Buat fungsi**.

1. Konfigurasikan pengaturan berikut:
   + **Nama fungsi**: Masukkan nama untuk fungsi tersebut.
   + **Runtime**: Pilih **Python 3.14**.

1. Pilih **Buat fungsi**.

Konsol membuat fungsi Lambda dengan satu file sumber bernama `lambda_function`. Anda dapat mengedit file ini dan menambahkan lebih banyak file di editor kode bawaan. Di bagian **DEPLOY**, pilih **Deploy** untuk memperbarui kode fungsi Anda. Kemudian, untuk menjalankan kode Anda, pilih **Create test event** di bagian **TEST EVENTS**.

Fungsi Lambda Anda dilengkapi dengan grup CloudWatch log Log. Runtime fungsi mengirimkan detail tentang setiap invokasi ke CloudWatch Logs. Detail tersebut menyampaikan [log yang dihasilkan fungsi Anda](python-logging.md) selama invokasi. Jika fungsi mengembalikan kesalahan, Lambda memformat kesalahan dan mengembalikannya ke pemanggil.

**Topics**
+ [Versi SDK yang disertakan Runtime](#python-sdk-included)
+ [Fitur Python dinonaktifkan](#python-disabled-features)
+ [Format respons](#python-response-format)
+ [Shutdown anggun untuk ekstensi](#python-graceful-shutdown)
+ [Tentukan penangan fungsi Lambda dengan Python](python-handler.md)
+ [Bekerja dengan arsip file.zip untuk fungsi Python Lambda](python-package.md)
+ [Deploy fungsi Lambda Python dengan gambar kontainer](python-image.md)
+ [Bekerja dengan lapisan untuk fungsi Lambda Python](python-layers.md)
+ [Menggunakan objek konteks Lambda untuk mengambil informasi fungsi Python](python-context.md)
+ [Log dan pantau fungsi Python Lambda](python-logging.md)
+ [AWS Lambda pengujian fungsi dengan Python](python-testing.md)
+ [Menginstrumentasi kode Python di AWS Lambda](python-tracing.md)

## Versi SDK yang disertakan Runtime
<a name="python-sdk-included"></a>

Versi AWS SDK yang disertakan dalam runtime Python bergantung pada versi runtime dan versi Anda. Wilayah AWS Untuk menemukan versi SDK yang disertakan dalam runtime yang Anda gunakan, buat fungsi Lambda dengan kode berikut.

```
import boto3
import botocore

def lambda_handler(event, context):
   print(f'boto3 version: {boto3.__version__}')
   print(f'botocore version: {botocore.__version__}')
```

## Fitur Python dinonaktifkan
<a name="python-disabled-features"></a>

Tabel berikut mencantumkan fitur Python yang dinonaktifkan di runtime terkelola Lambda dan gambar dasar kontainer untuk Python. Fitur-fitur ini harus diaktifkan ketika runtime Python executable dikompilasi dan tidak dapat diaktifkan dengan menggunakan flag eksekusi waktu. [[Untuk menggunakan fitur-fitur ini di Lambda, Anda dapat menerapkan build runtime Python Anda sendiri dengan fitur ini diaktifkan, menggunakan gambar kontainer atau runtime khusus.](runtimes-custom.md)](python-image.md#python-image-clients)


| Fitur Python | Versi Python yang terpengaruh | Status | 
| --- | --- | --- | 
| Just-in-Time (JIT) kompiler | Python 3.13 dan yang lebih baru | Kompiler JIT bersifat eksperimental dan tidak direkomendasikan untuk beban kerja produksi. Oleh karena itu dinonaktifkan di runtime Lambda Python. | 
| Threading gratis | Python 3.13 dan yang lebih baru | Threading gratis (opsi untuk menonaktifkan kunci interpreter global) dinonaktifkan di build Lambda Python karena dampak kinerja pada kode single-threaded. | 

## Format respons
<a name="python-response-format"></a>

Dalam Python 3.12 dan runtime Python yang lebih baru, fungsi mengembalikan karakter Unicode sebagai bagian dari respons JSON mereka. Runtime Python sebelumnya mengembalikan urutan yang lolos untuk karakter Unicode dalam tanggapan. Misalnya, dalam Python 3.11, jika Anda mengembalikan string Unicode seperti "こんにちは“, itu lolos dari karakter Unicode dan mengembalikan “\$1 u3053\$1 u3093\$1 u306b\$1 u3061\$1 u306f”. Runtime Python 3.12 mengembalikan yang asli "”. こんにちは

Menggunakan respons Unicode mengurangi ukuran respons Lambda, membuatnya lebih mudah untuk memasukkan respons yang lebih besar ke dalam ukuran muatan maksimum 6 MB untuk fungsi sinkron. Pada contoh sebelumnya, versi escaped adalah 32 byte — dibandingkan dengan 17 byte dengan string Unicode.

Saat Anda meningkatkan ke Python 3.12 atau yang lebih baru runtime Python, Anda mungkin perlu menyesuaikan kode Anda untuk memperhitungkan format respons baru. Jika pemanggil mengharapkan Unicode lolos, Anda harus menambahkan kode ke fungsi kembali untuk melarikan diri dari Unicode secara manual, atau menyesuaikan pemanggil untuk menangani pengembalian Unicode.

## Shutdown anggun untuk ekstensi
<a name="python-graceful-shutdown"></a>

[Python 3.12 dan runtime Python yang lebih baru menawarkan kemampuan shutdown anggun yang ditingkatkan untuk fungsi dengan ekstensi eksternal.](lambda-extensions.md) Ketika Lambda mematikan lingkungan eksekusi, ia mengirimkan `SIGTERM` sinyal ke runtime dan kemudian `SHUTDOWN` peristiwa ke setiap ekstensi eksternal terdaftar. Anda dapat menangkap `SIGTERM` sinyal dalam fungsi Lambda Anda dan membersihkan sumber daya seperti koneksi database yang dibuat oleh fungsi tersebut.

Untuk mempelajari lebih lanjut tentang siklus hidup lingkungan eksekusi, lihat. [Memahami siklus hidup lingkungan pelaksanaan Lambda](lambda-runtime-environment.md) Untuk contoh cara menggunakan shutdown anggun dengan ekstensi, lihat Repositori [AWS Sampel GitHub ](https://github.com/aws-samples/graceful-shutdown-with-aws-lambda).

# Tentukan penangan fungsi Lambda dengan Python
<a name="python-handler"></a>

*Handler* fungsi Lambda Anda adalah metode dalam kode fungsi Anda yang memproses peristiwa. Saat fungsi Anda diaktifkan, Lambda menjalankan metode handler. Fungsi Anda berjalan sampai handler mengembalikan respons, keluar, atau waktu habis.

Halaman ini menjelaskan cara bekerja dengan penangan fungsi Lambda dengan Python, termasuk konvensi penamaan, tanda tangan handler yang valid, dan praktik terbaik kode. Halaman ini juga menyertakan contoh fungsi Python Lambda yang mengambil informasi tentang pesanan, menghasilkan tanda terima file teks, dan menempatkan file ini di bucket Amazon Simple Storage Service (Amazon S3).

**Topics**
+ [Contoh kode fungsi Python Lambda](#python-handler-example)
+ [Konvensi penamaan handler](#python-handler-naming)
+ [Menggunakan objek acara Lambda](#python-handler-event)
+ [Mengakses dan menggunakan objek konteks Lambda](#python-handler-context)
+ [Tanda tangan handler yang valid untuk penangan Python](#python-handler-signature)
+ [Mengembalikan nilai](#python-handler-return)
+ [Menggunakan AWS SDK untuk Python (Boto3) di handler Anda](#python-handler-sdk)
+ [Mengakses variabel lingkungan](#python-handler-env-vars)
+ [Praktik terbaik kode untuk fungsi Lambda Python](#python-handler-best-practices)

## Contoh kode fungsi Python Lambda
<a name="python-handler-example"></a>

Contoh kode fungsi Python Lambda berikut mengambil informasi tentang pesanan, menghasilkan tanda terima file teks, dan menempatkan file ini di bucket Amazon S3:

**Example Fungsi Lambda Python**  

```
import json
import os
import logging
import boto3

# Initialize the S3 client outside of the handler
s3_client = boto3.client('s3')

# Initialize the logger
logger = logging.getLogger()
logger.setLevel("INFO")

def upload_receipt_to_s3(bucket_name, key, receipt_content):
    """Helper function to upload receipt to S3"""
    
    try:
        s3_client.put_object(
            Bucket=bucket_name,
            Key=key,
            Body=receipt_content
        )
    except Exception as e:
        logger.error(f"Failed to upload receipt to S3: {str(e)}")
        raise

def lambda_handler(event, context):
    """
    Main Lambda handler function
    Parameters:
        event: Dict containing the Lambda function event data
        context: Lambda runtime context
    Returns:
        Dict containing status message
    """
    try:
        # Parse the input event
        order_id = event['Order_id']
        amount = event['Amount']
        item = event['Item']
        
        # Access environment variables
        bucket_name = os.environ.get('RECEIPT_BUCKET')
        if not bucket_name:
            raise ValueError("Missing required environment variable RECEIPT_BUCKET")

        # Create the receipt content and key destination
        receipt_content = (
            f"OrderID: {order_id}\n"
            f"Amount: ${amount}\n"
            f"Item: {item}"
        )
        key = f"receipts/{order_id}.txt"

        # Upload the receipt to S3
        upload_receipt_to_s3(bucket_name, key, receipt_content)

        logger.info(f"Successfully processed order {order_id} and stored receipt in S3 bucket {bucket_name}")
        
        return {
            "statusCode": 200,
            "message": "Receipt processed successfully"
        }

    except Exception as e:
        logger.error(f"Error processing order: {str(e)}")
        raise
```

File ini berisi bagian kode berikut:
+ `import`block: Gunakan blok ini untuk menyertakan pustaka yang dibutuhkan fungsi Lambda Anda.
+ Inisialisasi global klien SDK dan logger: Menyertakan kode inisialisasi di luar handler memanfaatkan penggunaan kembali [lingkungan eksekusi](lambda-runtime-environment.md) untuk meningkatkan kinerja fungsi Anda. Lihat [Praktik terbaik kode untuk fungsi Lambda Python](#python-handler-best-practices) untuk mempelajari selengkapnya.
+ `def upload_receipt_to_s3(bucket_name, key, receipt_content):`Ini adalah fungsi pembantu yang dipanggil oleh `lambda_handler` fungsi utama.
+ `def lambda_handler(event, context):`Ini adalah **fungsi handler utama** untuk kode Anda, yang berisi logika aplikasi utama Anda. Ketika Lambda memanggil penangan fungsi Anda, [runtime Lambda](concepts-basics.md#gettingstarted-concepts-runtime) meneruskan dua argumen ke fungsi, [objek peristiwa yang berisi data untuk fungsi Anda untuk diproses dan objek](#python-handler-event) [konteks](#python-handler-context) yang berisi informasi tentang pemanggilan fungsi.

## Konvensi penamaan handler
<a name="python-handler-naming"></a>

Nama fungsi handler yang ditentukan pada saat Anda membuat fungsi Lambda berasal dari:
+ Nama file tempat fungsi handler Lambda berada.
+ Nama fungsi handler Python.

Dalam contoh di atas, jika file bernama`lambda_function.py`, handler akan ditentukan sebagai`lambda_function.lambda_handler`. Ini adalah nama handler default yang diberikan untuk fungsi yang Anda buat menggunakan konsol Lambda.

Jika Anda membuat fungsi di konsol menggunakan nama file atau nama pengendali fungsi yang berbeda, Anda harus mengedit nama handler default.

**Untuk mengubah nama fungsi handler (konsol)**

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

1. Pilih tab **Kode**.

1. **Gulir ke bawah ke panel **pengaturan Runtime** dan pilih Edit.**

1. Di **Handler**, masukkan nama baru untuk handler fungsi Anda.

1. Pilih **Simpan**.

## Menggunakan objek acara Lambda
<a name="python-handler-event"></a>

Ketika Lambda memanggil fungsi Anda, ia meneruskan argumen [objek peristiwa](concepts-basics.md#gettingstarted-concepts-event) ke penangan fungsi. Objek JSON adalah format acara yang paling umum untuk fungsi Lambda. Dalam contoh kode di bagian sebelumnya, fungsi mengharapkan input dalam format berikut:

```
{
    "Order_id": "12345",
    "Amount": 199.99,
    "Item": "Wireless Headphones"
}
```

Jika fungsi Anda dipanggil oleh yang lain Layanan AWS, peristiwa input juga merupakan objek JSON. Format yang tepat dari objek peristiwa tergantung pada layanan yang menjalankan fungsi Anda. Untuk melihat format acara untuk layanan tertentu, lihat halaman yang sesuai di bagian [Memanggil Lambda dengan acara dari layanan lain AWS](lambda-services.md) ini.

Jika peristiwa input dalam bentuk objek JSON, runtime Lambda mengubah objek ke kamus Python. Untuk menetapkan nilai dalam input JSON ke variabel dalam kode Anda, gunakan metode kamus Python standar seperti yang diilustrasikan dalam kode contoh.

Anda juga dapat meneruskan data ke dalam fungsi Anda sebagai array JSON, atau sebagai salah satu tipe data JSON valid lainnya. Tabel berikut mendefinisikan bagaimana runtime Python mengkonversi jenis JSON ini.


| Jenis data JSON | Tipe data Python | 
| --- | --- | 
| object | kamus (dict) | 
| array | daftar (list) | 
| number | bilangan bulat (int) atau bilangan titik mengambang () float | 
| string | string (str) | 
| Boolean | Boolean () bool | 
| null | NoneType (NoneType) | 

## Mengakses dan menggunakan objek konteks Lambda
<a name="python-handler-context"></a>

Objek konteks Lambda berisi informasi tentang fungsi pemanggilan dan lingkungan eksekusi. Lambda meneruskan objek konteks ke fungsi Anda secara otomatis saat dipanggil. Anda dapat menggunakan objek konteks untuk menampilkan informasi tentang pemanggilan fungsi Anda untuk tujuan pemantauan.

Objek konteks adalah kelas Python yang didefinisikan dalam klien antarmuka runtime [Lambda](https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/main/awslambdaric/lambda_context.py). Untuk mengembalikan nilai dari salah satu properti objek konteks, gunakan metode yang sesuai pada objek konteks. Misalnya, cuplikan kode berikut menetapkan nilai `aws_request_id` properti (pengenal untuk permintaan pemanggilan) ke variabel bernama. `request` 

```
request = context.aws_request_id
```

Untuk mempelajari lebih lanjut tentang menggunakan objek konteks Lambda, dan untuk melihat daftar lengkap metode dan properti yang tersedia, lihat. [Menggunakan objek konteks Lambda untuk mengambil informasi fungsi Python](python-context.md)

## Tanda tangan handler yang valid untuk penangan Python
<a name="python-handler-signature"></a>

Saat mendefinisikan fungsi handler Anda dengan Python, fungsi tersebut harus mengambil dua argumen. [Argumen pertama adalah [objek peristiwa Lambda dan yang kedua adalah objek](#python-handler-event) konteks Lambda.](#python-handler-context) Menurut konvensi, argumen masukan ini biasanya diberi nama `event` dan`context`, tetapi Anda dapat memberi mereka nama apa pun yang Anda inginkan. Jika Anda mendeklarasikan fungsi handler Anda dengan satu argumen input, Lambda akan memunculkan kesalahan saat mencoba menjalankan fungsi Anda. Cara paling umum untuk mendeklarasikan fungsi handler dengan Python adalah sebagai berikut:

```
def lambda_handler(event, context):
```

Anda juga dapat menggunakan petunjuk tipe Python dalam deklarasi fungsi Anda, seperti yang ditunjukkan pada contoh berikut:

```
from typing import Dict, Any
      
def lambda_handler(event: Dict[str, Any], context: Any) -> Dict[str, Any]:
```

Untuk menggunakan AWS pengetikan khusus untuk peristiwa yang dihasilkan oleh other Layanan AWS dan untuk objek konteks, tambahkan `aws-lambda-typing` paket ke paket penerapan fungsi Anda. Anda dapat menginstal pustaka ini di lingkungan pengembangan Anda dengan menjalankan`pip install aws-lambda-typing`. Cuplikan kode berikut menunjukkan cara menggunakan petunjuk tipe AWS-specific. Dalam contoh ini, acara yang diharapkan adalah acara Amazon S3.

```
from aws_lambda_typing.events import S3Event
from aws_lambda_typing.context import Context
from typing import Dict, Any

def lambda_handler(event: S3Event, context: Context) -> Dict[str, Any]:
```

Anda tidak dapat menggunakan tipe `async` fungsi Python untuk fungsi handler Anda.

## Mengembalikan nilai
<a name="python-handler-return"></a>

Secara opsional, handler dapat mengembalikan nilai, yang harus JSON serializable. Jenis pengembalian umum termasuk`dict`,`list`,`str`,`int`,`float`, dan`bool`.

Apa yang terjadi pada nilai yang dikembalikan tergantung pada [jenis pemanggilan](lambda-invocation.md) dan [layanan](lambda-services.md) yang memanggil fungsi. Contoh:
+ Jika Anda menggunakan tipe `RequestResponse` pemanggilan untuk [menjalankan fungsi Lambda secara sinkron, Lambda mengembalikan hasil panggilan fungsi](invocation-sync.md) Python ke klien yang menjalankan fungsi Lambda (dalam respons HTTP terhadap permintaan pemanggilan, diserialisasikan ke JSON). Misalnya, konsol AWS Lambda menggunakan tipe invokasi `RequestResponse`, jadi ketika Anda melakukan invokasi fungsi menggunakan konsol, konsol akan menampilkan nilai yang dikembalikan.
+ Jika penangan mengembalikan objek yang tidak dapat diserialkan `json.dumps`, waktu pengoperasian akan mengembalikan kesalahan.
+ Jika penangan mengembalikan `None`, sebagaimana fungsi Python tanpa pernyataan `return` yang dilakukan secara implisit, hasil waktu pengoperasian akan mengembalikan `null`.
+ Jika Anda menggunakan tipe `Event` pemanggilan (pemanggilan [asinkron), nilainya akan dibuang.](invocation-async.md)

Dalam kode contoh, handler mengembalikan kamus Python berikut:

```
{
  "statusCode": 200,
  "message": "Receipt processed successfully"
}
```

Runtime Lambda membuat serial kamus ini dan mengembalikannya ke klien yang memanggil fungsi sebagai string JSON.

**catatan**  
Dalam Python 3.9 dan rilis yang lebih baru, Lambda menyertakan Requestid dari pemanggilan dalam respons kesalahan.

## Menggunakan AWS SDK untuk Python (Boto3) di handler Anda
<a name="python-handler-sdk"></a>

Seringkali, Anda akan menggunakan fungsi Lambda untuk berinteraksi dengan orang lain Layanan AWS dan sumber daya. Cara termudah untuk berinteraksi dengan sumber daya ini adalah dengan menggunakan file AWS SDK untuk Python (Boto3). Semua [runtime Lambda Python yang didukung](lambda-runtimes.md#runtimes-supported) menyertakan versi SDK untuk Python. Namun, kami sangat menyarankan agar Anda menyertakan SDK dalam paket penerapan fungsi Anda jika kode Anda perlu menggunakannya. Menyertakan SDK dalam paket penerapan memberi Anda kontrol penuh atas dependensi dan mengurangi risiko masalah ketidaksejajaran versi dengan pustaka lain. Lihat [Dependensi runtime dengan Python](python-package.md#python-package-dependencies) dan [Kompatibilitas mundur](runtimes-update.md#runtime-update-compatibility) untuk mempelajari lebih lanjut.

Untuk menggunakan SDK untuk Python dalam fungsi Lambda Anda, tambahkan pernyataan berikut ke blok impor di awal kode fungsi Anda:

```
import boto3
```

Gunakan `pip install` perintah untuk menambahkan `boto3` pustaka ke paket penyebaran fungsi Anda. Untuk petunjuk terperinci tentang cara menambahkan dependensi ke paket penerapan.zip, lihat. [Membuat paket penerapan.zip dengan dependensi](python-package.md#python-package-create-dependencies) Untuk mempelajari selengkapnya tentang menambahkan dependensi ke fungsi Lambda yang digunakan sebagai gambar kontainer, lihat atau. [Membuat gambar dari gambar dasar](python-image.md#python-image-create) [Membuat gambar dari gambar dasar alternatif](python-image.md#python-alt-create)

Saat menggunakan `boto3` kode Anda, Anda tidak perlu memberikan kredensil apa pun untuk menginisialisasi klien. Misalnya, dalam kode contoh, kami menggunakan baris kode berikut untuk menginisialisasi klien Amazon S3:

```
# Initialize the S3 client outside of the handler
s3_client = boto3.client('s3')
```

Dengan Python, Lambda secara otomatis membuat variabel lingkungan dengan kredensi. `boto3`SDK memeriksa variabel lingkungan fungsi Anda untuk kredensil ini selama inisialisasi.

## Mengakses variabel lingkungan
<a name="python-handler-env-vars"></a>

Dalam kode handler Anda, Anda dapat mereferensikan [variabel lingkungan](configuration-envvars.md) dengan menggunakan `os.environ.get` metode ini. Dalam kode contoh, kami mereferensikan variabel `RECEIPT_BUCKET` lingkungan yang ditentukan menggunakan baris kode berikut:

```
# Access environment variables
bucket_name = os.environ.get('RECEIPT_BUCKET')
```

Jangan lupa untuk menyertakan `import os` pernyataan di blok impor di awal kode Anda.

## Praktik terbaik kode untuk fungsi Lambda Python
<a name="python-handler-best-practices"></a>

Patuhi pedoman dalam daftar berikut untuk menggunakan praktik pengkodean terbaik saat membangun fungsi Lambda Anda:
+ **Pisahkan handler Lambda dari logika inti Anda.** Ini memungkinkan Anda untuk membuat fungsi yang lebih dapat teruji. Misalnya, di Python, ini mungkin terlihat seperti: 

  ```
  def lambda_handler(event, context):
      foo = event['foo']
      bar = event['bar']      
      result = my_lambda_function(foo, bar)
  
  def my_lambda_function(foo, bar):
      // MyLambdaFunction logic here
  ```
+ **Kontrol dependensi dalam paket penerapan fungsi Anda.** Lingkungan AWS Lambda eksekusi berisi sejumlah pustaka. Untuk runtime Node.js dan Python, ini termasuk file. AWS SDKs Untuk mengaktifkan serangkaian fitur dan pembaruan keamanan terbaru, Lambda akan memperbarui pustaka ini secara berkala. Pembaruan ini dapat memberikan perubahan kecil pada perilaku fungsi Lambda Anda. Untuk memiliki kendali penuh atas dependensi yang digunakan fungsi Anda, kemas semua dependensi Anda dengan paket deployment Anda.
+ **Minimalkan kompleksitas dependensi Anda.** Utamakan memilih kerangka kerja lebih sederhana yang cepat dimuat dalam memulai [lingkungan eksekusi](lambda-runtime-environment.md).
+ **Minimalkan ukuran paket penerapan Anda sesuai kebutuhan runtime-nya.** Ini akan mengurangi jumlah waktu yang dibutuhkan untuk mengunduh dan membongkar paket deployment Anda sebelum invokasi.

**Manfaatkan penggunaan kembali lingkungan eksekusi untuk meningkatkan kinerja fungsi Anda.** Inisialisasi klien SDK dan koneksi basis data di luar fungsi handler, dan lakukan caching aset statis secara lokal di direktori `/tmp`. Invokasi selanjutnya yang diproses oleh instans yang sama dari fungsi Anda dapat menggunakan kembali sumber daya ini. Ini menghemat biaya dengan mengurangi waktu pengoperasian fungsi.

Untuk menghindari potensi kebocoran data di seluruh invokasi, jangan menggunakan lingkungan eksekusi untuk menyimpan data pengguna, peristiwa, atau informasi lainnya implikasi keamanan. Jika fungsi Anda bergantung pada status yang dapat disenyapkan yang tidak dapat disimpan dalam memori di dalam handler, pertimbangkan untuk membuat fungsi terpisah atau versi terpisah dari fungsi untuk setiap pengguna.

**Gunakan arahan keep-alive untuk mempertahankan koneksi yang persisten.** Lambda membersihkan koneksi idle dari waktu ke waktu. Mencoba menggunakan ulang koneksi idle saat mengidentifikasi suatu fungsi akan menyebabkan kesalahan koneksi. Untuk mempertahankan koneksi yang persisten, gunakan arahan tetap aktif yang berkaitan dengan runtime Anda. Sebagai contoh, lihat [Menggunakan Kembali Koneksi dengan Keep-Alive di Node.js](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/node-reusing-connections.html).

**Gunakan [variabel lingkungan](configuration-envvars.md) untuk meneruskan parameter operasional ke fungsi Anda.** Misalnya, jika Anda ingin menulis ke bucket Amazon S3 alih-alih melakukan hard-coding nama bucket yang Anda tulis, konfigurasikan nama bucket sebagai variabel lingkungan.

**Hindari menggunakan pemanggilan rekursif** dalam fungsi Lambda Anda, di mana fungsi memanggil dirinya sendiri atau memulai proses yang dapat memanggil fungsi lagi. Hal ini dapat menyebabkan volume invokasi fungsi yang tidak diinginkan dan peningkatan biaya. Jika Anda melihat volume pemanggilan yang tidak diinginkan, setel konkurensi fungsi cadangan untuk `0` segera membatasi semua pemanggilan ke fungsi, saat Anda memperbarui kode.

**Jangan gunakan non-dokumen, non-publik APIs** dalam kode fungsi Lambda Anda. Untuk runtime AWS Lambda terkelola, Lambda secara berkala menerapkan pembaruan keamanan dan fungsional ke internal Lambda. APIs Pembaruan API internal ini mungkin tidak kompatibel ke belakang, yang menyebabkan konsekuensi yang tidak diinginkan seperti kegagalan pemanggilan jika fungsi Anda memiliki ketergantungan pada non-publik ini. APIs Lihat [referensi API](https://docs.aws.amazon.com/lambda/latest/api/welcome.html) untuk daftar yang tersedia APIs untuk umum.

**Tulis kode idempoten.** Menulis kode idempoten untuk fungsi Anda memastikan bahwa peristiwa duplikat ditangani dengan cara yang sama. Kode Anda harus memvalidasi peristiwa dengan benar dan menangani peristiwa duplikat dengan anggun. Untuk informasi selengkapnya, lihat [Bagaimana cara membuat fungsi Lambda saya idempoten?](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-idempotent/) .

# Bekerja dengan arsip file.zip untuk fungsi Python Lambda
<a name="python-package"></a>

 Kode AWS Lambda fungsi Anda terdiri dari file.py yang berisi kode handler fungsi Anda, bersama dengan paket dan modul tambahan yang bergantung pada kode Anda. *Untuk menyebarkan kode fungsi ini ke Lambda, Anda menggunakan paket penerapan.* Paket ini dapat berupa arsip file.zip atau gambar kontainer. Untuk informasi selengkapnya tentang penggunaan gambar kontainer dengan Python, lihat [Menerapkan fungsi Lambda Python](https://docs.aws.amazon.com/lambda/latest/dg/python-image.html) dengan gambar kontainer. 

 [Untuk membuat paket penyebaran Anda sebagai arsip file.zip, Anda dapat menggunakan utilitas arsip file.zip bawaan alat baris perintah Anda, atau utilitas file.zip lainnya seperti 7zip.](https://www.7-zip.org/download.html) Contoh yang ditampilkan di bagian berikut mengasumsikan Anda menggunakan `zip` alat baris perintah di lingkungan Linux atau macOS. Untuk menggunakan perintah yang sama di Windows, Anda dapat [menginstal Windows Subsystem untuk Linux untuk](https://docs.microsoft.com/en-us/windows/wsl/install-win10) mendapatkan versi Windows terintegrasi dari Ubuntu dan Bash. 

 Perhatikan bahwa Lambda menggunakan izin file POSIX, jadi Anda mungkin perlu [mengatur izin untuk folder paket penyebaran](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-deployment-package-errors/) sebelum membuat arsip file.zip. 

**Topics**
+ [Dependensi runtime dengan Python](#python-package-dependencies)
+ [Membuat paket penerapan.zip tanpa dependensi](#python-package-create-no-dependencies)
+ [Membuat paket penerapan.zip dengan dependensi](#python-package-create-dependencies)
+ [Jalur pencarian ketergantungan dan pustaka yang disertakan runtime](#python-package-searchpath)
+ [Menggunakan folder \$1\$1pycache\$1\$1](#python-package-pycache)
+ [Membuat paket penerapan.zip dengan pustaka asli](#python-package-native-libraries)
+ [Membuat dan memperbarui fungsi Lambda Python menggunakan file.zip](#python-package-create-update)

## Dependensi runtime dengan Python
<a name="python-package-dependencies"></a>

Untuk fungsi Lambda yang menggunakan runtime Python, dependensi dapat berupa paket atau modul Python apa pun. [Ketika Anda menerapkan fungsi Anda menggunakan arsip.zip, Anda dapat menambahkan dependensi ini ke file.zip Anda dengan kode fungsi Anda atau menggunakan lapisan Lambda.](chapter-layers.md) Lapisan adalah file.zip terpisah yang dapat berisi kode tambahan dan konten lainnya. Untuk mempelajari lebih lanjut tentang menggunakan layer Lambda dengan Python, lihat. [Bekerja dengan lapisan untuk fungsi Lambda Python](python-layers.md)

Runtime Lambda Python mencakup dan dependensinya. AWS SDK untuk Python (Boto3) Lambda menyediakan SDK dalam runtime untuk skenario penerapan di mana Anda tidak dapat menambahkan dependensi Anda sendiri. Skenario ini termasuk membuat fungsi di konsol menggunakan editor kode bawaan atau menggunakan fungsi inline in AWS Serverless Application Model (AWS SAM) atau CloudFormation template.

Lambda secara berkala memperbarui pustaka di runtime Python untuk menyertakan pembaruan terbaru dan patch keamanan. Jika fungsi Anda menggunakan versi Boto3 SDK yang disertakan dalam runtime tetapi paket penerapan Anda menyertakan dependensi SDK, ini dapat menyebabkan masalah ketidaksejajaran versi. Misalnya, paket penerapan Anda dapat menyertakan urllib3 dependensi SDK. Saat Lambda memperbarui SDK di runtime, masalah kompatibilitas antara versi baru runtime dan versi urllib3 dalam paket penerapan dapat menyebabkan fungsi Anda gagal.

**penting**  
Untuk mempertahankan kontrol penuh atas dependensi Anda dan untuk menghindari kemungkinan masalah ketidaksejajaran versi, kami sarankan Anda menambahkan semua dependensi fungsi Anda ke paket penerapan Anda, meskipun versinya disertakan dalam runtime Lambda. Ini termasuk Boto3 SDK.

Untuk mengetahui versi SDK for Python (Boto3) mana yang disertakan dalam runtime yang Anda gunakan, lihat. [Versi SDK yang disertakan Runtime](lambda-python.md#python-sdk-included)

 Di bawah [model tanggung jawab AWS bersama](https://docs.aws.amazon.com/whitepapers/latest/aws-risk-and-compliance/shared-responsibility-model.html), Anda bertanggung jawab atas pengelolaan dependensi apa pun dalam paket penerapan fungsi Anda. Ini termasuk menerapkan pembaruan dan patch keamanan. Untuk memperbarui dependensi dalam paket penerapan fungsi Anda, pertama buat file.zip baru dan kemudian unggah ke Lambda. Lihat [Membuat paket penerapan.zip dengan dependensi](#python-package-create-dependencies) dan [Membuat dan memperbarui fungsi Lambda Python menggunakan file.zip](#python-package-create-update) untuk informasi lebih lanjut.

## Membuat paket penerapan.zip tanpa dependensi
<a name="python-package-create-no-dependencies"></a>

 Jika kode fungsi Anda tidak memiliki dependensi, file.zip Anda hanya berisi file.py dengan kode handler fungsi Anda. Gunakan utilitas zip pilihan Anda untuk membuat file.zip dengan file.py Anda di root. Jika file.py tidak berada di root file.zip Anda, Lambda tidak akan dapat menjalankan kode Anda. 

 Untuk mempelajari cara menerapkan file.zip Anda untuk membuat fungsi Lambda baru atau memperbarui yang sudah ada, lihat. [Membuat dan memperbarui fungsi Lambda Python menggunakan file.zip](#python-package-create-update) 

## Membuat paket penerapan.zip dengan dependensi
<a name="python-package-create-dependencies"></a>

 Jika kode fungsi Anda bergantung pada paket atau modul tambahan, Anda dapat menambahkan dependensi ini ke file.zip Anda dengan kode fungsi Anda atau [menggunakan lapisan Lambda](python-layers.md). Petunjuk di bagian ini menunjukkan cara memasukkan dependensi Anda ke dalam paket penerapan.zip Anda. Agar Lambda menjalankan kode Anda, file.py yang berisi kode handler Anda dan semua dependensi fungsi Anda harus diinstal di root file.zip.

 Misalkan kode fungsi Anda disimpan dalam file bernama`lambda_function.py`. Contoh perintah CLI berikut membuat file.zip bernama `my_deployment_package.zip` berisi kode fungsi Anda dan dependensinya. Anda dapat menginstal dependensi Anda langsung ke folder di direktori proyek Anda atau menggunakan lingkungan virtual Python. 

**Untuk membuat paket penyebaran (direktori proyek)**

1. Arahkan ke direktori proyek yang berisi file kode `lambda_function.py` sumber Anda. Dalam contoh ini, direktori diberi nama`my_function`.

   ```
   cd my_function
   ```

1. Buat direktori baru bernama paket di mana Anda akan menginstal dependensi Anda.

   ```
   mkdir package
   ```

   Perhatikan bahwa untuk paket penyebaran.zip, Lambda mengharapkan kode sumber Anda dan semua dependensinya berada di root file.zip. Namun, menginstal dependensi langsung di direktori proyek Anda dapat memperkenalkan sejumlah besar file dan folder baru dan membuat navigasi di sekitar IDE Anda menjadi sulit. Anda membuat `package` direktori terpisah di sini untuk menjaga dependensi Anda terpisah dari kode sumber Anda.

1. Instal dependensi Anda di direktori. `package` Contoh di bawah ini menginstal Boto3 SDK dari Python Package Index menggunakan pip. Jika kode fungsi Anda menggunakan paket Python yang telah Anda buat sendiri, simpan di direktori. `package`

   ```
   pip install --target ./package boto3
   ```

1. Buat file.zip dengan pustaka yang diinstal di root.

   ```
   cd package
   zip -r ../my_deployment_package.zip .
   ```

   Ini menghasilkan file `my_deployment_package.zip` di direktori proyek Anda.

1. Tambahkan file lambda\$1function.py ke root dari file.zip

   ```
   cd ..
   zip my_deployment_package.zip lambda_function.py
   ```

   File.zip Anda harus memiliki struktur direktori datar, dengan kode handler fungsi Anda dan semua folder dependensi Anda diinstal di root sebagai berikut.

   ```
   my_deployment_package.zip
   |- bin
   |  |-jp.py
   |- boto3
   |  |-compat.py
   |  |-data
   |  |-docs
   ...
   |- lambda_function.py
   ```

   Jika file.py yang berisi kode handler fungsi Anda tidak berada di root file.zip Anda, Lambda tidak akan dapat menjalankan kode Anda.

**Untuk membuat paket penyebaran (lingkungan virtual)**

1. Buat dan aktifkan lingkungan virtual di direktori proyek Anda. Dalam contoh ini direktori proyek diberi nama`my_function`.

   ```
   ~$ cd my_function
   ~/my_function$ python3.14 -m venv my_virtual_env
   ~/my_function$ source ./my_virtual_env/bin/activate
   ```

1. Instal pustaka yang Anda butuhkan menggunakan pip. Contoh berikut menginstal Boto3 SDK

   ```
   (my_virtual_env) ~/my_function$ pip install boto3
   ```

1. Gunakan `pip show` untuk menemukan lokasi di lingkungan virtual Anda di mana pip telah menginstal dependensi Anda.

   ```
   (my_virtual_env) ~/my_function$ pip show <package_name>
   ```

   Folder tempat pip menginstal pustaka Anda dapat diberi nama atau. `site-packages` `dist-packages` Folder ini mungkin terletak di `lib64/python3.x` direktori `lib/python3.x` or (di mana python3.x mewakili versi Python yang Anda gunakan).

1. Nonaktifkan lingkungan virtual

   ```
   (my_virtual_env) ~/my_function$ deactivate
   ```

1. Arahkan ke direktori yang berisi dependensi yang Anda instal dengan pip dan buat file.zip di direktori proyek Anda dengan dependensi yang diinstal di root. Dalam contoh ini, pip telah menginstal dependensi Anda di direktori. `my_virtual_env/lib/python3.14/site-packages`

   ```
   ~/my_function$ cd my_virtual_env/lib/python3.14/site-packages
   ~/my_function/my_virtual_env/lib/python3.14/site-packages$ zip -r ../../../../my_deployment_package.zip .
   ```

1. Arahkan ke root direktori proyek Anda di mana file.py yang berisi kode handler Anda berada dan tambahkan file itu ke root paket.zip Anda. Dalam contoh ini, file kode fungsi Anda diberi nama`lambda_function.py`.

   ```
   ~/my_function/my_virtual_env/lib/python3.14/site-packages$ cd ../../../../
   ~/my_function$ zip my_deployment_package.zip lambda_function.py
   ```

## Jalur pencarian ketergantungan dan pustaka yang disertakan runtime
<a name="python-package-searchpath"></a>

 Saat Anda menggunakan `import` pernyataan dalam kode Anda, runtime Python mencari direktori di jalur pencariannya hingga menemukan modul atau paket. Secara default, lokasi pertama pencarian runtime adalah direktori tempat paket deployment .zip Anda didekompresi dan dipasang (). `/var/task` Jika Anda menyertakan versi pustaka yang disertakan runtime dalam paket penerapan, versi Anda akan lebih diutamakan daripada versi yang disertakan dalam runtime. Dependensi dalam paket penerapan Anda juga lebih diutamakan daripada dependensi dalam lapisan. 

 Saat Anda menambahkan dependensi ke lapisan, Lambda mengekstrak ini `/opt/python/lib/python3.x/site-packages` ke (`python3.x`di mana mewakili versi runtime yang Anda gunakan) atau. `/opt/python` Di jalur pencarian, direktori ini lebih diutamakan daripada direktori yang berisi pustaka yang disertakan runtime dan pustaka yang diinstal pip (dan). `/var/runtime` `/var/lang/lib/python3.x/site-packages` Oleh karena itu, pustaka di lapisan fungsi lebih diutamakan daripada versi yang disertakan dalam runtime. 

**catatan**  
Dalam runtime terkelola Python 3.11 dan image dasar, AWS SDK dan dependensinya diinstal di direktori. `/var/lang/lib/python3.11/site-packages`

 Anda dapat melihat jalur pencarian lengkap untuk fungsi Lambda Anda dengan menambahkan cuplikan kode berikut. 

```
import sys
      
search_path = sys.path
print(search_path)
```

**catatan**  
Karena dependensi dalam paket atau lapisan penerapan Anda lebih diutamakan daripada pustaka yang disertakan runtime, hal ini dapat menyebabkan masalah ketidaksejajaran versi jika Anda menyertakan dependensi SDK seperti urllib3 dalam paket Anda tanpa menyertakan SDK juga. Jika Anda menerapkan versi dependensi Boto3 Anda sendiri, Anda juga harus menerapkan Boto3 sebagai dependensi dalam paket penerapan Anda. Kami menyarankan Anda mengemas semua dependensi fungsi Anda, bahkan jika versinya disertakan dalam runtime.

 Anda juga dapat menambahkan dependensi di folder terpisah di dalam paket.zip Anda. Misalnya, Anda dapat menambahkan versi Boto3 SDK ke folder dalam paket.zip yang disebut. `common` Ketika paket.zip Anda didekompresi dan dipasang, folder ini ditempatkan di dalam direktori. `/var/task` Untuk menggunakan dependensi dari folder dalam paket deployment .zip Anda dalam kode Anda, gunakan pernyataan. `import from` Misalnya, untuk menggunakan versi Boto3 dari folder bernama `common` dalam paket.zip Anda, gunakan pernyataan berikut. 

```
from common import boto3
```

## Menggunakan folder \$1\$1pycache\$1\$1
<a name="python-package-pycache"></a>

 Kami menyarankan agar Anda tidak menyertakan `__pycache__` folder dalam paket penerapan fungsi Anda. Bytecode Python yang dikompilasi pada mesin build dengan arsitektur atau sistem operasi yang berbeda mungkin tidak kompatibel dengan lingkungan eksekusi Lambda. 

## Membuat paket penerapan.zip dengan pustaka asli
<a name="python-package-native-libraries"></a>

 Jika fungsi Anda hanya menggunakan paket dan modul Python murni, Anda dapat menggunakan `pip install` perintah untuk menginstal dependensi Anda pada mesin build lokal mana pun dan membuat file.zip Anda. Banyak pustaka Python populer, termasuk NumPy dan Panda, bukan Python murni dan berisi kode yang ditulis dalam C atau C \$1\$1. Saat menambahkan pustaka yang berisi kode C/C\$1\$1 ke paket penerapan, Anda harus membuat paket dengan benar untuk memastikan bahwa paket tersebut kompatibel dengan lingkungan eksekusi Lambda. 

 Sebagian besar paket yang tersedia di Indeks Paket Python ([PyPI](https://pypi.org/)) tersedia sebagai “roda” (file.whl). File WHL adalah jenis file ZIP yang berisi distribusi yang dibangun dengan binari pra-kompilasi untuk sistem operasi tertentu dan arsitektur set instruksi. Untuk membuat paket penyebaran Anda kompatibel dengan Lambda, Anda menginstal roda untuk sistem operasi Linux dan arsitektur set instruksi fungsi Anda. 

 Beberapa paket mungkin hanya tersedia sebagai distribusi sumber. Untuk paket-paket ini, Anda perlu mengkompilasi dan membangun komponen C/C\$1\$1 sendiri. 

 Untuk melihat distribusi apa yang tersedia untuk paket yang Anda butuhkan, lakukan hal berikut: 

1. Cari nama paket di halaman [utama Python Package Index](https://pypi.org/).

1. Pilih versi paket yang ingin Anda gunakan.

1. Pilih **Unduh file**.

### Bekerja dengan distribusi yang dibangun (roda)
<a name="python-package-wheels"></a>

 Untuk mengunduh roda yang kompatibel dengan Lambda, Anda menggunakan opsi pip`--platform`. 

 Jika fungsi Lambda Anda menggunakan arsitektur set instruksi **x86\$164**, jalankan `pip install` perintah berikut untuk menginstal roda yang kompatibel di direktori Anda. `package` Ganti `--python 3.x` dengan versi runtime Python yang Anda gunakan. 

```
pip install \
--platform manylinux2014_x86_64 \
--target=package \
--implementation cp \
--python-version 3.x \
--only-binary=:all: --upgrade \
<package_name>
```

 Jika fungsi Anda menggunakan arsitektur set instruksi **arm64**, jalankan perintah berikut. Ganti `--python 3.x` dengan versi runtime Python yang Anda gunakan. 

```
pip install \
--platform manylinux2014_aarch64 \
--target=package \
--implementation cp \
--python-version 3.x \
--only-binary=:all: --upgrade \
<package_name>
```

### Bekerja dengan distribusi sumber
<a name="python-package-source-dist"></a>

 Jika paket Anda hanya tersedia sebagai distribusi sumber, Anda perlu membuat pustaka C/C\$1\$1 sendiri. Untuk membuat paket Anda kompatibel dengan lingkungan eksekusi Lambda, Anda perlu membangunnya di lingkungan yang menggunakan sistem operasi Amazon Linux yang sama. Anda dapat melakukan ini dengan membuat paket Anda di instance Amazon Elastic Compute Cloud (Amazon EC2) Linux. 

 Untuk mempelajari cara meluncurkan dan menyambung ke instans Amazon EC2 Linux, lihat [Memulai Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html) di *Panduan EC2 Pengguna Amazon*. 

## Membuat dan memperbarui fungsi Lambda Python menggunakan file.zip
<a name="python-package-create-update"></a>

 Setelah Anda membuat paket.zip deployment, Anda dapat menggunakannya untuk membuat fungsi Lambda baru atau memperbarui yang sudah ada. Anda dapat menerapkan paket.zip Anda menggunakan konsol Lambda, API, AWS Command Line Interface dan Lambda. Anda juga dapat membuat dan memperbarui fungsi Lambda menggunakan AWS Serverless Application Model (AWS SAM) dan. CloudFormation

Ukuran maksimum untuk paket.zip deployment untuk Lambda adalah 250 MB (unzip). Perhatikan bahwa batas ini berlaku untuk ukuran gabungan semua file yang Anda unggah, termasuk lapisan Lambda apa pun.

Runtime Lambda membutuhkan izin untuk membaca file dalam paket deployment Anda. Dalam notasi oktal izin Linux, Lambda membutuhkan 644 izin untuk file yang tidak dapat dieksekusi (rw-r - r--) dan 755 izin () untuk direktori dan file yang dapat dieksekusi. rwxr-xr-x

Di Linux dan macOS, gunakan `chmod` perintah untuk mengubah izin file pada file dan direktori dalam paket penyebaran Anda. Misalnya, untuk memberikan file yang tidak dapat dieksekusi izin yang benar, jalankan perintah berikut.

```
chmod 644 <filepath>
```

Untuk mengubah izin file di Windows, lihat [Mengatur, Melihat, Mengubah, atau Menghapus Izin pada Objek](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc731667(v=ws.10)) dalam dokumentasi Microsoft Windows.

**catatan**  
Jika Anda tidak memberikan Lambda izin yang diperlukan untuk mengakses direktori dalam paket penerapan Anda, Lambda menetapkan izin untuk direktori tersebut ke 755 (). rwxr-xr-x

### Membuat dan memperbarui fungsi dengan file.zip menggunakan konsol
<a name="python-package-create-console"></a>

 Untuk membuat fungsi baru, Anda harus terlebih dahulu membuat fungsi di konsol, lalu mengunggah arsip.zip Anda. Untuk memperbarui fungsi yang ada, buka halaman untuk fungsi Anda, lalu ikuti prosedur yang sama untuk menambahkan file.zip Anda yang diperbarui. 

 Jika file.zip Anda kurang dari 50MB, Anda dapat membuat atau memperbarui fungsi dengan mengunggah file langsung dari mesin lokal Anda. Untuk file.zip yang lebih besar dari 50MB, Anda harus mengunggah paket Anda ke bucket Amazon S3 terlebih dahulu. Untuk petunjuk tentang cara mengunggah file ke bucket Amazon S3 menggunakan Konsol Manajemen AWS, lihat [Memulai Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html). Untuk mengunggah file menggunakan AWS CLI, lihat [Memindahkan objek](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-managing-objects-move) di *Panduan AWS CLI Pengguna*. 

**catatan**  
Anda tidak dapat mengubah [jenis paket penerapan](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html#lambda-CreateFunction-request-PackageType) (.zip atau image kontainer) untuk fungsi yang ada. Misalnya, Anda tidak dapat mengonversi fungsi gambar kontainer untuk menggunakan arsip file.zip. Anda harus membuat fungsi baru.

**Untuk membuat fungsi baru (konsol)**

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

1. Pilih **Tulis dari awal**.

1. Di bagian **Informasi dasar**, lakukan hal berikut:

   1. Untuk **nama Fungsi**, masukkan nama untuk fungsi Anda.

   1. Untuk **Runtime**, pilih runtime yang ingin Anda gunakan.

   1. (Opsional) Untuk **Arsitektur**, pilih arsitektur set instruksi untuk fungsi Anda. Arsitektur defaultnya adalah x86\$164. Pastikan bahwa paket deployment .zip untuk fungsi Anda kompatibel dengan arsitektur set instruksi yang Anda pilih.

1. (Opsional) Di bagian **Izin**, luaskan **Ubah peran eksekusi default**. Anda dapat membuat **peran Eksekusi** baru atau menggunakan yang sudah ada.

1. Pilih **Buat fungsi**. Lambda menciptakan fungsi dasar 'Hello world' menggunakan runtime yang Anda pilih.

**Untuk mengunggah arsip.zip dari mesin lokal Anda (konsol)**

1. Di [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) konsol Lambda, pilih fungsi yang ingin Anda unggah file.zip.

1. Pilih tab **Kode**.

1. Di panel **Sumber kode**, pilih **Unggah dari**.

1. Pilih **file.zip**.

1. Untuk mengunggah file.zip, lakukan hal berikut:

   1. Pilih **Unggah**, lalu pilih file.zip Anda di pemilih file.

   1. Pilih **Buka**.

   1. Pilih **Simpan**.

**Untuk mengunggah arsip.zip dari bucket Amazon S3 (konsol)**

1. Di [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) konsol Lambda, pilih fungsi yang ingin Anda unggah file.zip baru.

1. Pilih tab **Kode**.

1. Di panel **Sumber kode**, pilih **Unggah dari**.

1. Pilih **lokasi Amazon S3**.

1. **Rekatkan URL tautan Amazon S3 dari file.zip Anda dan pilih Simpan.**

### Memperbarui fungsi file.zip menggunakan editor kode konsol
<a name="python-package-console-edit"></a>

 Untuk beberapa fungsi dengan paket penyebaran.zip, Anda dapat menggunakan editor kode bawaan konsol Lambda untuk memperbarui kode fungsi Anda secara langsung. Untuk menggunakan fitur ini, fungsi Anda harus memenuhi kriteria berikut: 
+ Fungsi Anda harus menggunakan salah satu runtime bahasa yang ditafsirkan (Python, Node.js, atau Ruby)
+ Paket penerapan fungsi Anda harus lebih kecil dari 50 MB (unzip).

Kode fungsi untuk fungsi dengan paket penerapan gambar kontainer tidak dapat diedit langsung di konsol.

**Untuk memperbarui kode fungsi menggunakan editor kode konsol**

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

1. Pilih tab **Kode**.

1. Di panel **Sumber kode**, pilih file kode sumber Anda dan edit di editor kode terintegrasi.

1. Di bagian **DEPLOY**, pilih **Deploy** untuk memperbarui kode fungsi Anda:  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

### Membuat dan memperbarui fungsi dengan file.zip menggunakan AWS CLI
<a name="python-package-create-cli"></a>

 Anda dapat menggunakan [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)untuk membuat fungsi baru atau memperbarui yang sudah ada menggunakan file.zip. Gunakan [create-function](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html) dan [update-function-code](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html)perintah untuk menyebarkan paket.zip Anda. Jika file.zip Anda lebih kecil dari 50MB, Anda dapat mengunggah paket.zip dari lokasi file di mesin build lokal Anda. Untuk file yang lebih besar, Anda harus mengunggah paket.zip Anda dari bucket Amazon S3. Untuk petunjuk tentang cara mengunggah file ke bucket Amazon S3 menggunakan AWS CLI, lihat [Memindahkan objek](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-managing-objects-move) di *AWS CLI Panduan Pengguna*. 

**catatan**  
Jika Anda mengunggah file.zip dari bucket Amazon S3 menggunakan AWS CLI, bucket harus berada di lokasi yang Wilayah AWS sama dengan fungsi Anda.

 Untuk membuat fungsi baru menggunakan file.zip dengan AWS CLI, Anda harus menentukan yang berikut: 
+ Nama fungsi Anda (`--function-name`)
+ Runtime () `--runtime` fungsi Anda
+ Nama Sumber Daya Amazon (ARN) dari [peran eksekusi](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) fungsi Anda () `--role`
+ Nama metode handler dalam kode fungsi Anda () `--handler`

 Anda juga harus menentukan lokasi file.zip Anda. Jika file.zip Anda terletak di folder di mesin build lokal Anda, gunakan `--zip-file` opsi untuk menentukan jalur file, seperti yang ditunjukkan pada perintah contoh berikut. 

```
aws lambda create-function --function-name myFunction \
--runtime python3.14 --handler lambda_function.lambda_handler \
--role arn:aws:iam::111122223333:role/service-role/my-lambda-role \
--zip-file fileb://myFunction.zip
```

 Untuk menentukan lokasi file.zip di bucket Amazon S3, gunakan opsi seperti `--code` yang ditunjukkan pada perintah contoh berikut. Anda hanya perlu menggunakan `S3ObjectVersion` parameter untuk objek berversi. 

```
aws lambda create-function --function-name myFunction \
--runtime python3.14 --handler lambda_function.lambda_handler \
--role arn:aws:iam::111122223333:role/service-role/my-lambda-role \
--code S3Bucket=amzn-s3-demo-bucket,S3Key=myFileName.zip,S3ObjectVersion=myObjectVersion
```

 Untuk memperbarui fungsi yang ada menggunakan CLI, Anda menentukan nama fungsi Anda menggunakan parameter. `--function-name` Anda juga harus menentukan lokasi file.zip yang ingin Anda gunakan untuk memperbarui kode fungsi Anda. Jika file.zip Anda terletak di folder di mesin build lokal Anda, gunakan `--zip-file` opsi untuk menentukan jalur file, seperti yang ditunjukkan pada perintah contoh berikut. 

```
aws lambda update-function-code --function-name myFunction \
--zip-file fileb://myFunction.zip
```

 Untuk menentukan lokasi file.zip di bucket Amazon S3, gunakan opsi `--s3-key` dan seperti `--s3-bucket` yang ditunjukkan pada perintah contoh berikut. Anda hanya perlu menggunakan `--s3-object-version` parameter untuk objek berversi. 

```
aws lambda update-function-code --function-name myFunction \
--s3-bucket amzn-s3-demo-bucket --s3-key myFileName.zip --s3-object-version myObject Version
```

### Membuat dan memperbarui fungsi dengan file.zip menggunakan API Lambda
<a name="python-package-create-api"></a>

 Untuk membuat dan memperbarui fungsi menggunakan arsip file.zip, gunakan operasi API berikut: 
+ [CreateFunction](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html)
+ [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)

### Membuat dan memperbarui fungsi dengan file.zip menggunakan AWS SAM
<a name="python-package-create-sam"></a>

 The AWS Serverless Application Model (AWS SAM) adalah toolkit yang membantu merampingkan proses membangun dan menjalankan aplikasi tanpa server. AWS Anda menentukan sumber daya untuk aplikasi Anda dalam template YAMAL atau JSON dan menggunakan antarmuka baris AWS SAM perintah (AWS SAM CLI) untuk membangun, mengemas, dan menyebarkan aplikasi Anda. Saat Anda membuat fungsi Lambda dari AWS SAM template, AWS SAM secara otomatis membuat paket penerapan .zip atau gambar kontainer dengan kode fungsi Anda dan dependensi apa pun yang Anda tentukan. Untuk mempelajari lebih lanjut cara menggunakan AWS SAM untuk membangun dan menerapkan fungsi Lambda, [lihat Memulai](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started.html) di Panduan AWS SAM*AWS Serverless Application Model Pengembang*.

Anda juga dapat menggunakan AWS SAM untuk membuat fungsi Lambda menggunakan arsip file.zip yang ada. Untuk membuat fungsi Lambda menggunakan AWS SAM, Anda dapat menyimpan file.zip di bucket Amazon S3 atau di folder lokal di mesin build Anda. Untuk petunjuk tentang cara mengunggah file ke bucket Amazon S3 menggunakan AWS CLI, lihat [Memindahkan objek](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-managing-objects-move) di *AWS CLI Panduan Pengguna*. 

 Dalam AWS SAM template Anda, `AWS::Serverless::Function` sumber daya menentukan fungsi Lambda Anda. Dalam sumber daya ini, atur properti berikut untuk membuat fungsi menggunakan arsip file.zip: 
+ `PackageType`- diatur ke `Zip`
+ `CodeUri`- diatur ke kode fungsi Amazon S3 URI, jalur ke folder lokal, atau objek [FunctionCode](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-function-functioncode.html)
+ `Runtime`- Setel ke runtime yang Anda pilih

 Dengan AWS SAM, jika file.zip Anda lebih besar dari 50MB, Anda tidak perlu mengunggahnya ke bucket Amazon S3 terlebih dahulu. AWS SAM dapat mengunggah paket.zip hingga ukuran maksimum yang diizinkan 250MB (unzip) dari lokasi di mesin build lokal Anda. 

 Untuk mempelajari selengkapnya tentang penerapan fungsi menggunakan file.zip AWS SAM, lihat [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html)di Panduan *AWS SAM Pengembang*. 

### Membuat dan memperbarui fungsi dengan file.zip menggunakan CloudFormation
<a name="python-package-create-cfn"></a>

 Anda dapat menggunakan CloudFormation untuk membuat fungsi Lambda menggunakan arsip file.zip. Untuk membuat fungsi Lambda dari file.zip, Anda harus terlebih dahulu mengunggah file Anda ke bucket Amazon S3. Untuk petunjuk tentang cara mengunggah file ke bucket Amazon S3 menggunakan AWS CLI, lihat [Memindahkan objek](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-managing-objects-move) di *AWS CLI Panduan Pengguna*.

Untuk runtime Node.js dan Python, Anda juga dapat memberikan kode sumber inline di template Anda. CloudFormation CloudFormation kemudian buat file.zip yang berisi kode Anda saat Anda membangun fungsi Anda. 

**Menggunakan file.zip yang ada**

Dalam CloudFormation template Anda, `AWS::Lambda::Function` sumber daya menentukan fungsi Lambda Anda. Dalam sumber daya ini, atur properti berikut untuk membuat fungsi menggunakan arsip file.zip:
+ `PackageType`- Setel ke `Zip`
+ `Code`- Masukkan nama bucket Amazon S3 dan nama file.zip di dan bidang `S3Bucket` `S3Key`
+ `Runtime`- Setel ke runtime yang Anda pilih

**Membuat file.zip dari kode sebaris**

Anda dapat mendeklarasikan fungsi sederhana yang ditulis dengan Python atau Node.js inline dalam template. CloudFormation Karena kode disematkan di YAMAL atau JSON, Anda tidak dapat menambahkan dependenis eksternal apa pun ke paket penerapan Anda. Ini berarti fungsi Anda harus menggunakan versi AWS SDK yang disertakan dalam runtime. Persyaratan template, seperti harus melarikan diri dari karakter tertentu, juga mempersulit penggunaan fitur pemeriksaan sintaks dan penyelesaian kode IDE Anda. Ini berarti bahwa template Anda mungkin memerlukan pengujian tambahan. Karena keterbatasan ini, mendeklarasikan fungsi inline paling cocok untuk kode yang sangat sederhana yang tidak sering berubah. 

Untuk membuat file.zip dari kode inline untuk runtime Node.js dan Python, atur properti berikut di sumber daya template Anda: `AWS::Lambda::Function`
+ `PackageType`- Setel ke `Zip`
+ `Code`- Masukkan kode fungsi Anda di `ZipFile` bidang
+ `Runtime`- Setel ke runtime yang Anda pilih

 File.zip yang CloudFormation menghasilkan tidak boleh melebihi 4MB. Untuk mempelajari selengkapnya tentang penerapan fungsi menggunakan file.zip CloudFormation, lihat [AWS::Lambda::Function](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html)di *CloudFormation Panduan Pengguna*. 

# Deploy fungsi Lambda Python dengan gambar kontainer
<a name="python-image"></a>

Ada tiga cara untuk membangun image container untuk fungsi Python Lambda:
+ [Menggunakan gambar AWS dasar untuk Python](#python-image-instructions)

  [Gambar AWS dasar](images-create.md#runtimes-images-lp) dimuat sebelumnya dengan runtime bahasa, klien antarmuka runtime untuk mengelola interaksi antara Lambda dan kode fungsi Anda, dan emulator antarmuka runtime untuk pengujian lokal.
+ [Menggunakan gambar AWS dasar khusus OS](images-create.md#runtimes-images-provided)

  [AWS Gambar dasar khusus OS](https://gallery.ecr.aws/lambda/provided) berisi distribusi Amazon Linux dan emulator antarmuka [runtime](https://github.com/aws/aws-lambda-runtime-interface-emulator/). Gambar-gambar ini biasanya digunakan untuk membuat gambar kontainer untuk bahasa yang dikompilasi, seperti [Go](go-image.md#go-image-provided) dan [Rust](lambda-rust.md), dan untuk versi bahasa atau bahasa yang Lambda tidak menyediakan gambar dasar, seperti Node.js 19. Anda juga dapat menggunakan gambar dasar khusus OS untuk mengimplementasikan runtime [khusus](runtimes-custom.md). Untuk membuat gambar kompatibel dengan Lambda, Anda harus menyertakan klien [antarmuka runtime untuk Python](#python-image-clients) dalam gambar.
+ [Menggunakan gambar AWS non-dasar](#python-image-clients)

  Anda dapat menggunakan gambar dasar alternatif dari registri kontainer lain, seperti Alpine Linux atau Debian. Anda juga dapat menggunakan gambar kustom yang dibuat oleh organisasi Anda. Untuk membuat gambar kompatibel dengan Lambda, Anda harus menyertakan klien [antarmuka runtime untuk Python](#python-image-clients) dalam gambar.

**Tip**  
Untuk mengurangi waktu yang dibutuhkan agar fungsi kontainer Lambda menjadi aktif, lihat [Menggunakan build multi-tahap](https://docs.docker.com/build/building/multi-stage/) dalam dokumentasi Docker. Untuk membuat gambar kontainer yang efisien, ikuti [Praktik terbaik untuk menulis Dockerfiles](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/).

Halaman ini menjelaskan cara membuat, menguji, dan menyebarkan gambar kontainer untuk Lambda.

**Topics**
+ [AWS gambar dasar untuk Python](#python-image-base)
+ [Menggunakan gambar AWS dasar untuk Python](#python-image-instructions)
+ [Menggunakan gambar dasar alternatif dengan klien antarmuka runtime](#python-image-clients)

## AWS gambar dasar untuk Python
<a name="python-image-base"></a>

AWS menyediakan gambar dasar berikut untuk Python:


| Tanda | Waktu berjalan | Sistem operasi | Dockerfile | penghentian | 
| --- | --- | --- | --- | --- | 
| 3.14 | Python 3.14 | Amazon Linux 2023 | [Dockerfile untuk Python 3.14 aktif GitHub](https://github.com/aws/aws-lambda-base-images/blob/python3.14/Dockerfile.python3.14) |   30 Jun 2029   | 
| 3.13 | Python 3.13 | Amazon Linux 2023 | [Dockerfile untuk Python 3.13 aktif GitHub](https://github.com/aws/aws-lambda-base-images/blob/python3.13/Dockerfile.python3.13) |   30 Jun 2029   | 
| 3.12 | Python 3.12 | Amazon Linux 2023 | [Dockerfile untuk Python 3.12 aktif GitHub](https://github.com/aws/aws-lambda-base-images/blob/python3.12/Dockerfile.python3.12) |   Okt 31, 2028   | 
| 3.11 | Python 3.11 | Amazon Linux 2 | [Dockerfile untuk Python 3.11 aktif GitHub](https://github.com/aws/aws-lambda-base-images/blob/python3.11/Dockerfile.python3.11) |   30 Jun 2027   | 
| 3.10 | Python 3.10 | Amazon Linux 2 | [Dockerfile untuk Python 3.10 aktif GitHub](https://github.com/aws/aws-lambda-base-images/blob/python3.10/Dockerfile.python3.10) |   Okt 31, 2026   | 

[Repositori Amazon ECR: gallery.ecr. aws/lambda/python](https://gallery.ecr.aws/lambda/python)

Python 3.12 dan gambar dasar yang lebih baru didasarkan pada gambar kontainer minimal [Amazon Linux 2023](https://docs.aws.amazon.com/linux/al2023/ug/minimal-container.html). Gambar dasar Python 3.8-3.11 didasarkan pada gambar Amazon Linux 2. AL2023gambar berbasis memberikan beberapa keunggulan dibandingkan Amazon Linux 2, termasuk jejak penyebaran yang lebih kecil dan versi pustaka yang diperbarui seperti. `glibc`

AL2023gambar berbasis menggunakan `microdnf` (symlinked as`dnf`) sebagai manajer paket alih-alih`yum`, yang merupakan manajer paket default di Amazon Linux 2. `microdnf`adalah implementasi mandiri dari. `dnf` Untuk daftar paket yang disertakan dalam gambar AL2023 berbasis, lihat kolom **Penampung Minimal** di [Membandingkan paket yang diinstal di Amazon Linux 2023 Container Images](https://docs.aws.amazon.com/linux/al2023/ug/al2023-container-image-types.html). Untuk informasi selengkapnya tentang perbedaan antara AL2023 dan Amazon Linux 2, lihat [Memperkenalkan runtime Amazon Linux 2023 untuk AWS Lambda di Blog](https://aws.amazon.com/blogs/compute/introducing-the-amazon-linux-2023-runtime-for-aws-lambda/) AWS Komputasi.

**catatan**  
Untuk menjalankan image AL2023 berbasis lokal, termasuk with AWS Serverless Application Model (AWS SAM), Anda harus menggunakan Docker versi 20.10.10 atau yang lebih baru.

### Jalur pencarian ketergantungan di gambar dasar
<a name="python-image-searchpath"></a>

Saat Anda menggunakan `import` pernyataan dalam kode Anda, runtime Python mencari direktori di jalur pencariannya hingga menemukan modul atau paket. Secara default, runtime mencari `{LAMBDA_TASK_ROOT}` direktori terlebih dahulu. Jika Anda menyertakan versi pustaka yang disertakan runtime dalam gambar Anda, versi Anda akan lebih diutamakan daripada versi yang disertakan dalam runtime.

Langkah-langkah lain di jalur pencarian bergantung pada versi gambar dasar Lambda untuk Python yang Anda gunakan:
+ **Python 3.11 dan yang lebih baru**: Pustaka yang disertakan runtime dan pustaka yang diinstal pip diinstal di direktori. `/var/lang/lib/python3.11/site-packages` Direktori ini lebih diutamakan `/var/runtime` di jalur pencarian. Anda dapat mengganti SDK dengan menggunakan pip untuk menginstal versi yang lebih baru. Anda dapat menggunakan pip untuk memverifikasi bahwa SDK yang disertakan runtime dan dependensinya kompatibel dengan paket apa pun yang Anda instal.
+ **Python 3.8-3.10**: Pustaka yang disertakan runtime diinstal di direktori. `/var/runtime` Pustaka yang diinstal PIP diinstal di direktori. `/var/lang/lib/python3.x/site-packages` `/var/runtime`Direktori lebih diutamakan `/var/lang/lib/python3.x/site-packages` di jalur pencarian.

Anda dapat melihat jalur pencarian lengkap untuk fungsi Lambda Anda dengan menambahkan cuplikan kode berikut.

```
import sys
      
search_path = sys.path
print(search_path)
```

## Menggunakan gambar AWS dasar untuk Python
<a name="python-image-instructions"></a>

### Prasyarat
<a name="python-image-prerequisites"></a>

Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
+ [AWS CLI versi 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [Docker](https://docs.docker.com/get-docker) (versi minimum 25.0.0)
+ Plugin [buildx Docker](https://github.com/docker/buildx/blob/master/README.md).
+ Python

### Membuat gambar dari gambar dasar
<a name="python-image-create"></a>

**Untuk membuat gambar kontainer dari gambar AWS dasar untuk Python**

1. Buat direktori untuk proyek, dan kemudian beralih ke direktori itu.

   ```
   mkdir example
   cd example
   ```

1. Buat file baru bernama`lambda_function.py`. Anda dapat menambahkan kode fungsi contoh berikut ke file untuk pengujian, atau menggunakan kode Anda sendiri.  
**Example Fungsi Python**  

   ```
   import sys
   def handler(event, context):
       return 'Hello from AWS Lambda using Python' + sys.version + '!'
   ```

1. Buat file baru bernama`requirements.txt`. Jika Anda menggunakan kode fungsi sampel dari langkah sebelumnya, Anda dapat membiarkan file kosong karena tidak ada dependensi. Jika tidak, daftarkan setiap pustaka yang diperlukan. Misalnya, inilah tampilan `requirements.txt` Anda jika fungsi Anda menggunakan AWS SDK untuk Python (Boto3):  
**Example requirements.txt**  

   ```
   boto3
   ```

1. Buat Dockerfile baru dengan konfigurasi berikut:
   + Mengatur `FROM` properti ke [URI dari gambar dasar](https://gallery.ecr.aws/lambda/python/).
   + Gunakan perintah COPY untuk menyalin kode fungsi dan dependensi runtime ke`{LAMBDA_TASK_ROOT}`, variabel lingkungan yang ditentukan [Lambda](configuration-envvars.md#configuration-envvars-runtime).
   + Atur `CMD` argumen ke penangan fungsi Lambda.

   Perhatikan bahwa contoh Dockerfile tidak menyertakan instruksi [USER](https://docs.docker.com/reference/dockerfile/#user). Saat Anda menyebarkan gambar kontainer ke Lambda, Lambda secara otomatis mendefinisikan pengguna Linux default dengan izin yang paling tidak memiliki hak istimewa. Ini berbeda dari perilaku Docker standar yang default ke `root` pengguna ketika tidak ada `USER` instruksi yang diberikan.  
**Example Dockerfile**  

   ```
   FROM public.ecr.aws/lambda/python:3.12
   
   # Copy requirements.txt
   COPY requirements.txt ${LAMBDA_TASK_ROOT}
   
   # Install the specified packages
   RUN pip install -r requirements.txt
   
   # Copy function code
   COPY lambda_function.py ${LAMBDA_TASK_ROOT}
   
   # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
   CMD [ "lambda_function.handler" ]
   ```

1. Buat image Docker dengan perintah [docker](https://docs.docker.com/engine/reference/commandline/build/) build. Contoh berikut menamai gambar `docker-image` dan memberinya `test` [tag](https://docs.docker.com/engine/reference/commandline/build/#tag). Untuk membuat gambar Anda kompatibel dengan Lambda, Anda harus menggunakan opsi. `--provenance=false`

   ```
   docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
   ```
**catatan**  
Perintah menentukan `--platform linux/amd64` opsi untuk memastikan bahwa container Anda kompatibel dengan lingkungan eksekusi Lambda terlepas dari arsitektur mesin build Anda. Jika Anda berniat untuk membuat fungsi Lambda menggunakan arsitektur set ARM64 instruksi, pastikan untuk mengubah perintah untuk menggunakan `--platform linux/arm64` opsi sebagai gantinya.

### (Opsional) Uji gambar secara lokal
<a name="python-image-test"></a>

1. Mulai gambar Docker dengan perintah **docker run**. Dalam contoh ini, `docker-image` adalah nama gambar dan `test` tag.

   ```
   docker run --platform linux/amd64 -p 9000:8080 docker-image:test
   ```

   Perintah ini menjalankan gambar sebagai wadah dan membuat titik akhir lokal di`localhost:9000/2015-03-31/functions/function/invocations`.
**catatan**  
Jika Anda membuat image Docker untuk arsitektur set ARM64 instruksi, pastikan untuk menggunakan `--platform linux/arm64` opsi alih-alih. `--platform linux/amd64`

1. Dari jendela terminal baru, posting acara ke titik akhir lokal.

------
#### [ Linux/macOS ]

   Di Linux dan macOS, jalankan perintah berikut: `curl`

   ```
   curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'
   ```

   Perintah ini memanggil fungsi dengan peristiwa kosong dan mengembalikan respons. Jika Anda menggunakan kode fungsi Anda sendiri daripada kode fungsi sampel, Anda mungkin ingin memanggil fungsi dengan payload JSON. Contoh:

   ```
   curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
   ```

------
#### [ PowerShell ]

   Dalam PowerShell, jalankan `Invoke-WebRequest` perintah berikut:

   ```
   Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"
   ```

   Perintah ini memanggil fungsi dengan peristiwa kosong dan mengembalikan respons. Jika Anda menggunakan kode fungsi Anda sendiri daripada kode fungsi sampel, Anda mungkin ingin memanggil fungsi dengan payload JSON. Contoh:

   ```
   Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
   ```

------

1. Dapatkan ID kontainer.

   ```
   docker ps
   ```

1. Gunakan perintah [docker kill](https://docs.docker.com/engine/reference/commandline/kill/) untuk menghentikan wadah. Dalam perintah ini, ganti `3766c4ab331c` dengan ID kontainer dari langkah sebelumnya.

   ```
   docker kill 3766c4ab331c
   ```

### Menyebarkan gambar
<a name="python-image-deploy"></a>

**Untuk mengunggah gambar ke Amazon ECR dan membuat fungsi Lambda**

1. Jalankan [get-login-password](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ecr/get-login-password.html)perintah untuk mengautentikasi CLI Docker ke registri Amazon ECR Anda.
   + Tetapkan `--region` nilai ke Wilayah AWS tempat Anda ingin membuat repositori Amazon ECR.
   + Ganti `111122223333` dengan Akun AWS ID Anda.

   ```
   aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
   ```

1. [Buat repositori di Amazon ECR menggunakan perintah create-repository.](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ecr/create-repository.html)

   ```
   aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
   ```
**catatan**  
Repositori Amazon ECR harus sama Wilayah AWS dengan fungsi Lambda.

   Jika berhasil, Anda melihat respons seperti ini:

   ```
   {
       "repository": {
           "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world",
           "registryId": "111122223333",
           "repositoryName": "hello-world",
           "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world",
           "createdAt": "2023-03-09T10:39:01+00:00",
           "imageTagMutability": "MUTABLE",
           "imageScanningConfiguration": {
               "scanOnPush": true
           },
           "encryptionConfiguration": {
               "encryptionType": "AES256"
           }
       }
   }
   ```

1. Salin `repositoryUri` dari output pada langkah sebelumnya.

1. Jalankan perintah [tag docker](https://docs.docker.com/engine/reference/commandline/tag/) untuk menandai gambar lokal Anda ke repositori Amazon ECR Anda sebagai versi terbaru. Dalam perintah ini:
   + `docker-image:test`adalah nama dan [tag](https://docs.docker.com/engine/reference/commandline/build/#tag) gambar Docker Anda. Ini adalah nama gambar dan tag yang Anda tentukan dalam `docker build` perintah.
   + Ganti `<ECRrepositoryUri>` dengan `repositoryUri` yang Anda salin. Pastikan untuk menyertakan `:latest` di akhir URI.

   ```
   docker tag docker-image:test <ECRrepositoryUri>:latest
   ```

   Contoh:

   ```
   docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
   ```

1. Jalankan perintah [docker push](https://docs.docker.com/engine/reference/commandline/push/) untuk menyebarkan gambar lokal Anda ke repositori Amazon ECR. Pastikan untuk menyertakan `:latest` di akhir URI repositori.

   ```
   docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
   ```

1. [Buat peran eksekusi](lambda-intro-execution-role.md#permissions-executionrole-api) untuk fungsi tersebut, jika Anda belum memilikinya. Anda memerlukan Nama Sumber Daya Amazon (ARN) dari peran tersebut di langkah berikutnya.

1. Buat fungsi Lambda. Untuk`ImageUri`, tentukan URI repositori dari sebelumnya. Pastikan untuk menyertakan `:latest` di akhir URI.

   ```
   aws lambda create-function \
     --function-name hello-world \
     --package-type Image \
     --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \
     --role arn:aws:iam::111122223333:role/lambda-ex
   ```
**catatan**  
Anda dapat membuat fungsi menggunakan gambar di AWS akun yang berbeda, selama gambar berada di Wilayah yang sama dengan fungsi Lambda. Untuk informasi selengkapnya, lihat [Izin lintas akun Amazon ECR](images-create.md#configuration-images-xaccount-permissions).

1. Memanggil fungsi.

   ```
   aws lambda invoke --function-name hello-world response.json
   ```

   Anda akan melihat tanggapan seperti ini:

   ```
   {
     "ExecutedVersion": "$LATEST", 
     "StatusCode": 200
   }
   ```

1. Untuk melihat output fungsi, periksa `response.json` file.

Untuk memperbarui kode fungsi, Anda harus membangun gambar lagi, mengunggah gambar baru ke repositori Amazon ECR, dan kemudian menggunakan [update-function-code](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-code.html)perintah untuk menyebarkan gambar ke fungsi Lambda.

Lambda menyelesaikan tag gambar ke intisari gambar tertentu. Ini berarti bahwa jika Anda mengarahkan tag gambar yang digunakan untuk menyebarkan fungsi ke gambar baru di Amazon ECR, Lambda tidak secara otomatis memperbarui fungsi untuk menggunakan gambar baru.

Untuk menyebarkan gambar baru ke fungsi Lambda yang sama, Anda harus menggunakan [update-function-code](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-code.html)perintah, meskipun tag gambar di Amazon ECR tetap sama. Dalam contoh berikut, `--publish` opsi membuat versi baru dari fungsi menggunakan gambar kontainer yang diperbarui.

```
aws lambda update-function-code \
  --function-name hello-world \
  --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \
  --publish
```

## Menggunakan gambar dasar alternatif dengan klien antarmuka runtime
<a name="python-image-clients"></a>

Jika Anda menggunakan gambar [dasar khusus OS atau gambar dasar](images-create.md#runtimes-images-provided) alternatif, Anda harus menyertakan klien antarmuka runtime dalam gambar Anda. Klien antarmuka runtime memperluas[API runtime](runtimes-api.md), yang mengelola interaksi antara Lambda dan kode fungsi Anda.

Instal [klien antarmuka runtime untuk Python](https://pypi.org/project/awslambdaric) menggunakan manajer paket pip:

```
pip install awslambdaric
```

Anda juga dapat mengunduh klien [antarmuka runtime Python](https://github.com/aws/aws-lambda-python-runtime-interface-client/) dari. GitHub

Contoh berikut menunjukkan bagaimana membangun image container untuk Python menggunakan gambar AWS non-dasar. Contoh Dockerfile menggunakan gambar dasar Python resmi. Dockerfile menyertakan klien antarmuka runtime untuk Python.

### Prasyarat
<a name="python-alt-prerequisites"></a>

Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
+ [AWS CLI versi 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [Docker](https://docs.docker.com/get-docker) (versi minimum 25.0.0)
+ Plugin [buildx Docker](https://github.com/docker/buildx/blob/master/README.md).
+ Python

### Membuat gambar dari gambar dasar alternatif
<a name="python-alt-create"></a>

**Untuk membuat gambar kontainer dari gambar AWS non-dasar**

1. Buat direktori untuk proyek, dan kemudian beralih ke direktori itu.

   ```
   mkdir example
   cd example
   ```

1. Buat file baru bernama`lambda_function.py`. Anda dapat menambahkan kode fungsi contoh berikut ke file untuk pengujian, atau menggunakan kode Anda sendiri.  
**Example Fungsi Python**  

   ```
   import sys
   def handler(event, context):
       return 'Hello from AWS Lambda using Python' + sys.version + '!'
   ```

1. Buat file baru bernama`requirements.txt`. Jika Anda menggunakan kode fungsi sampel dari langkah sebelumnya, Anda dapat membiarkan file kosong karena tidak ada dependensi. Jika tidak, daftarkan setiap pustaka yang diperlukan. Misalnya, inilah tampilan `requirements.txt` Anda jika fungsi Anda menggunakan AWS SDK untuk Python (Boto3):  
**Example requirements.txt**  

   ```
   boto3
   ```

1. Buat Dockerfile baru. [Dockerfile berikut menggunakan gambar dasar Python resmi alih-alih gambar dasar.AWS](images-create.md#runtimes-images-lp) Dockerfile menyertakan [klien antarmuka runtime](https://pypi.org/project/awslambdaric), yang membuat gambar kompatibel dengan Lambda. Contoh berikut Dockerfile menggunakan build [multi-tahap](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#use-multi-stage-builds).
   + Atur `FROM` properti ke gambar dasar.
   + Atur `ENTRYPOINT` ke modul yang Anda inginkan untuk menjalankan wadah Docker saat dimulai. Dalam hal ini, modul adalah klien antarmuka runtime.
   + Atur `CMD` ke penangan fungsi Lambda.

   Perhatikan bahwa contoh Dockerfile tidak menyertakan instruksi [USER](https://docs.docker.com/reference/dockerfile/#user). Saat Anda menyebarkan gambar kontainer ke Lambda, Lambda secara otomatis mendefinisikan pengguna Linux default dengan izin yang paling tidak memiliki hak istimewa. Ini berbeda dari perilaku Docker standar yang default ke `root` pengguna ketika tidak ada `USER` instruksi yang diberikan.  
**Example Dockerfile**  

   ```
   # Define custom function directory
   ARG FUNCTION_DIR="/function"
   
   FROM python:3.12 AS build-image
   
   # Include global arg in this stage of the build
   ARG FUNCTION_DIR
   
   # Copy function code
   RUN mkdir -p ${FUNCTION_DIR}
   COPY . ${FUNCTION_DIR}
   
   # Install the function's dependencies
   RUN pip install \
       --target ${FUNCTION_DIR} \
           awslambdaric
   
   # Use a slim version of the base Python image to reduce the final image size
   FROM python:3.12-slim
   
   # Include global arg in this stage of the build
   ARG FUNCTION_DIR
   # Set working directory to function root directory
   WORKDIR ${FUNCTION_DIR}
   
   # Copy in the built dependencies
   COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR}
   
   # Set runtime interface client as default command for the container runtime
   ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ]
   # Pass the name of the function handler as an argument to the runtime
   CMD [ "lambda_function.handler" ]
   ```

1. Buat image Docker dengan perintah [docker](https://docs.docker.com/engine/reference/commandline/build/) build. Contoh berikut menamai gambar `docker-image` dan memberinya `test` [tag](https://docs.docker.com/engine/reference/commandline/build/#tag). Untuk membuat gambar Anda kompatibel dengan Lambda, Anda harus menggunakan opsi. `--provenance=false`

   ```
   docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
   ```
**catatan**  
Perintah menentukan `--platform linux/amd64` opsi untuk memastikan bahwa container Anda kompatibel dengan lingkungan eksekusi Lambda terlepas dari arsitektur mesin build Anda. Jika Anda berniat untuk membuat fungsi Lambda menggunakan arsitektur set ARM64 instruksi, pastikan untuk mengubah perintah untuk menggunakan `--platform linux/arm64` opsi sebagai gantinya.

### (Opsional) Uji gambar secara lokal
<a name="python-alt-test"></a>

Gunakan [emulator antarmuka runtime](https://github.com/aws/aws-lambda-runtime-interface-emulator/) untuk menguji gambar secara lokal. Anda dapat [membangun emulator ke dalam gambar Anda](https://github.com/aws/aws-lambda-runtime-interface-emulator/?tab=readme-ov-file#build-rie-into-your-base-image) atau menggunakan prosedur berikut untuk menginstalnya di mesin lokal Anda.

**Untuk menginstal dan menjalankan emulator antarmuka runtime di mesin lokal Anda**

1. Dari direktori proyek Anda, jalankan perintah berikut untuk mengunduh emulator antarmuka runtime (arsitektur x86-64) dari GitHub dan menginstalnya di mesin lokal Anda.

------
#### [ Linux/macOS ]

   ```
   mkdir -p ~/.aws-lambda-rie && \
       curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \
       chmod +x ~/.aws-lambda-rie/aws-lambda-rie
   ```

   Untuk menginstal emulator arm64, ganti URL GitHub repositori di perintah sebelumnya dengan yang berikut:

   ```
   https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
   ```

------
#### [ PowerShell ]

   ```
   $dirPath = "$HOME\.aws-lambda-rie"
   if (-not (Test-Path $dirPath)) {
       New-Item -Path $dirPath -ItemType Directory
   }
         
   $downloadLink = "https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie"
   $destinationPath = "$HOME\.aws-lambda-rie\aws-lambda-rie"
   Invoke-WebRequest -Uri $downloadLink -OutFile $destinationPath
   ```

   Untuk menginstal emulator arm64, ganti `$downloadLink` dengan yang berikut ini:

   ```
   https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
   ```

------

1. Mulai gambar Docker dengan perintah **docker run**. Perhatikan hal-hal berikut:
   + `docker-image`adalah nama gambar dan `test` tag.
   + `/usr/local/bin/python -m awslambdaric lambda_function.handler`adalah `ENTRYPOINT` diikuti oleh `CMD` dari Dockerfile Anda.

------
#### [ Linux/macOS ]

   ```
   docker run --platform linux/amd64 -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \
       --entrypoint /aws-lambda/aws-lambda-rie \
       docker-image:test \
           /usr/local/bin/python -m awslambdaric lambda_function.handler
   ```

------
#### [ PowerShell ]

   ```
   docker run --platform linux/amd64 -d -v "$HOME\.aws-lambda-rie:/aws-lambda" -p 9000:8080 `
   --entrypoint /aws-lambda/aws-lambda-rie `
   docker-image:test `
       /usr/local/bin/python -m awslambdaric lambda_function.handler
   ```

------

   Perintah ini menjalankan gambar sebagai wadah dan membuat titik akhir lokal di`localhost:9000/2015-03-31/functions/function/invocations`.
**catatan**  
Jika Anda membuat image Docker untuk arsitektur set ARM64 instruksi, pastikan untuk menggunakan `--platform linux/arm64` opsi alih-alih. `--platform linux/amd64`

1. Posting acara ke titik akhir lokal.

------
#### [ Linux/macOS ]

   Di Linux dan macOS, jalankan perintah berikut: `curl`

   ```
   curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'
   ```

   Perintah ini memanggil fungsi dengan peristiwa kosong dan mengembalikan respons. Jika Anda menggunakan kode fungsi Anda sendiri daripada kode fungsi sampel, Anda mungkin ingin memanggil fungsi dengan payload JSON. Contoh:

   ```
   curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
   ```

------
#### [ PowerShell ]

   Dalam PowerShell, jalankan `Invoke-WebRequest` perintah berikut:

   ```
   Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"
   ```

   Perintah ini memanggil fungsi dengan peristiwa kosong dan mengembalikan respons. Jika Anda menggunakan kode fungsi Anda sendiri daripada kode fungsi sampel, Anda mungkin ingin memanggil fungsi dengan payload JSON. Contoh:

   ```
   Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
   ```

------

1. Dapatkan ID kontainer.

   ```
   docker ps
   ```

1. Gunakan perintah [docker kill](https://docs.docker.com/engine/reference/commandline/kill/) untuk menghentikan wadah. Dalam perintah ini, ganti `3766c4ab331c` dengan ID kontainer dari langkah sebelumnya.

   ```
   docker kill 3766c4ab331c
   ```

### Menyebarkan gambar
<a name="python-alt-deploy"></a>

**Untuk mengunggah gambar ke Amazon ECR dan membuat fungsi Lambda**

1. Jalankan [get-login-password](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ecr/get-login-password.html)perintah untuk mengautentikasi CLI Docker ke registri Amazon ECR Anda.
   + Tetapkan `--region` nilai ke Wilayah AWS tempat Anda ingin membuat repositori Amazon ECR.
   + Ganti `111122223333` dengan Akun AWS ID Anda.

   ```
   aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
   ```

1. [Buat repositori di Amazon ECR menggunakan perintah create-repository.](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ecr/create-repository.html)

   ```
   aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
   ```
**catatan**  
Repositori Amazon ECR harus sama Wilayah AWS dengan fungsi Lambda.

   Jika berhasil, Anda melihat respons seperti ini:

   ```
   {
       "repository": {
           "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world",
           "registryId": "111122223333",
           "repositoryName": "hello-world",
           "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world",
           "createdAt": "2023-03-09T10:39:01+00:00",
           "imageTagMutability": "MUTABLE",
           "imageScanningConfiguration": {
               "scanOnPush": true
           },
           "encryptionConfiguration": {
               "encryptionType": "AES256"
           }
       }
   }
   ```

1. Salin `repositoryUri` dari output pada langkah sebelumnya.

1. Jalankan perintah [tag docker](https://docs.docker.com/engine/reference/commandline/tag/) untuk menandai gambar lokal Anda ke repositori Amazon ECR Anda sebagai versi terbaru. Dalam perintah ini:
   + `docker-image:test`adalah nama dan [tag](https://docs.docker.com/engine/reference/commandline/build/#tag) gambar Docker Anda. Ini adalah nama gambar dan tag yang Anda tentukan dalam `docker build` perintah.
   + Ganti `<ECRrepositoryUri>` dengan `repositoryUri` yang Anda salin. Pastikan untuk menyertakan `:latest` di akhir URI.

   ```
   docker tag docker-image:test <ECRrepositoryUri>:latest
   ```

   Contoh:

   ```
   docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
   ```

1. Jalankan perintah [docker push](https://docs.docker.com/engine/reference/commandline/push/) untuk menyebarkan gambar lokal Anda ke repositori Amazon ECR. Pastikan untuk menyertakan `:latest` di akhir URI repositori.

   ```
   docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
   ```

1. [Buat peran eksekusi](lambda-intro-execution-role.md#permissions-executionrole-api) untuk fungsi tersebut, jika Anda belum memilikinya. Anda memerlukan Nama Sumber Daya Amazon (ARN) dari peran tersebut di langkah berikutnya.

1. Buat fungsi Lambda. Untuk`ImageUri`, tentukan URI repositori dari sebelumnya. Pastikan untuk menyertakan `:latest` di akhir URI.

   ```
   aws lambda create-function \
     --function-name hello-world \
     --package-type Image \
     --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \
     --role arn:aws:iam::111122223333:role/lambda-ex
   ```
**catatan**  
Anda dapat membuat fungsi menggunakan gambar di AWS akun yang berbeda, selama gambar berada di Wilayah yang sama dengan fungsi Lambda. Untuk informasi selengkapnya, lihat [Izin lintas akun Amazon ECR](images-create.md#configuration-images-xaccount-permissions).

1. Memanggil fungsi.

   ```
   aws lambda invoke --function-name hello-world response.json
   ```

   Anda akan melihat tanggapan seperti ini:

   ```
   {
     "ExecutedVersion": "$LATEST", 
     "StatusCode": 200
   }
   ```

1. Untuk melihat output fungsi, periksa `response.json` file.

Untuk memperbarui kode fungsi, Anda harus membangun gambar lagi, mengunggah gambar baru ke repositori Amazon ECR, dan kemudian menggunakan [update-function-code](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-code.html)perintah untuk menyebarkan gambar ke fungsi Lambda.

Lambda menyelesaikan tag gambar ke intisari gambar tertentu. Ini berarti bahwa jika Anda mengarahkan tag gambar yang digunakan untuk menyebarkan fungsi ke gambar baru di Amazon ECR, Lambda tidak secara otomatis memperbarui fungsi untuk menggunakan gambar baru.

Untuk menyebarkan gambar baru ke fungsi Lambda yang sama, Anda harus menggunakan [update-function-code](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-code.html)perintah, meskipun tag gambar di Amazon ECR tetap sama. Dalam contoh berikut, `--publish` opsi membuat versi baru dari fungsi menggunakan gambar kontainer yang diperbarui.

```
aws lambda update-function-code \
  --function-name hello-world \
  --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \
  --publish
```

Untuk contoh cara membuat gambar Python dari gambar dasar Alpine, lihat [Dukungan gambar kontainer untuk Lambda](https://aws.amazon.com/blogs/aws/new-for-aws-lambda-container-image-support/) di Blog AWS .

# Bekerja dengan lapisan untuk fungsi Lambda Python
<a name="python-layers"></a>

Gunakan [lapisan Lambda](chapter-layers.md) untuk mengemas kode dan dependensi yang ingin Anda gunakan kembali di beberapa fungsi. Lapisan biasanya berisi dependensi pustaka, [runtime kustom](runtimes-custom.md), atau file konfigurasi. Membuat layer melibatkan tiga langkah umum:

1. Package konten layer Anda. Ini berarti membuat arsip file.zip yang berisi dependensi yang ingin Anda gunakan dalam fungsi Anda.

1. Buat layer di Lambda.

1. Tambahkan layer ke fungsi Anda.

**Topics**
+ [Package konten layer Anda](#python-layers-package)
+ [Buat layer di Lambda](#publishing-layer)
+ [Tambahkan layer ke fungsi Anda](#python-layer-adding)
+ [Contoh aplikasi](#python-layer-sample-app)

## Package konten layer Anda
<a name="python-layers-package"></a>

Untuk membuat layer, bundel paket Anda ke dalam arsip file.zip yang memenuhi persyaratan berikut:
+ Bangun layer menggunakan versi Python yang sama yang Anda rencanakan untuk digunakan untuk fungsi Lambda. Misalnya, jika Anda membangun layer Anda menggunakan Python 3.14, gunakan runtime Python 3.14 untuk fungsi Anda.
+ File.zip Anda harus menyertakan `python` direktori di tingkat root.
+ Paket di lapisan Anda harus kompatibel dengan Linux. Fungsi Lambda berjalan di Amazon Linux.

Anda dapat membuat lapisan yang berisi pustaka Python pihak ketiga yang diinstal dengan `pip` (seperti `requests` atau`pandas`) atau modul dan paket Python Anda sendiri.

### Ketergantungan pihak ketiga
<a name="python-layers-third-party-dependencies"></a>

**Untuk membuat layer menggunakan paket pip**

1. Pilih salah satu metode berikut untuk menginstal `pip` paket ke direktori tingkat atas yang diperlukan (`python/`):

------
#### [ pip install ]

   Untuk paket Python murni (seperti permintaan atau boto3):

   ```
   pip install requests -t python/
   ```

   Beberapa paket Python, seperti NumPy dan Pandas, termasuk komponen C yang dikompilasi. Jika Anda membangun lapisan dengan paket-paket ini di macOS atau Windows, Anda mungkin perlu menggunakan perintah ini untuk menginstal roda yang kompatibel dengan Linux:

   ```
   pip install numpy --platform manylinux2014_x86_64 --only-binary=:all: -t python/
   ```

   Untuk informasi selengkapnya tentang bekerja dengan paket Python yang berisi komponen yang dikompilasi, lihat. [Membuat paket penerapan.zip dengan pustaka asli](python-package.md#python-package-native-libraries)

------
#### [ requirements.txt ]

   Menggunakan `requirements.txt` file membantu Anda mengelola versi paket dan memastikan instalasi yang konsisten.

**Example requirements.txt**  

   ```
   requests==2.31.0
   boto3==1.37.34
   numpy==1.26.4
   ```

   Jika `requirements.txt` file Anda hanya menyertakan paket Python murni (seperti permintaan atau boto3):

   ```
   pip install -r requirements.txt -t python/
   ```

   Beberapa paket Python, seperti NumPy dan Pandas, termasuk komponen C yang dikompilasi. Jika Anda membangun lapisan dengan paket-paket ini di macOS atau Windows, Anda mungkin perlu menggunakan perintah ini untuk menginstal roda yang kompatibel dengan Linux:

   ```
   pip install -r requirements.txt --platform manylinux2014_x86_64 --only-binary=:all: -t python/
   ```

   Untuk informasi selengkapnya tentang bekerja dengan paket Python yang berisi komponen yang dikompilasi, lihat. [Membuat paket penerapan.zip dengan pustaka asli](python-package.md#python-package-native-libraries)

------

1. Zip isi `python` direktori.

------
#### [ Linux/macOS ]

   ```
   zip -r layer.zip python/
   ```

------
#### [ PowerShell ]

   ```
   Compress-Archive -Path .\python -DestinationPath .\layer.zip
   ```

------

   Struktur direktori file.zip Anda akan terlihat seperti ini:

   ```
   python/              # Required top-level directory
   └── requests/
   └── boto3/
   └── numpy/
   └── (dependencies of the other packages)
   ```
**catatan**  
Jika Anda menggunakan lingkungan virtual Python (venv) untuk menginstal paket, struktur direktori Anda akan berbeda (misalnya,). `python/lib/python3.x/site-packages` Selama file.zip Anda menyertakan `python` direktori di tingkat root, Lambda dapat menemukan dan mengimpor paket Anda.

### Kustom modul Python
<a name="custom-python-modules"></a>

**Untuk membuat layer menggunakan kode Anda sendiri**

1. Buat direktori tingkat atas yang diperlukan untuk lapisan Anda:

   ```
   mkdir python
   ```

1. Buat modul Python Anda di direktori. `python` Modul contoh berikut memvalidasi pesanan dengan mengonfirmasi bahwa mereka berisi informasi yang diperlukan.  
**Example modul kustom: validator.py**  

   ```
   import json
   
   def validate_order(order_data):
       """Validates an order and returns formatted data."""
       required_fields = ['product_id', 'quantity']
       
       # Check required fields
       missing_fields = [field for field in required_fields if field not in order_data]
       if missing_fields:
           raise ValueError(f"Missing required fields: {', '.join(missing_fields)}")
       
       # Validate quantity
       quantity = order_data['quantity']
       if not isinstance(quantity, int) or quantity < 1:
           raise ValueError("Quantity must be a positive integer")
       
       # Format and return the validated data
       return {
           'product_id': str(order_data['product_id']),
           'quantity': quantity,
           'shipping_priority': order_data.get('priority', 'standard')
       }
   
   def format_response(status_code, body):
       """Formats the API response."""
       return {
           'statusCode': status_code,
           'body': json.dumps(body)
       }
   ```

1. Zip isi `python` direktori.

------
#### [ Linux/macOS ]

   ```
   zip -r layer.zip python/
   ```

------
#### [ PowerShell ]

   ```
   Compress-Archive -Path .\python -DestinationPath .\layer.zip
   ```

------

   Struktur direktori file.zip Anda akan terlihat seperti ini:

   ```
   python/     # Required top-level directory
   └── validator.py
   ```

1. Dalam fungsi Anda, impor dan gunakan modul seperti yang Anda lakukan dengan paket Python apa pun. Contoh:

   ```
   from validator import validate_order, format_response
   import json
   
   def lambda_handler(event, context):
       try:
           # Parse the order data from the event body
           order_data = json.loads(event.get('body', '{}'))
           
           # Validate and format the order
           validated_order = validate_order(order_data)
           
           return format_response(200, {
               'message': 'Order validated successfully',
               'order': validated_order
           })
       except ValueError as e:
           return format_response(400, {
               'error': str(e)
           })
       except Exception as e:
           return format_response(500, {
               'error': 'Internal server error'
           })
   ```

   Anda dapat menggunakan [peristiwa pengujian](testing-functions.md#invoke-with-event) berikut untuk menjalankan fungsi:

   ```
   {
       "body": "{\"product_id\": \"ABC123\", \"quantity\": 2, \"priority\": \"express\"}"
   }
   ```

   Tanggapan yang diharapkan:

   ```
   {
     "statusCode": 200,
     "body": "{\"message\": \"Order validated successfully\", \"order\": {\"product_id\": \"ABC123\", \"quantity\": 2, \"shipping_priority\": \"express\"}}"
   }
   ```

## Buat layer di Lambda
<a name="publishing-layer"></a>

Anda dapat mempublikasikan layer Anda menggunakan konsol AWS CLI atau Lambda.

------
#### [ AWS CLI ]

Jalankan [publish-layer-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/publish-layer-version.html) AWS CLI perintah untuk membuat layer Lambda:

```
aws lambda publish-layer-version --layer-name my-layer --zip-file fileb://layer.zip --compatible-runtimes python3.14
```

Parameter [runtime yang kompatibel](https://docs.aws.amazon.com/lambda/latest/api/API_PublishLayerVersion.html#lambda-PublishLayerVersion-request-CompatibleRuntimes) adalah opsional. Saat ditentukan, Lambda menggunakan parameter ini untuk memfilter lapisan di konsol Lambda.

------
#### [ Console ]

**Untuk membuat lapisan (konsol)**

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

1. Pilih **Buat lapisan**.

1. Pilih **Unggah file.zip**, lalu unggah arsip.zip yang Anda buat sebelumnya.

1. (Opsional) Untuk **runtime yang kompatibel**, pilih runtime Python yang sesuai dengan versi Python yang Anda gunakan untuk membangun layer Anda.

1. Pilih **Buat**.

------

## Tambahkan layer ke fungsi Anda
<a name="python-layer-adding"></a>

------
#### [ AWS CLI ]

Untuk melampirkan layer ke fungsi Anda, jalankan [update-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-configuration.html) AWS CLI perintah. Untuk `--layers` parameter, gunakan lapisan ARN. ARN harus menentukan versi (misalnya,`arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1`). Untuk informasi selengkapnya, lihat [Versi lapisan dan lapisan](chapter-layers.md#lambda-layer-versions).

```
aws lambda update-function-configuration --function-name my-function --cli-binary-format raw-in-base64-out --layers "arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1"
```

**cli-binary-format**Opsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankan`aws configure set cli-binary-format raw-in-base64-out`. Untuk informasi selengkapnya, lihat [opsi baris perintah global yang AWS CLI didukung](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) di *Panduan AWS Command Line Interface Pengguna untuk Versi 2*.

------
#### [ Console ]

**Untuk menambahkan lapisan ke fungsi**

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

1. Pilih fungsinya.

1. Gulir ke bawah ke bagian **Layers**, lalu pilih **Add a layer**.

1. Di bawah **Pilih layer**, pilih **Custom layers**, dan kemudian pilih layer Anda.
**catatan**  
Jika Anda tidak menambahkan [runtime yang kompatibel](https://docs.aws.amazon.com/lambda/latest/api/API_PublishLayerVersion.html#lambda-PublishLayerVersion-request-CompatibleRuntimes) saat membuat layer, layer Anda tidak akan tercantum di sini. Anda dapat menentukan lapisan ARN sebagai gantinya.

1. Pilih **Tambahkan**.

------

## Contoh aplikasi
<a name="python-layer-sample-app"></a>

Untuk contoh lebih lanjut tentang cara menggunakan layer Lambda, lihat contoh aplikasi [layer-python](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/layer-python) di repositori Panduan Pengembang. AWS Lambda GitHub Aplikasi ini mencakup dua lapisan yang berisi pustaka Python. Setelah membuat layer, Anda dapat menerapkan dan memanggil fungsi yang sesuai untuk mengonfirmasi bahwa lapisan berfungsi seperti yang diharapkan.

# Menggunakan objek konteks Lambda untuk mengambil informasi fungsi Python
<a name="python-context"></a>

Saat Lambda menjalankan fungsi Anda, ia meneruskan objek konteks ke [handler](python-handler.md). Objek ini menyediakan metode dan properti yang memberikan informasi tentang lingkungan invokasi, fungsi, dan eksekusi. Untuk informasi selengkapnya tentang bagaimana objek konteks diteruskan ke handler fungsi, lihat [Tentukan penangan fungsi Lambda dengan Python](python-handler.md).

**Metode konteks**
+ `get_remaining_time_in_millis` – Mengembalikan jumlah milidetik yang tersisa sebelum waktu eksekusi habis.

**Properti konteks**
+ `function_name` – Nama fungsi Lambda.
+ `function_version` – [Versi](configuration-versions.md) fungsi.
+ `invoked_function_arn` – Amazon Resource Name (ARN) yang digunakan untuk memicu fungsi. Menunjukkan jika pemicu menyebutkan nomor versi atau alias.
+ `memory_limit_in_mb` – Jumlah memori yang dialokasikan untuk fungsi tersebut.
+ `aws_request_id` – Pengidentifikasi permintaan invokasi.
+ `log_group_name` – Grup log untuk fungsi.
+ `log_stream_name` – Aliran log untuk instans fungsi.
+ `identity` – (aplikasi seluler) Informasi tentang identitas Amazon Cognito yang mengesahkan permintaan.
  + `cognito_identity_id` – Identitas Amazon Cognito terautentikasi.
  + `cognito_identity_pool_id` – Kumpulan identitas Amazon Cognito yang mengesahkan invokasi.
+ `client_context` – (aplikasi seluler) Konteks klien yang disediakan untuk Lambda oleh aplikasi klien.
  + `client.installation_id`
  + `client.app_title`
  + `client.app_version_name`
  + `client.app_version_code`
  + `client.app_package_name`
  + `custom` – `dict` nilai khusus yang diatur oleh aplikasi klien seluler.
  + `env`— Informasi lingkungan yang disediakan oleh AWS SDK. `dict`

Powertools untuk Lambda (Python) memberikan definisi antarmuka untuk objek konteks Lambda. Anda dapat menggunakan definisi antarmuka untuk petunjuk tipe, atau untuk memeriksa lebih lanjut struktur objek konteks Lambda. Untuk definisi antarmuka, lihat [lambda\$1context.py](https://github.com/aws-powertools/powertools-lambda-python/blob/develop/aws_lambda_powertools/utilities/typing/lambda_context.py) di *powertools-lambda-python*repositori pada. GitHub

Contoh berikut menunjukkan fungsi penangan yang mencatat informasi konteks.

**Example handler.py**  

```
import time

def lambda_handler(event, context):   
    print("Lambda function ARN:", context.invoked_function_arn)
    print("CloudWatch log stream name:", context.log_stream_name)
    print("CloudWatch log group name:",  context.log_group_name)
    print("Lambda Request ID:", context.aws_request_id)
    print("Lambda function memory limits in MB:", context.memory_limit_in_mb)
    # We have added a 1 second delay so you can see the time remaining in get_remaining_time_in_millis.
    time.sleep(1) 
    print("Lambda time remaining in MS:", context.get_remaining_time_in_millis())
```

Selain opsi yang tercantum di atas, Anda juga dapat menggunakan AWS X-Ray SDK [Menginstrumentasi kode Python di AWS Lambda](python-tracing.md) untuk mengidentifikasi jalur kode kritis, melacak kinerjanya, dan menangkap data untuk dianalisis. 

# Log dan pantau fungsi Python Lambda
<a name="python-logging"></a>

AWS Lambda secara otomatis memonitor fungsi Lambda dan mengirim entri log ke Amazon. CloudWatch Fungsi Lambda Anda dilengkapi dengan grup CloudWatch log Log dan aliran log untuk setiap instance fungsi Anda. Lingkungan runtime Lambda mengirimkan detail tentang setiap pemanggilan dan output lainnya dari kode fungsi Anda ke aliran log. Untuk informasi selengkapnya tentang CloudWatch Log, lihat[Mengirim log fungsi Lambda ke Log CloudWatch](monitoring-cloudwatchlogs.md).

Untuk mengeluarkan log dari kode fungsi Anda, Anda dapat menggunakan [https://docs.python.org/3/library/logging.html](https://docs.python.org/3/library/logging.html)modul bawaan. Untuk entri yang lebih rinci, Anda dapat menggunakan pustaka logging apa pun yang menulis ke `stdout` atau`stderr`.

## Mencetak ke log
<a name="python-logging-output"></a>

Untuk mengirim output dasar ke log, Anda dapat menggunakan `print` metode dalam fungsi Anda. Contoh berikut mencatat nilai-nilai grup CloudWatch log Log dan aliran, dan objek acara.

Perhatikan bahwa jika fungsi Anda mengeluarkan log menggunakan pernyataan `print` Python, Lambda hanya dapat mengirim output CloudWatch log ke Log dalam format teks biasa. Untuk menangkap log di JSON terstruktur, Anda perlu menggunakan pustaka logging yang didukung. Untuk informasi selengkapnya, lihat [Menggunakan kontrol logging lanjutan Lambda dengan Python](#python-logging-advanced).

**Example lambda\$1function.py**  

```
import os
def lambda_handler(event, context):
    print('## ENVIRONMENT VARIABLES')
    print(os.environ['AWS_LAMBDA_LOG_GROUP_NAME'])
    print(os.environ['AWS_LAMBDA_LOG_STREAM_NAME'])
    print('## EVENT')
    print(event)
```

**Example output log**  

```
START RequestId: 8f507cfc-xmpl-4697-b07a-ac58fc914c95 Version: $LATEST
## ENVIRONMENT VARIABLES
/aws/lambda/my-function
2025/08/31/[$LATEST]3893xmpl7fac4485b47bb75b671a283c
## EVENT
{'key': 'value'}
END RequestId: 8f507cfc-xmpl-4697-b07a-ac58fc914c95
REPORT RequestId: 8f507cfc-xmpl-4697-b07a-ac58fc914c95  Duration: 15.74 ms  Billed Duration: 147 ms Memory Size: 128 MB Max Memory Used: 56 MB  Init Duration: 130.49 ms
XRAY TraceId: 1-5e34a614-10bdxmplf1fb44f07bc535a1   SegmentId: 07f5xmpl2d1f6f85 Sampled: true
```

Runtime Python melakukan log baris `START`, `END`, dan `REPORT` untuk setiap invokasi. `REPORT`Baris tersebut mencakup data berikut:

**Laporkan bidang data baris**
+ **RequestId** – ID permintaan unik untuk invokasi.
+ **Durasi** – Jumlah waktu yang digunakan oleh metode handler fungsi Anda gunakan untuk memproses peristiwa.
+ **Durasi yang Ditagih** – Jumlah waktu yang ditagihkan untuk invokasi.
+ **Ukuran Memori** – Jumlah memori yang dialokasikan untuk fungsi.
+ **Memori Maks yang Digunakan** – Jumlah memori yang digunakan oleh fungsi. Saat pemanggilan berbagi lingkungan eksekusi, Lambda melaporkan memori maksimum yang digunakan di semua pemanggilan. Perilaku ini dapat menghasilkan nilai yang dilaporkan lebih tinggi dari yang diharapkan.
+ **Durasi Init** – Untuk permintaan pertama yang dilayani, lama waktu yang diperlukan runtime untuk memuat fungsi dan menjalankan kode di luar metode handler.
+ **XRAY TraceId** — Untuk permintaan yang dilacak, ID [AWS X-Ray jejak](services-xray.md).
+ **SegmentId** – Untuk permintaan yang dilacak, ID segmen X-Ray.
+ **Diambil Sampel** – Untuk permintaan yang dilacak, hasil pengambilan sampel.

## Menggunakan pustaka logging
<a name="python-logging-lib"></a>

Untuk log yang lebih detail, gunakan modul [logging](https://docs.python.org/3/library/logging.html) di pustaka standar, atau pustaka logging pihak ketiga mana pun yang menulis ke `stdout` atau`stderr`.

Untuk runtime Python yang didukung, Anda dapat memilih apakah log yang dibuat menggunakan `logging` modul standar ditangkap dalam teks biasa atau JSON. Untuk mempelajari selengkapnya, lihat [Menggunakan kontrol logging lanjutan Lambda dengan Python](#python-logging-advanced).

Saat ini, format log default untuk semua runtime Python adalah teks biasa. Contoh berikut menunjukkan bagaimana output log yang dibuat menggunakan `logging` modul standar ditangkap dalam teks biasa di CloudWatch Log.

```
import os
import logging
logger = logging.getLogger()
logger.setLevel("INFO")
  
def lambda_handler(event, context):
    logger.info('## ENVIRONMENT VARIABLES')
    logger.info(os.environ['AWS_LAMBDA_LOG_GROUP_NAME'])
    logger.info(os.environ['AWS_LAMBDA_LOG_STREAM_NAME'])
    logger.info('## EVENT')
    logger.info(event)
```

Output dari `logger` mencakup tingkat log, stempel waktu, dan ID permintaan.

```
START RequestId: 1c8df7d3-xmpl-46da-9778-518e6eca8125 Version: $LATEST
[INFO]  2025-08-31T22:12:58.534Z    1c8df7d3-xmpl-46da-9778-518e6eca8125    ## ENVIRONMENT VARIABLES
[INFO]  2025-08-31T22:12:58.534Z    1c8df7d3-xmpl-46da-9778-518e6eca8125    /aws/lambda/my-function
[INFO]  2025-08-31T22:12:58.534Z    1c8df7d3-xmpl-46da-9778-518e6eca8125    2025/01/31/[$LATEST]1bbe51xmplb34a2788dbaa7433b0aa4d
[INFO]  2025-08-31T22:12:58.535Z    1c8df7d3-xmpl-46da-9778-518e6eca8125    ## EVENT
[INFO]  2025-08-31T22:12:58.535Z    1c8df7d3-xmpl-46da-9778-518e6eca8125    {'key': 'value'}
END RequestId: 1c8df7d3-xmpl-46da-9778-518e6eca8125
REPORT RequestId: 1c8df7d3-xmpl-46da-9778-518e6eca8125  Duration: 2.75 ms   Billed Duration: 117 ms Memory Size: 128 MB Max Memory Used: 56 MB  Init Duration: 113.51 ms
XRAY TraceId: 1-5e34a66a-474xmpl7c2534a87870b4370   SegmentId: 073cxmpl3e442861 Sampled: true
```

**catatan**  
Ketika format log fungsi Anda disetel ke teks biasa, pengaturan tingkat log default untuk runtime Python adalah WARN. Ini berarti bahwa Lambda hanya mengirimkan output log dari level WARN dan lebih rendah ke Log. CloudWatch Untuk mengubah tingkat log default, gunakan `logging` `setLevel()` metode Python seperti yang ditunjukkan dalam kode contoh ini. Jika Anda menyetel format log fungsi Anda ke JSON, sebaiknya Anda mengonfigurasi level log fungsi Anda menggunakan Lambda Advanced Logging Controls dan bukan dengan menyetel level log dalam kode. Untuk mempelajari selengkapnya, lihat [Menggunakan penyaringan tingkat log dengan Python](#python-logging-levels)

## Menggunakan kontrol logging lanjutan Lambda dengan Python
<a name="python-logging-advanced"></a>

Untuk memberi Anda kontrol lebih besar atas bagaimana log fungsi Anda ditangkap, diproses, dan dikonsumsi, Anda dapat mengonfigurasi opsi logging berikut untuk runtime Lambda Python yang didukung:
+ **Format log** - pilih antara teks biasa dan format JSON terstruktur untuk log fungsi Anda
+ **Tingkat log** - untuk log dalam format JSON, pilih tingkat detail log yang dikirim Lambda ke CloudWatch Amazon, seperti ERROR, DEBUG, atau INFO
+ **Grup log** - pilih grup CloudWatch log yang dikirimkan oleh fungsi Anda

Untuk informasi selengkapnya tentang opsi pencatatan ini, dan petunjuk tentang cara mengonfigurasi fungsi Anda untuk menggunakannya, lihat[Mengkonfigurasi kontrol logging lanjutan untuk fungsi Lambda](monitoring-logs.md#monitoring-cloudwatchlogs-advanced).

Untuk mempelajari lebih lanjut tentang menggunakan format log dan opsi tingkat log dengan fungsi Lambda Python Anda, lihat panduan di bagian berikut.

### Menggunakan log JSON terstruktur dengan Python
<a name="python-logging-JSON"></a>

Jika Anda memilih JSON untuk format log fungsi Anda, Lambda akan mengirim keluaran log oleh pustaka CloudWatch logging standar Python ke JSON terstruktur. Setiap objek log JSON berisi setidaknya empat pasangan nilai kunci dengan kunci berikut:
+ `"timestamp"`- waktu pesan log dihasilkan
+ `"level"`- tingkat log yang ditetapkan untuk pesan
+ `"message"`- isi pesan log
+ `"requestId"`- ID permintaan unik untuk pemanggilan fungsi

`logging`Pustaka Python juga dapat menambahkan pasangan nilai kunci tambahan seperti `"logger"` ke objek JSON ini.

Contoh di bagian berikut menunjukkan bagaimana output log yang dihasilkan menggunakan pustaka `logging` Python ditangkap CloudWatch di Log saat Anda mengonfigurasi format log fungsi Anda sebagai JSON.

Perhatikan bahwa jika Anda menggunakan `print` metode untuk menghasilkan output log dasar seperti yang dijelaskan dalam[Mencetak ke log](#python-logging-output), Lambda akan menangkap output ini sebagai teks biasa, bahkan jika Anda mengonfigurasi format logging fungsi Anda sebagai JSON.

#### Output log JSON standar menggunakan pustaka logging Python
<a name="python-logging-standard"></a>

Contoh cuplikan kode dan keluaran log berikut menunjukkan bagaimana output log standar yang dihasilkan menggunakan `logging` pustaka Python ditangkap di CloudWatch Log saat format log fungsi Anda disetel ke JSON.

**Example Kode pencatatan Python**  

```
import logging  
logger = logging.getLogger()

def lambda_handler(event, context):
    logger.info("Inside the handler function")
```

**Example Catatan log JSON**  

```
{
    "timestamp":"2025-10-27T19:17:45.586Z",
    "level":"INFO",
    "message":"Inside the handler function",
    "logger": "root",
    "requestId":"79b4f56e-95b1-4643-9700-2807f4e68189"
}
```

#### Mencatat parameter tambahan di JSON
<a name="python-logging-extra"></a>

Ketika format log fungsi Anda diatur ke JSON, Anda juga dapat mencatat parameter tambahan dengan pustaka `logging` Python standar dengan menggunakan kata kunci untuk `extra` meneruskan kamus Python ke output log.

**Example Kode pencatatan Python**  

```
import logging

def lambda_handler(event, context):
    logging.info(
        "extra parameters example", 
        extra={"a":"b", "b": [3]},
    )
```

**Example Catatan log JSON**  

```
{
  "timestamp": "2025-11-02T15:26:28Z",
  "level": "INFO",
  "message": "extra parameters example",
  "logger": "root",
  "requestId": "3dbd5759-65f6-45f8-8d7d-5bdc79a3bd01",
  "a": "b",
  "b": [
    3
  ]
}
```

#### Pengecualian logging di JSON
<a name="python-logging-exception"></a>

Cuplikan kode berikut menunjukkan bagaimana pengecualian Python ditangkap dalam output log fungsi Anda saat Anda mengonfigurasi format log sebagai JSON. Perhatikan bahwa output log yang dihasilkan menggunakan `logging.exception` ditetapkan ERROR tingkat log.

**Example Kode pencatatan Python**  

```
import logging

def lambda_handler(event, context):
    try:
        raise Exception("exception")
    except:
        logging.exception("msg")
```

**Example Catatan log JSON**  

```
{
  "timestamp": "2025-11-02T16:18:57Z",
  "level": "ERROR",
  "message": "msg",
  "logger": "root",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 15, in lambda_handler\n    raise Exception(\"exception\")\n"
  ],
  "errorType": "Exception",
  "errorMessage": "exception",
  "requestId": "3f9d155c-0f09-46b7-bdf1-e91dab220855",
  "location": "/var/task/lambda_function.py:lambda_handler:17"
}
```

#### Log terstruktur JSON dengan alat logging lainnya
<a name="python-logging-thirdparty"></a>

Jika kode Anda sudah menggunakan pustaka logging lain, seperti Powertools for AWS Lambda, untuk menghasilkan log terstruktur JSON, Anda tidak perlu membuat perubahan apa pun. AWS Lambda tidak menyandikan dua kali log apa pun yang sudah dikodekan JSON. Bahkan jika Anda mengonfigurasi fungsi Anda untuk menggunakan format log JSON, output logging Anda muncul CloudWatch dalam struktur JSON yang Anda tentukan.

Contoh berikut menunjukkan bagaimana output log yang dihasilkan menggunakan Powertools untuk AWS Lambda paket ditangkap di CloudWatch Log. Format output log ini sama apakah konfigurasi logging fungsi Anda diatur ke JSON atau TEXT. Untuk informasi selengkapnya tentang penggunaan Powertools untuk AWS Lambda, lihat [Menggunakan Powertools untuk AWS Lambda (Python) AWS SAM dan untuk logging terstruktur](#python-logging-sam) dan [Menggunakan Powertools untuk AWS Lambda (Python) AWS CDK dan untuk logging terstruktur](#python-logging-powertools-cdk)

**Example Cuplikan kode logging Python (menggunakan Powertools untuk) AWS Lambda**  

```
from aws_lambda_powertools import Logger

logger = Logger()

def lambda_handler(event, context):
    logger.info("Inside the handler function")
```

**Example Catatan log JSON (menggunakan Powertools untuk) AWS Lambda**  

```
{ 
    "level": "INFO", 
    "location": "lambda_handler:7", 
    "message": "Inside the handler function", 
    "timestamp": "2025-10-31 22:38:21,010+0000", 
    "service": "service_undefined", 
    "xray_trace_id": "1-654181dc-65c15d6b0fecbdd1531ecb30" 
}
```

### Menggunakan penyaringan tingkat log dengan Python
<a name="python-logging-levels"></a>

Dengan mengonfigurasi penyaringan tingkat log, Anda dapat memilih untuk mengirim hanya log dari tingkat logging tertentu atau lebih rendah ke Log. CloudWatch Untuk mempelajari cara mengonfigurasi pemfilteran tingkat log untuk fungsi Anda, lihat. [Pemfilteran tingkat log](monitoring-cloudwatchlogs-log-level.md)

 AWS Lambda Untuk memfilter log aplikasi Anda sesuai dengan tingkat lognya, fungsi Anda harus menggunakan log berformat JSON. Anda dapat mencapai ini dengan dua cara:
+ Buat output log menggunakan pustaka `logging` Python standar dan konfigurasikan fungsi Anda untuk menggunakan pemformatan log JSON. AWS Lambda kemudian memfilter output log Anda menggunakan pasangan nilai kunci “level” di objek JSON yang dijelaskan dalam. [Menggunakan log JSON terstruktur dengan Python](#python-logging-JSON) Untuk mempelajari cara mengonfigurasi format log fungsi Anda, lihat[Mengkonfigurasi kontrol logging lanjutan untuk fungsi Lambda](monitoring-logs.md#monitoring-cloudwatchlogs-advanced).
+ Gunakan pustaka atau metode logging lain untuk membuat log terstruktur JSON dalam kode Anda yang menyertakan pasangan nilai kunci “level” yang menentukan tingkat keluaran log. Misalnya, Anda dapat menggunakan Powertools AWS Lambda untuk menghasilkan output log terstruktur JSON dari kode Anda.

  Anda juga dapat menggunakan pernyataan cetak untuk menampilkan objek JSON yang berisi pengenal tingkat log. Pernyataan cetak berikut menghasilkan output diformat JSON di mana tingkat log diatur ke INFO. AWS Lambda akan mengirim objek JSON ke CloudWatch Log jika level logging fungsi Anda diatur ke INFO, DEBUG, atau TRACE.

  ```
  print('{"msg":"My log message", "level":"info"}')
  ```

Agar Lambda dapat memfilter log fungsi Anda, Anda juga harus menyertakan pasangan nilai `"timestamp"` kunci dalam keluaran log JSON Anda. Waktu harus ditentukan dalam format stempel waktu [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) yang valid. Jika Anda tidak menyediakan stempel waktu yang valid, Lambda akan menetapkan log INFO level dan menambahkan stempel waktu untuk Anda.

## Melihat log di konsol Lambda
<a name="python-logging-console"></a>

Anda dapat menggunakan konsol Lambda untuk melihat output log setelah Anda memanggil fungsi Lambda.

Jika kode Anda dapat diuji dari editor **Kode** tertanam, Anda akan menemukan log dalam **hasil eksekusi**. Saat Anda menggunakan fitur pengujian konsol untuk menjalankan fungsi, Anda akan menemukan **Keluaran Log** di bagian **Detail**.

## Melihat log di CloudWatch konsol
<a name="python-logging-cwconsole"></a>

Anda dapat menggunakan CloudWatch konsol Amazon untuk melihat log untuk semua pemanggilan fungsi Lambda.

**Untuk melihat log di CloudWatch konsol**

1. Buka [halaman Grup log](https://console.aws.amazon.com/cloudwatch/home?#logs:) di CloudWatch konsol.

1. Pilih grup log untuk fungsi Anda (**/aws/lambda/ *your-function-name***).

1. Pilih pengaliran log.

Setiap aliran log sesuai dengan [instans fungsi Anda](lambda-runtime-environment.md). Aliran log muncul saat Anda memperbarui fungsi Lambda, dan saat instance tambahan dibuat untuk menangani pemanggilan bersamaan. Untuk menemukan log untuk pemanggilan tertentu, kami sarankan untuk menginstrumentasi fungsi Anda dengan. AWS X-Ray X-Ray mencatat detail tentang permintaan dan pengaliran log di jejak.

## Melihat log dengan AWS CLI
<a name="python-logging-cli"></a>

 AWS CLI Ini adalah alat sumber terbuka yang memungkinkan Anda berinteraksi dengan AWS layanan menggunakan perintah di shell baris perintah Anda. Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki [AWS CLI versi 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

Anda dapat menggunakan [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) untuk mengambil log untuk invokasi menggunakan opsi perintah `--log-type`. Respons berisi bidang `LogResult` yang memuat hingga 4 KB log berkode base64 dari invokasi.

**Example mengambil ID log**  
Contoh berikut menunjukkan cara mengambil *ID log* dari `LogResult` untuk fungsi bernama `my-function`.  

```
aws lambda invoke --function-name my-function out --log-type Tail
```
Anda akan melihat output berikut:  

```
{
    "StatusCode": 200,
    "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",
    "ExecutedVersion": "$LATEST"
}
```

**Example mendekode log**  
Pada prompt perintah yang sama, gunakan utilitas `base64` untuk mendekodekan log. Contoh berikut menunjukkan cara mengambil log berkode base64 untuk `my-function`.  

```
aws lambda invoke --function-name my-function out --log-type Tail \
--query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode
```
**cli-binary-format**Opsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankan`aws configure set cli-binary-format raw-in-base64-out`. Untuk informasi selengkapnya, lihat [opsi baris perintah global yang AWS CLI didukung](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) di *Panduan AWS Command Line Interface Pengguna untuk Versi 2*.  
Anda akan melihat output berikut:  

```
START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST
"AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib",
END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8
REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8  Duration: 79.67 ms      Billed Duration: 80 ms         Memory Size: 128 MB     Max Memory Used: 73 MB
```
Utilitas `base64` tersedia di Linux, macOS, dan [Ubuntu pada Windows](https://docs.microsoft.com/en-us/windows/wsl/install-win10). Pengguna macOS mungkin harus menggunakan `base64 -D`.

**Example Skrip get-logs.sh**  
Pada prompt perintah yang sama, gunakan script berikut untuk mengunduh lima peristiwa log terakhir. Skrip menggunakan `sed` untuk menghapus kutipan dari file output, dan akan tidur selama 15 detik untuk memberikan waktu agar log tersedia. Output mencakup respons dari Lambda dan output dari perintah `get-log-events`.   
Salin konten dari contoh kode berikut dan simpan dalam direktori proyek Lambda Anda sebagai `get-logs.sh`.  
**cli-binary-format**Opsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankan`aws configure set cli-binary-format raw-in-base64-out`. Untuk informasi selengkapnya, lihat [opsi baris perintah global yang AWS CLI didukung](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) di *Panduan AWS Command Line Interface Pengguna untuk Versi 2*.  

```
#!/bin/bash
aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"key": "value"}' out
sed -i'' -e 's/"//g' out
sleep 15
aws logs get-log-events --log-group-name /aws/lambda/my-function --log-stream-name stream1 --limit 5
```

**Example macOS dan Linux (khusus)**  
Pada prompt perintah yang sama, pengguna macOS dan Linux mungkin perlu menjalankan perintah berikut untuk memastikan skrip dapat dijalankan.  

```
chmod -R 755 get-logs.sh
```

**Example mengambil lima log acara terakhir**  
Pada prompt perintah yang sama, gunakan skrip berikut untuk mendapatkan lima log acara terakhir.  

```
./get-logs.sh
```
Anda akan melihat output berikut:  

```
{
    "StatusCode": 200,
    "ExecutedVersion": "$LATEST"
}
{
    "events": [
        {
            "timestamp": 1559763003171,
            "message": "START RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf Version: $LATEST\n",
            "ingestionTime": 1559763003309
        },
        {
            "timestamp": 1559763003173,
            "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tENVIRONMENT VARIABLES\r{\r  \"AWS_LAMBDA_FUNCTION_VERSION\": \"$LATEST\",\r ...",
            "ingestionTime": 1559763018353
        },
        {
            "timestamp": 1559763003173,
            "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tEVENT\r{\r  \"key\": \"value\"\r}\n",
            "ingestionTime": 1559763018353
        },
        {
            "timestamp": 1559763003218,
            "message": "END RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\n",
            "ingestionTime": 1559763018353
        },
        {
            "timestamp": 1559763003218,
            "message": "REPORT RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\tDuration: 26.73 ms\tBilled Duration: 27 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n",
            "ingestionTime": 1559763018353
        }
    ],
    "nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795",
    "nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080"
}
```

## Menghapus log
<a name="python-logging-delete"></a>

Grup log tidak terhapus secara otomatis ketika Anda menghapus suatu fungsi. Untuk menghindari penyimpanan log secara tidak terbatas, hapus kelompok log, atau [lakukan konfigurasi periode penyimpanan](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#SettingLogRetention), yang setelahnya log akan dihapus secara otomatis.

## Menggunakan alat logging dan pustaka lainnya
<a name="python-tools-libraries"></a>

[Powertools for AWS Lambda (Python](https://docs.aws.amazon.com/powertools/python/)) adalah toolkit pengembang untuk mengimplementasikan praktik terbaik Tanpa Server dan meningkatkan kecepatan pengembang. [Utilitas Logger menyediakan logger](https://docs.aws.amazon.com/powertools/python/latest/core/logger/) yang dioptimalkan Lambda yang mencakup informasi tambahan tentang konteks fungsi di semua fungsi Anda dengan output terstruktur sebagai JSON. Gunakan utilitas ini untuk melakukan hal berikut:
+ Tangkap bidang kunci dari konteks Lambda, cold start, dan struktur logging output sebagai JSON
+ Log peristiwa pemanggilan Lambda saat diinstruksikan (dinonaktifkan secara default)
+ Cetak semua log hanya untuk persentase pemanggilan melalui pengambilan sampel log (dinonaktifkan secara default)
+ Tambahkan kunci tambahan ke log terstruktur kapan saja
+ Gunakan pemformat log kustom (Bring Your Own Formatter) untuk mengeluarkan log dalam struktur yang kompatibel dengan Logging RFC organisasi Anda

## Menggunakan Powertools untuk AWS Lambda (Python) AWS SAM dan untuk logging terstruktur
<a name="python-logging-sam"></a>

Ikuti langkah-langkah di bawah ini untuk mengunduh, membangun, dan menyebarkan contoh aplikasi Hello World Python dengan [Powertools terintegrasi untuk](https://docs.aws.amazon.com/powertools/python/latest/) modul Python menggunakan aplikasi. AWS SAM Aplikasi ini mengimplementasikan backend API dasar dan menggunakan Powertools untuk memancarkan log, metrik, dan jejak. Ini terdiri dari titik akhir Amazon API Gateway dan fungsi Lambda. Saat Anda mengirim permintaan GET ke titik akhir API Gateway, fungsi Lambda memanggil, mengirim log dan metrik menggunakan Format Metrik Tertanam CloudWatch ke, dan mengirimkan jejak ke. AWS X-Ray Fungsi mengembalikan `hello world` pesan.

**Prasyarat**

Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
+ Python 3.9
+ [AWS CLI versi 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [AWS SAM CLI versi 1.75](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html) atau yang lebih baru. Jika Anda memiliki versi CLI yang lebih lama, lihat [Memutakhirkan AWS SAM CLI. AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/manage-sam-cli-versions.html#manage-sam-cli-versions-upgrade)

**Menyebarkan aplikasi sampel AWS SAM**

1. Inisialisasi aplikasi menggunakan template Hello World Python.

   ```
   sam init --app-template hello-world-powertools-python --name sam-app --package-type Zip --runtime python3.9 --no-tracing
   ```

1. Bangun aplikasi.

   ```
   cd sam-app && sam build
   ```

1. Terapkan aplikasi.

   ```
   sam deploy --guided
   ```

1. Ikuti petunjuk di layar. Untuk menerima opsi default yang disediakan dalam pengalaman interaktif, tekan`Enter`.
**catatan**  
Karena **HelloWorldFunction mungkin tidak memiliki otorisasi yang ditentukan, Apakah ini baik-baik saja?** , pastikan untuk masuk`y`.

1. Dapatkan URL aplikasi yang digunakan:

   ```
   aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text
   ```

1. Memanggil titik akhir API:

   ```
   curl GET <URL_FROM_PREVIOUS_STEP>
   ```

   Jika berhasil, Anda akan melihat tanggapan ini:

   ```
   {"message":"hello world"}
   ```

1. Untuk mendapatkan log untuk fungsi tersebut, jalankan [log sam](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-logs.html). Untuk informasi selengkapnya, lihat [Bekerja dengan log](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-logging.html) di *Panduan AWS Serverless Application Model Pengembang*.

   ```
   sam logs --stack-name sam-app
   ```

   Output log terlihat seperti ini:

   ```
   2025/02/03/[$LATEST]ea9a64ec87294bf6bbc9026c05a01e04 2025-02-03T14:59:50.371000 INIT_START Runtime Version: python:3.9.v16    Runtime Version ARN: arn:aws:lambda:us-east-1::runtime:07a48df201798d627f2b950f03bb227aab4a655a1d019c3296406f95937e2525
   2025/02/03/[$LATEST]ea9a64ec87294bf6bbc9026c05a01e04 2025-02-03T14:59:51.112000 START RequestId: d455cfc4-7704-46df-901b-2a5cce9405be Version: $LATEST
   2025/02/03/[$LATEST]ea9a64ec87294bf6bbc9026c05a01e04 2025-02-03T14:59:51.114000 {
     "level": "INFO",
     "location": "hello:23",
     "message": "Hello world API - HTTP 200",
     "timestamp": "2025-02-03 14:59:51,113+0000",
     "service": "PowertoolsHelloWorld",
     "cold_start": true,
     "function_name": "sam-app-HelloWorldFunction-YBg8yfYtOc9j",
     "function_memory_size": "128",
     "function_arn": "arn:aws:lambda:us-east-1:111122223333:function:sam-app-HelloWorldFunction-YBg8yfYtOc9j",
     "function_request_id": "d455cfc4-7704-46df-901b-2a5cce9405be",
     "correlation_id": "e73f8aef-5e07-436e-a30b-63e4b23f0047",
     "xray_trace_id": "1-63dd2166-434a12c22e1307ff2114f299"
   }
   2025/02/03/[$LATEST]ea9a64ec87294bf6bbc9026c05a01e04 2025-02-03T14:59:51.126000 {
     "_aws": {
       "Timestamp": 1675436391126,
       "CloudWatchMetrics": [
         {
           "Namespace": "Powertools",
           "Dimensions": [
             [
               "function_name",
               "service"
             ]
           ],
           "Metrics": [
             {
               "Name": "ColdStart",
               "Unit": "Count"
             }
           ]
         }
       ]
     },
     "function_name": "sam-app-HelloWorldFunction-YBg8yfYtOc9j",
     "service": "PowertoolsHelloWorld",
     "ColdStart": [
       1.0
     ]
   }
   2025/02/03/[$LATEST]ea9a64ec87294bf6bbc9026c05a01e04 2025-02-03T14:59:51.126000 {
     "_aws": {
       "Timestamp": 1675436391126,
       "CloudWatchMetrics": [
         {
           "Namespace": "Powertools",
           "Dimensions": [
             [
               "service"
             ]
           ],
           "Metrics": [
             {
               "Name": "HelloWorldInvocations",
               "Unit": "Count"
             }
           ]
         }
       ]
     },
     "service": "PowertoolsHelloWorld",
     "HelloWorldInvocations": [
       1.0
     ]
   }
   2025/02/03/[$LATEST]ea9a64ec87294bf6bbc9026c05a01e04 2025-02-03T14:59:51.128000 END RequestId: d455cfc4-7704-46df-901b-2a5cce9405be
   2025/02/03/[$LATEST]ea9a64ec87294bf6bbc9026c05a01e04 2025-02-03T14:59:51.128000 REPORT RequestId: d455cfc4-7704-46df-901b-2a5cce9405be    Duration: 16.33 ms    Billed Duration: 756 ms    Memory Size: 128 MB    Max Memory Used: 64 MB    Init Duration: 739.46 ms    
   XRAY TraceId: 1-63dd2166-434a12c22e1307ff2114f299    SegmentId: 3c5d18d735a1ced0    Sampled: true
   ```

1. Ini adalah titik akhir API publik yang dapat diakses melalui internet. Kami menyarankan Anda menghapus titik akhir setelah pengujian.

   ```
   sam delete
   ```

### Mengelola retensi log
<a name="python-log-retention"></a>

Grup log tidak terhapus secara otomatis ketika Anda menghapus suatu fungsi. Untuk menghindari penyimpanan log tanpa batas waktu, hapus grup log, atau konfigurasikan periode retensi setelah itu secara CloudWatch otomatis menghapus log. Untuk mengatur penyimpanan log, tambahkan yang berikut ini ke AWS SAM templat Anda:

```
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      # Omitting other properties

  LogGroup:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: !Sub "/aws/lambda/${HelloWorldFunction}"
      RetentionInDays: 7
```

## Menggunakan Powertools untuk AWS Lambda (Python) AWS CDK dan untuk logging terstruktur
<a name="python-logging-powertools-cdk"></a>

Ikuti langkah-langkah di bawah ini untuk mengunduh, membangun, dan menyebarkan contoh aplikasi Hello World Python dengan [Powertools terintegrasi untuk modul AWS Lambda (Python](https://docs.aws.amazon.com/powertools/python/latest/)) menggunakan modul. AWS CDK Aplikasi ini mengimplementasikan backend API dasar dan menggunakan Powertools untuk memancarkan log, metrik, dan jejak. Ini terdiri dari titik akhir Amazon API Gateway dan fungsi Lambda. Saat Anda mengirim permintaan GET ke titik akhir API Gateway, fungsi Lambda memanggil, mengirim log dan metrik menggunakan Format Metrik Tertanam CloudWatch ke, dan mengirimkan jejak ke. AWS X-Ray Fungsi mengembalikan pesan hello world.

**Prasyarat**

Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
+ Python 3.9
+ [AWS CLI versi 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [AWS CDK versi 2](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_prerequisites)
+ [AWS SAM CLI versi 1.75](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html) atau yang lebih baru. Jika Anda memiliki versi CLI yang lebih lama, lihat [Memutakhirkan AWS SAM CLI. AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/manage-sam-cli-versions.html#manage-sam-cli-versions-upgrade)

**Menyebarkan aplikasi sampel AWS CDK**

1. Buat direktori proyek untuk aplikasi baru Anda.

   ```
   mkdir hello-world
   cd hello-world
   ```

1. Inisialisasi aplikasi.

   ```
   cdk init app --language python
   ```

1.  Instal dependensi Python.

   ```
   pip install -r requirements.txt
   ```

1. Buat direktori **lambda\$1function di bawah folder** root.

   ```
   mkdir lambda_function
   cd lambda_function
   ```

1. Buat file **app.py** dan tambahkan kode berikut ke file. Ini adalah kode untuk fungsi Lambda.

   ```
   from aws_lambda_powertools.event_handler import APIGatewayRestResolver
   from aws_lambda_powertools.utilities.typing import LambdaContext
   from aws_lambda_powertools.logging import correlation_paths
   from aws_lambda_powertools import Logger
   from aws_lambda_powertools import Tracer
   from aws_lambda_powertools import Metrics
   from aws_lambda_powertools.metrics import MetricUnit
   
   app = APIGatewayRestResolver()
   tracer = Tracer()
   logger = Logger()
   metrics = Metrics(namespace="PowertoolsSample")
   
   @app.get("/hello")
   @tracer.capture_method
   def hello():
       # adding custom metrics
       # See: https://docs.aws.amazon.com/powertools/python/latest//latest/core/metrics/
       metrics.add_metric(name="HelloWorldInvocations", unit=MetricUnit.Count, value=1)
   
       # structured log
       # See: https://docs.aws.amazon.com/powertools/python/latest//latest/core/logger/
       logger.info("Hello world API - HTTP 200")
       return {"message": "hello world"}
   
   # Enrich logging with contextual information from Lambda
   @logger.inject_lambda_context(correlation_id_path=correlation_paths.API_GATEWAY_REST)
   # Adding tracer
   # See: https://docs.aws.amazon.com/powertools/python/latest//latest/core/tracer/
   @tracer.capture_lambda_handler
   # ensures metrics are flushed upon request completion/failure and capturing ColdStart metric
   @metrics.log_metrics(capture_cold_start_metric=True)
   def lambda_handler(event: dict, context: LambdaContext) -> dict:
       return app.resolve(event, context)
   ```

1. Buka direktori **hello\$1world**. Anda akan melihat file bernama **hello\$1world\$1stack.py**.

   ```
   cd ..
   cd hello_world
   ```

1. Buka **hello\$1world\$1stack.py** dan tambahkan kode berikut ke file. Ini berisi [Konstruktor Lambda](https://docs.aws.amazon.com/cdk/api/v1/python/aws_cdk.aws_lambda.html), yang membuat fungsi Lambda, mengonfigurasi variabel lingkungan untuk Powertools dan menetapkan retensi log ke satu minggu, dan [Konstruktor ApiGatewayv 1](https://docs.aws.amazon.com/cdk/api/v1/python/aws_cdk.aws_apigateway.html), yang membuat REST API.

   ```
   from aws_cdk import (
       Stack,
       aws_apigateway as apigwv1,
       aws_lambda as lambda_,
       CfnOutput,
       Duration
   )
   from constructs import Construct
   
   class HelloWorldStack(Stack):
   
       def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
           super().__init__(scope, construct_id, **kwargs)
   
           # Powertools Lambda Layer
           powertools_layer = lambda_.LayerVersion.from_layer_version_arn(
               self,
               id="lambda-powertools",
               # Using AWS Lambda Powertools via Lambda Layer
               # This imports the Powertools layer which provides observability features for Lambda functions
               # For available versions, see: https://docs.aws.amazon.com/powertools/python/latest/#lambda-layer
           )
   
           function = lambda_.Function(self,
               'sample-app-lambda',
               runtime=lambda_.Runtime.PYTHON_3_9,
               layers=[powertools_layer],
               code = lambda_.Code.from_asset("./lambda_function/"),
               handler="app.lambda_handler",
               memory_size=128,
               timeout=Duration.seconds(3),
               architecture=lambda_.Architecture.X86_64,
               environment={
                   "POWERTOOLS_SERVICE_NAME": "PowertoolsHelloWorld",
                   "POWERTOOLS_METRICS_NAMESPACE": "PowertoolsSample",
                   "LOG_LEVEL": "INFO"
               }
           )
   
           apigw = apigwv1.RestApi(self, "PowertoolsAPI", deploy_options=apigwv1.StageOptions(stage_name="dev"))
   
           hello_api = apigw.root.add_resource("hello")
           hello_api.add_method("GET", apigwv1.LambdaIntegration(function, proxy=True))
   
           CfnOutput(self, "apiUrl", value=f"{apigw.url}hello")
   ```

1. Men-deploy aplikasi Anda.

   ```
   cd ..
   cdk deploy
   ```

1. Dapatkan URL aplikasi yang digunakan:

   ```
   aws cloudformation describe-stacks --stack-name HelloWorldStack --query 'Stacks[0].Outputs[?OutputKey==`apiUrl`].OutputValue' --output text
   ```

1. Memanggil titik akhir API:

   ```
   curl GET <URL_FROM_PREVIOUS_STEP>
   ```

   Jika berhasil, Anda akan melihat tanggapan ini:

   ```
   {"message":"hello world"}
   ```

1. Untuk mendapatkan log untuk fungsi tersebut, jalankan [log sam](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-logs.html). Untuk informasi selengkapnya, lihat [Bekerja dengan log](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-logging.html) di *Panduan AWS Serverless Application Model Pengembang*.

   ```
   sam logs --stack-name HelloWorldStack
   ```

   Output log terlihat seperti ini:

   ```
   2025/02/03/[$LATEST]ea9a64ec87294bf6bbc9026c05a01e04 2025-02-03T14:59:50.371000 INIT_START Runtime Version: python:3.9.v16    Runtime Version ARN: arn:aws:lambda:us-east-1::runtime:07a48df201798d627f2b950f03bb227aab4a655a1d019c3296406f95937e2525
   2025/02/03/[$LATEST]ea9a64ec87294bf6bbc9026c05a01e04 2025-02-03T14:59:51.112000 START RequestId: d455cfc4-7704-46df-901b-2a5cce9405be Version: $LATEST
   2025/02/03/[$LATEST]ea9a64ec87294bf6bbc9026c05a01e04 2025-02-03T14:59:51.114000 {
     "level": "INFO",
     "location": "hello:23",
       "message": "Hello world API - HTTP 200",
     "timestamp": "2025-02-03 14:59:51,113+0000",
     "service": "PowertoolsHelloWorld",
     "cold_start": true,
     "function_name": "sam-app-HelloWorldFunction-YBg8yfYtOc9j",
     "function_memory_size": "128",
     "function_arn": "arn:aws:lambda:us-east-1:111122223333:function:sam-app-HelloWorldFunction-YBg8yfYtOc9j",
     "function_request_id": "d455cfc4-7704-46df-901b-2a5cce9405be",
     "correlation_id": "e73f8aef-5e07-436e-a30b-63e4b23f0047",
     "xray_trace_id": "1-63dd2166-434a12c22e1307ff2114f299"
   }
   2025/02/03/[$LATEST]ea9a64ec87294bf6bbc9026c05a01e04 2025-02-03T14:59:51.126000 {
     "_aws": {
       "Timestamp": 1675436391126,
       "CloudWatchMetrics": [
         {
           "Namespace": "Powertools",
           "Dimensions": [
             [
               "function_name",
               "service"
             ]
           ],
           "Metrics": [
             {
               "Name": "ColdStart",
               "Unit": "Count"
             }
           ]
         }
       ]
     },
     "function_name": "sam-app-HelloWorldFunction-YBg8yfYtOc9j",
     "service": "PowertoolsHelloWorld",
     "ColdStart": [
       1.0
     ]
   }
   2025/02/03/[$LATEST]ea9a64ec87294bf6bbc9026c05a01e04 2025-02-03T14:59:51.126000 {
     "_aws": {
       "Timestamp": 1675436391126,
       "CloudWatchMetrics": [
         {
           "Namespace": "Powertools",
           "Dimensions": [
             [
               "service"
             ]
           ],
           "Metrics": [
             {
               "Name": "HelloWorldInvocations",
               "Unit": "Count"
             }
           ]
         }
       ]
     },
     "service": "PowertoolsHelloWorld",
     "HelloWorldInvocations": [
       1.0
     ]
   }
   2025/02/03/[$LATEST]ea9a64ec87294bf6bbc9026c05a01e04 2025-02-03T14:59:51.128000 END RequestId: d455cfc4-7704-46df-901b-2a5cce9405be
   2025/02/03/[$LATEST]ea9a64ec87294bf6bbc9026c05a01e04 2025-02-03T14:59:51.128000 REPORT RequestId: d455cfc4-7704-46df-901b-2a5cce9405be    Duration: 16.33 ms    Billed Duration: 756 ms    Memory Size: 128 MB    Max Memory Used: 64 MB    Init Duration: 739.46 ms    
   XRAY TraceId: 1-63dd2166-434a12c22e1307ff2114f299    SegmentId: 3c5d18d735a1ced0    Sampled: true
   ```

1. Ini adalah titik akhir API publik yang dapat diakses melalui internet. Kami menyarankan Anda menghapus titik akhir setelah pengujian.

   ```
   cdk destroy
   ```

# AWS Lambda pengujian fungsi dengan Python
<a name="python-testing"></a>

**catatan**  
Lihat bagian [Fungsi pengujian](testing-guide.md) untuk pengenalan lengkap tentang teknik dan praktik terbaik untuk menguji solusi tanpa server. 

 Menguji fungsi tanpa server menggunakan jenis dan teknik pengujian tradisional, tetapi Anda juga harus mempertimbangkan pengujian aplikasi tanpa server secara keseluruhan. Pengujian berbasis cloud akan memberikan ukuran kualitas **yang paling akurat** dari fungsi dan aplikasi tanpa server Anda. 

 Arsitektur aplikasi tanpa server mencakup layanan terkelola yang menyediakan fungsionalitas aplikasi penting melalui panggilan API. Untuk alasan ini, siklus pengembangan Anda harus menyertakan pengujian otomatis yang memverifikasi fungsionalitas saat fungsi dan layanan Anda berinteraksi. 

 Jika Anda tidak membuat pengujian berbasis cloud, Anda dapat mengalami masalah karena perbedaan antara lingkungan lokal dan lingkungan yang diterapkan. Proses integrasi berkelanjutan Anda harus menjalankan pengujian terhadap serangkaian sumber daya yang disediakan di cloud sebelum mempromosikan kode Anda ke lingkungan penerapan berikutnya, seperti QA, Staging, atau Production. 

 Lanjutkan membaca panduan singkat ini untuk mempelajari strategi pengujian untuk aplikasi tanpa server, atau kunjungi [repositori Sampel Uji Tanpa Server](https://github.com/aws-samples/serverless-test-samples) untuk menyelami contoh-contoh praktis, khusus untuk bahasa dan runtime pilihan Anda. 

 ![\[illustration showing the relationship between types of tests\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/test-type-illustration2.png) 

 Untuk pengujian tanpa server, Anda masih akan menulis *unit*, *integrasi*, dan *end-to-end*pengujian. 
+ **Tes unit** - Tes yang dijalankan terhadap blok kode yang terisolasi. Misalnya, memverifikasi logika bisnis untuk menghitung biaya pengiriman yang diberikan item dan tujuan tertentu.
+ **Tes integrasi** - Tes yang melibatkan dua atau lebih komponen atau layanan yang berinteraksi, biasanya di lingkungan cloud. Misalnya, memverifikasi fungsi memproses peristiwa dari antrian.
+ **End-to-end tes** - Tes yang memverifikasi perilaku di seluruh aplikasi. Misalnya, memastikan infrastruktur diatur dengan benar dan bahwa peristiwa mengalir antar layanan seperti yang diharapkan untuk merekam pesanan pelanggan.

## Menguji aplikasi tanpa server
<a name="python-testing-techniques-for-serverless-applications"></a>

 Anda biasanya akan menggunakan campuran pendekatan untuk menguji kode aplikasi tanpa server Anda, termasuk pengujian di cloud, pengujian dengan tiruan, dan kadang-kadang menguji dengan emulator. 

### Pengujian di cloud
<a name="python-testing-in-the-cloud"></a>

 Pengujian di cloud sangat berharga untuk semua fase pengujian, termasuk pengujian unit, pengujian integrasi, dan end-to-end pengujian. Anda menjalankan pengujian terhadap kode yang diterapkan di cloud dan berinteraksi dengan layanan berbasis cloud. Pendekatan ini memberikan ukuran kualitas kode Anda yang **paling akurat**. 

 Cara mudah untuk men-debug fungsi Lambda Anda di cloud adalah melalui konsol dengan acara pengujian. *Peristiwa pengujian* adalah input JSON ke fungsi Anda. Jika fungsi Anda tidak memerlukan input, acara dapat berupa dokumen `({})` JSON kosong. Konsol menyediakan contoh peristiwa untuk berbagai integrasi layanan. Setelah membuat acara di konsol, Anda dapat membagikannya dengan tim Anda untuk membuat pengujian lebih mudah dan konsisten. 

**catatan**  
[Menguji fungsi di konsol](testing-functions.md) adalah cara cepat untuk memulai, tetapi mengotomatiskan siklus pengujian Anda memastikan kualitas aplikasi dan kecepatan pengembangan. 

### Alat pengujian
<a name="python-testing-tools"></a>

 Alat dan teknik ada untuk mempercepat loop umpan balik pengembangan. Misalnya, [AWS SAM Accelerate](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/accelerate.html) dan [mode tontonan AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/cli.html#cli-deploy-watch) mengurangi waktu yang diperlukan untuk memperbarui lingkungan cloud. 

[Moto](https://pypi.org/project/moto/) adalah pustaka Python untuk mengejek AWS layanan dan sumber daya, sehingga Anda dapat menguji fungsi Anda dengan sedikit atau tanpa modifikasi menggunakan dekorator untuk mencegat dan mensimulasikan respons. 

 Fitur validasi [Powertools for ( AWS Lambda Python)](https://docs.powertools.aws.dev/lambda-python/latest/utilities/validation/) menyediakan dekorator sehingga Anda dapat memvalidasi peristiwa input dan respons output dari fungsi Python Anda. 

 Untuk informasi lebih lanjut, baca posting blog [Unit Testing Lambda dengan Python](https://aws.amazon.com/blogs/devops/unit-testing-aws-lambda-with-python-and-mock-aws-services/) dan Mock Services. AWS 

 Untuk mengurangi latensi yang terkait dengan iterasi penerapan cloud, lihat Mode tontonan Accelerate, [AWS Cloud Development Kit (CDK)AWS Serverless Application Model (AWSAWS](https://docs.aws.amazon.com/cdk/v2/guide/cli.html#cli-deploy-watch)[SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/using-sam-cli-sync.html). Alat-alat ini memantau infrastruktur dan kode Anda untuk perubahan. Mereka bereaksi terhadap perubahan ini dengan membuat dan menerapkan pembaruan tambahan secara otomatis ke lingkungan cloud Anda. 

 Contoh yang menggunakan alat ini tersedia di repositori kode [Sampel Uji Python](https://github.com/aws-samples/serverless-test-samples/tree/main/python-test-samples). 

# Menginstrumentasi kode Python di AWS Lambda
<a name="python-tracing"></a>

Lambda terintegrasi dengan AWS X-Ray untuk membantu Anda melacak, men-debug, dan mengoptimalkan aplikasi Lambda. Anda dapat menggunakan X-Ray untuk melacak permintaan saat melintasi sumber daya dalam aplikasi Anda, yang mungkin termasuk fungsi Lambda dan layanan lainnya. AWS 

Untuk mengirim data penelusuran ke X-Ray, Anda dapat menggunakan salah satu dari tiga pustaka SDK:
+ [AWS Distro for OpenTelemetry (ADOT)](https://aws.amazon.com/otel) — Distribusi SDK () yang aman, siap produksi, dan AWS didukung. OpenTelemetry OTel
+ [AWS X-Ray SDK for Python](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-python.html)SDK untuk menghasilkan dan mengirim data jejak ke X-Ray.
+ [Powertools for AWS Lambda (Python](https://docs.aws.amazon.com/powertools/python/latest/)) - Toolkit pengembang untuk menerapkan praktik terbaik Tanpa Server dan meningkatkan kecepatan pengembang.

Masing-masing SDKs menawarkan cara untuk mengirim data telemetri Anda ke layanan X-Ray. Anda kemudian dapat menggunakan X-Ray untuk melihat, memfilter, dan mendapatkan wawasan tentang metrik kinerja aplikasi Anda untuk mengidentifikasi masalah dan peluang pengoptimalan.

**penting**  
X-Ray dan Powertools untuk AWS Lambda SDKs adalah bagian dari solusi instrumentasi terintegrasi yang ditawarkan oleh. AWS Lapisan Lambda ADOT adalah bagian dari standar industri untuk melacak instrumentasi yang mengumpulkan lebih banyak data secara umum, tetapi mungkin tidak cocok untuk semua kasus penggunaan. Anda dapat menerapkan end-to-end penelusuran di X-Ray menggunakan salah satu solusi. Untuk mempelajari lebih lanjut tentang memilih di antara mereka, lihat [Memilih antara AWS Distro untuk Telemetri Terbuka dan](https://docs.aws.amazon.com/xray/latest/devguide/xray-instrumenting-your-app.html#xray-instrumenting-choosing) X-Ray. SDKs

**Topics**
+ [Menggunakan Powertools untuk AWS Lambda (Python) AWS SAM dan untuk melacak](#python-tracing-sam)
+ [Menggunakan Powertools untuk AWS Lambda (Python) dan AWS CDK untuk melacak](#python-logging-cdk)
+ [Menggunakan ADOT untuk instrumen fungsi Python Anda](#python-adot)
+ [Menggunakan X-Ray SDK untuk instrumen fungsi Python Anda](#python-xray-sdk)
+ [Mengaktifkan penelusuran dengan konsol Lambda](#python-tracing-console)
+ [Mengaktifkan penelusuran dengan Lambda API](#python-tracing-api)
+ [Mengaktifkan penelusuran dengan CloudFormation](#python-tracing-cloudformation)
+ [Menafsirkan jejak X-Ray](#python-tracing-interpretation)
+ [Menyimpan dependensi runtime dalam lapisan (X-Ray SDK)](#python-tracing-layers)

## Menggunakan Powertools untuk AWS Lambda (Python) AWS SAM dan untuk melacak
<a name="python-tracing-sam"></a>

Ikuti langkah-langkah di bawah ini untuk mengunduh, membangun, dan menyebarkan contoh aplikasi Hello World Python dengan [Powertools terintegrasi untuk modul AWS Lambda (Python](https://docs.powertools.aws.dev/lambda-python)) menggunakan modul. AWS SAM Aplikasi ini mengimplementasikan backend API dasar dan menggunakan Powertools untuk memancarkan log, metrik, dan jejak. Ini terdiri dari titik akhir Amazon API Gateway dan fungsi Lambda. Saat Anda mengirim permintaan GET ke titik akhir API Gateway, fungsi Lambda memanggil, mengirim log dan metrik menggunakan Format Metrik Tertanam CloudWatch ke, dan mengirimkan jejak ke. AWS X-Ray Fungsi mengembalikan pesan hello world.

**Prasyarat**

Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
+ Python 3.11
+ [AWS CLI versi 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [AWS SAM CLI versi 1.75](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html) atau yang lebih baru. Jika Anda memiliki versi CLI yang lebih lama, lihat [Memutakhirkan AWS SAM CLI. AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/manage-sam-cli-versions.html#manage-sam-cli-versions-upgrade)

**Menyebarkan aplikasi sampel AWS SAM**

1. Inisialisasi aplikasi menggunakan template Hello World Python.

   ```
   sam init --app-template hello-world-powertools-python --name sam-app --package-type Zip --runtime python3.11 --no-tracing
   ```

1. Bangun aplikasi.

   ```
   cd sam-app && sam build
   ```

1. Terapkan aplikasi.

   ```
   sam deploy --guided
   ```

1. Ikuti petunjuk di layar. Untuk menerima opsi default yang disediakan dalam pengalaman interaktif, tekan`Enter`.
**catatan**  
Karena **HelloWorldFunction mungkin tidak memiliki otorisasi yang ditentukan, Apakah ini baik-baik saja?** , pastikan untuk masuk`y`.

1. Dapatkan URL aplikasi yang digunakan:

   ```
   aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text
   ```

1. Memanggil titik akhir API:

   ```
   curl -X GET <URL_FROM_PREVIOUS_STEP>
   ```

   Jika berhasil, Anda akan melihat tanggapan ini:

   ```
   {"message":"hello world"}
   ```

1. Untuk mendapatkan jejak untuk fungsi tersebut, jalankan [jejak sam](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-traces.html).

   ```
   sam traces
   ```

   Output jejak terlihat seperti ini:

   ```
   New XRay Service Graph
     Start time: 2023-02-03 14:59:50+00:00
     End time: 2023-02-03 14:59:50+00:00
     Reference Id: 0 - (Root) AWS::Lambda - sam-app-HelloWorldFunction-YBg8yfYtOc9j - Edges: [1]
      Summary_statistics:
        - total requests: 1
        - ok count(2XX): 1
        - error count(4XX): 0
        - fault count(5XX): 0
        - total response time: 0.924
     Reference Id: 1 - AWS::Lambda::Function - sam-app-HelloWorldFunction-YBg8yfYtOc9j - Edges: []
      Summary_statistics:
        - total requests: 1
        - ok count(2XX): 1
        - error count(4XX): 0
        - fault count(5XX): 0
        - total response time: 0.016
     Reference Id: 2 - client - sam-app-HelloWorldFunction-YBg8yfYtOc9j - Edges: [0]
      Summary_statistics:
        - total requests: 0
        - ok count(2XX): 0
        - error count(4XX): 0
        - fault count(5XX): 0
        - total response time: 0
   
   XRay Event [revision 1] at (2023-02-03T14:59:50.204000) with id (1-63dd2166-434a12c22e1307ff2114f299) and duration (0.924s)
    - 0.924s - sam-app-HelloWorldFunction-YBg8yfYtOc9j [HTTP: 200]
    - 0.016s - sam-app-HelloWorldFunction-YBg8yfYtOc9j
      - 0.739s - Initialization
      - 0.016s - Invocation
        - 0.013s - ## lambda_handler
          - 0.000s - ## app.hello
      - 0.000s - Overhead
   ```

1. Ini adalah titik akhir API publik yang dapat diakses melalui internet. Kami menyarankan Anda menghapus titik akhir setelah pengujian.

   ```
   sam delete
   ```

X-Ray tidak melacak semua permintaan ke aplikasi Anda. X-Ray menerapkan algoritma pengambilan sampel untuk memastikan bahwa penelusuran efisien, sambil tetap memberikan sampel yang representatif dari semua permintaan. Tingkat pengambilan sampel adalah 1 permintaan per detik dan 5 persen dari permintaan tambahan. Anda tidak dapat mengonfigurasi laju pengambilan sampel X-Ray untuk fungsi Anda.

## Menggunakan Powertools untuk AWS Lambda (Python) dan AWS CDK untuk melacak
<a name="python-logging-cdk"></a>

Ikuti langkah-langkah di bawah ini untuk mengunduh, membangun, dan menyebarkan contoh aplikasi Hello World Python dengan [Powertools terintegrasi untuk modul AWS Lambda (Python](https://docs.powertools.aws.dev/lambda-python)) menggunakan modul. AWS CDK Aplikasi ini mengimplementasikan backend API dasar dan menggunakan Powertools untuk memancarkan log, metrik, dan jejak. Ini terdiri dari titik akhir Amazon API Gateway dan fungsi Lambda. Saat Anda mengirim permintaan GET ke titik akhir API Gateway, fungsi Lambda memanggil, mengirim log dan metrik menggunakan Format Metrik Tertanam CloudWatch ke, dan mengirimkan jejak ke. AWS X-Ray Fungsi mengembalikan pesan hello world.

**Prasyarat**

Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
+ Python 3.11
+ [AWS CLI versi 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [AWS CDK versi 2](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_prerequisites)
+ [AWS SAM CLI versi 1.75](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html) atau yang lebih baru. Jika Anda memiliki versi CLI yang lebih lama, lihat [Memutakhirkan AWS SAM CLI. AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/manage-sam-cli-versions.html#manage-sam-cli-versions-upgrade)

**Menyebarkan aplikasi sampel AWS CDK**

1. Buat direktori proyek untuk aplikasi baru Anda.

   ```
   mkdir hello-world
   cd hello-world
   ```

1. Inisialisasi aplikasi.

   ```
   cdk init app --language python
   ```

1.  Instal dependensi Python.

   ```
   pip install -r requirements.txt
   ```

1. Buat direktori **lambda\$1function di bawah folder** root.

   ```
   mkdir lambda_function
   cd lambda_function
   ```

1. Buat file **app.py** dan tambahkan kode berikut ke file. Ini adalah kode untuk fungsi Lambda.

   ```
   from aws_lambda_powertools.event_handler import APIGatewayRestResolver
   from aws_lambda_powertools.utilities.typing import LambdaContext
   from aws_lambda_powertools.logging import correlation_paths
   from aws_lambda_powertools import Logger
   from aws_lambda_powertools import Tracer
   from aws_lambda_powertools import Metrics
   from aws_lambda_powertools.metrics import MetricUnit
   
   app = APIGatewayRestResolver()
   tracer = Tracer()
   logger = Logger()
   metrics = Metrics(namespace="PowertoolsSample")
   
   @app.get("/hello")
   @tracer.capture_method
   def hello():
       # adding custom metrics
       # See: https://docs.powertools.aws.dev/lambda-python/latest/core/metrics/
       metrics.add_metric(name="HelloWorldInvocations", unit=MetricUnit.Count, value=1)
   
       # structured log
       # See: https://docs.powertools.aws.dev/lambda-python/latest/core/logger/
       logger.info("Hello world API - HTTP 200")
       return {"message": "hello world"}
   
   # Enrich logging with contextual information from Lambda
   @logger.inject_lambda_context(correlation_id_path=correlation_paths.API_GATEWAY_REST)
   # Adding tracer
   # See: https://docs.powertools.aws.dev/lambda-python/latest/core/tracer/
   @tracer.capture_lambda_handler
   # ensures metrics are flushed upon request completion/failure and capturing ColdStart metric
   @metrics.log_metrics(capture_cold_start_metric=True)
   def lambda_handler(event: dict, context: LambdaContext) -> dict:
       return app.resolve(event, context)
   ```

1. Buka direktori **hello\$1world**. Anda akan melihat file bernama **hello\$1world\$1stack.py**.

   ```
   cd ..
   cd hello_world
   ```

1. Buka **hello\$1world\$1stack.py** dan tambahkan kode berikut ke file. Ini berisi [Konstruktor Lambda](https://docs.aws.amazon.com/cdk/api/v1/python/aws_cdk.aws_lambda.html), yang membuat fungsi Lambda, mengonfigurasi variabel lingkungan untuk Powertools dan menetapkan retensi log ke satu minggu, dan [Konstruktor ApiGatewayv 1](https://docs.aws.amazon.com/cdk/api/v1/python/aws_cdk.aws_apigateway.html), yang membuat REST API.

   ```
   from aws_cdk import (
       Stack,
       aws_apigateway as apigwv1,
       aws_lambda as lambda_,
       CfnOutput,
       Duration
   )
   from constructs import Construct
   
   class HelloWorldStack(Stack):
   
       def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
           super().__init__(scope, construct_id, **kwargs)
   
           # Powertools Lambda Layer
           powertools_layer = lambda_.LayerVersion.from_layer_version_arn(
               self,
               id="lambda-powertools",
               # At the moment we wrote this example, the aws_lambda_python_alpha CDK constructor is in Alpha, o we use layer to make the example simpler
               # See https://docs.aws.amazon.com/cdk/api/v2/python/aws_cdk.aws_lambda_python_alpha/README.html
               # Check all Powertools layers versions here: https://docs.powertools.aws.dev/lambda-python/latest/#lambda-layer
               layer_version_arn=f"arn:aws:lambda:{self.region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:21"
           )
   
           function = lambda_.Function(self,
               'sample-app-lambda',
               runtime=lambda_.Runtime.PYTHON_3_11,
               layers=[powertools_layer],
               code = lambda_.Code.from_asset("./lambda_function/"),
               handler="app.lambda_handler",
               memory_size=128,
               timeout=Duration.seconds(3),
               architecture=lambda_.Architecture.X86_64,
               environment={
                   "POWERTOOLS_SERVICE_NAME": "PowertoolsHelloWorld",
                   "POWERTOOLS_METRICS_NAMESPACE": "PowertoolsSample",
                   "LOG_LEVEL": "INFO"
               }
           )
   
           apigw = apigwv1.RestApi(self, "PowertoolsAPI", deploy_options=apigwv1.StageOptions(stage_name="dev"))
   
           hello_api = apigw.root.add_resource("hello")
           hello_api.add_method("GET", apigwv1.LambdaIntegration(function, proxy=True))
   
           CfnOutput(self, "apiUrl", value=f"{apigw.url}hello")
   ```

1. Men-deploy aplikasi Anda.

   ```
   cd ..
   cdk deploy
   ```

1. Dapatkan URL aplikasi yang digunakan:

   ```
   aws cloudformation describe-stacks --stack-name HelloWorldStack --query 'Stacks[0].Outputs[?OutputKey==`apiUrl`].OutputValue' --output text
   ```

1. Memanggil titik akhir API:

   ```
   curl -X GET <URL_FROM_PREVIOUS_STEP>
   ```

   Jika berhasil, Anda akan melihat tanggapan ini:

   ```
   {"message":"hello world"}
   ```

1. Untuk mendapatkan jejak untuk fungsi tersebut, jalankan [jejak sam](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-traces.html).

   ```
   sam traces
   ```

   Output jejak terlihat seperti ini:

   ```
   New XRay Service Graph
     Start time: 2023-02-03 14:59:50+00:00
     End time: 2023-02-03 14:59:50+00:00
     Reference Id: 0 - (Root) AWS::Lambda - sam-app-HelloWorldFunction-YBg8yfYtOc9j - Edges: [1]
      Summary_statistics:
        - total requests: 1
        - ok count(2XX): 1
        - error count(4XX): 0
        - fault count(5XX): 0
        - total response time: 0.924
     Reference Id: 1 - AWS::Lambda::Function - sam-app-HelloWorldFunction-YBg8yfYtOc9j - Edges: []
      Summary_statistics:
        - total requests: 1
        - ok count(2XX): 1
        - error count(4XX): 0
        - fault count(5XX): 0
        - total response time: 0.016
     Reference Id: 2 - client - sam-app-HelloWorldFunction-YBg8yfYtOc9j - Edges: [0]
      Summary_statistics:
        - total requests: 0
        - ok count(2XX): 0
        - error count(4XX): 0
        - fault count(5XX): 0
        - total response time: 0
   
   XRay Event [revision 1] at (2023-02-03T14:59:50.204000) with id (1-63dd2166-434a12c22e1307ff2114f299) and duration (0.924s)
    - 0.924s - sam-app-HelloWorldFunction-YBg8yfYtOc9j [HTTP: 200]
    - 0.016s - sam-app-HelloWorldFunction-YBg8yfYtOc9j
      - 0.739s - Initialization
      - 0.016s - Invocation
        - 0.013s - ## lambda_handler
          - 0.000s - ## app.hello
      - 0.000s - Overhead
   ```

1. Ini adalah titik akhir API publik yang dapat diakses melalui internet. Kami menyarankan Anda menghapus titik akhir setelah pengujian.

   ```
   cdk destroy
   ```

## Menggunakan ADOT untuk instrumen fungsi Python Anda
<a name="python-adot"></a>

ADOT menyediakan lapisan [Lambda](chapter-layers.md) yang dikelola sepenuhnya yang mengemas semua yang Anda butuhkan untuk mengumpulkan data telemetri menggunakan SDK. OTel Dengan menggunakan lapisan ini, Anda dapat menginstruksikan fungsi Lambda Anda tanpa harus memodifikasi kode fungsi apa pun. Anda juga dapat mengonfigurasi lapisan Anda untuk melakukan inisialisasi kustom. OTel Untuk informasi selengkapnya, lihat [Konfigurasi khusus untuk Kolektor ADOT di Lambda](https://aws-otel.github.io/docs/getting-started/lambda#custom-configuration-for-the-adot-collector-on-lambda) dalam dokumentasi ADOT.

Untuk runtime Python, Anda dapat menambahkan **layer AWS Lambda terkelola untuk ADOT Python untuk** secara otomatis instrumen fungsi Anda. Lapisan ini berfungsi untuk arsitektur arm64 dan x86\$164. Untuk petunjuk rinci tentang cara menambahkan layer ini, lihat [AWS Distro untuk OpenTelemetry Lambda Support for](https://aws-otel.github.io/docs/getting-started/lambda/lambda-python) Python dalam dokumentasi ADOT.

## Menggunakan X-Ray SDK untuk instrumen fungsi Python Anda
<a name="python-xray-sdk"></a>

Untuk merekam detail tentang panggilan yang dilakukan oleh fungsi Lambda Anda ke sumber daya lain dalam aplikasi Anda, Anda juga dapat menggunakan. AWS X-Ray SDK for Python Untuk mendapatkan SDK, tambahkan paket `aws-xray-sdk` ke dependensi aplikasi Anda.

**Example [requirements.txt](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/blank-python/function/requirements.txt)**  

```
jsonpickle==1.3
aws-xray-sdk==2.4.3
```

Dalam kode fungsi Anda, Anda dapat instrumen klien AWS SDK dengan menambal `boto3` perpustakaan dengan modul. `aws_xray_sdk.core`

**Example [fungsi — Menelusuri klien AWS SDK](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/blank-python/function/lambda_function.py)**  

```
import boto3
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all

logger = logging.getLogger()
logger.setLevel(logging.INFO)
patch_all()

client = boto3.client('lambda')
client.get_account_settings()

def lambda_handler(event, context):
    logger.info('## ENVIRONMENT VARIABLES\r' + jsonpickle.encode(dict(**os.environ)))
  ...
```

Setelah Anda menambahkan dependensi yang benar dan membuat perubahan kode yang diperlukan, aktifkan penelusuran dalam konfigurasi fungsi Anda melalui konsol Lambda atau API.

## Mengaktifkan penelusuran dengan konsol Lambda
<a name="python-tracing-console"></a>

Untuk mengaktifkan penelusuran aktif pada fungsi Lambda Anda dengan konsol, ikuti langkah-langkah berikut:

**Untuk mengaktifkan penelusuran aktif**

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

1. Pilih fungsi.

1. Pilih **Konfigurasi** dan kemudian pilih **Alat Pemantauan dan operasi**.

1. Di bawah **Alat pemantauan tambahan**, pilih **Edit**.

1. Di bawah **Sinyal CloudWatch Aplikasi dan AWS X-Ray**, pilih **Aktifkan** untuk **jejak layanan Lambda**.

1. Pilih **Simpan**.

## Mengaktifkan penelusuran dengan Lambda API
<a name="python-tracing-api"></a>

Konfigurasikan penelusuran pada fungsi Lambda Anda dengan AWS CLI AWS atau SDK, gunakan operasi API berikut:
+ [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html)
+ [GetFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html)
+ [CreateFunction](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html)

Contoh AWS CLI perintah berikut memungkinkan penelusuran aktif pada fungsi bernama **my-function**.

```
aws lambda update-function-configuration --function-name my-function \
--tracing-config Mode=Active
```

Mode penelusuran adalah bagian dari konfigurasi khusus versi saat Anda mempublikasikan versi fungsi Anda. Anda tidak dapat mengubah mode pelacakan pada versi yang telah diterbitkan.

## Mengaktifkan penelusuran dengan CloudFormation
<a name="python-tracing-cloudformation"></a>

Untuk mengaktifkan penelusuran pada `AWS::Lambda::Function` sumber daya dalam CloudFormation templat, gunakan `TracingConfig` properti.

**Example [function-inline.yml](https://github.com/awsdocs/aws-lambda-developer-guide/blob/master/templates/function-inline.yml) – Konfigurasi pelacakan**  

```
Resources:
  function:
    Type: [AWS::Lambda::Function](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html)
    Properties:
      TracingConfig:
        Mode: Active
      ...
```

Untuk sumber `AWS::Serverless::Function` daya AWS Serverless Application Model (AWS SAM), gunakan `Tracing` properti.

**Example [template.yml](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/blank-nodejs/template.yml) – Konfigurasi pelacakan**  

```
Resources:
  function:
    Type: [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html)
    Properties:
      Tracing: Active
      ...
```

## Menafsirkan jejak X-Ray
<a name="python-tracing-interpretation"></a>

Fungsi Anda memerlukan izin untuk mengunggah data jejak ke X-Ray. [Saat Anda mengaktifkan penelusuran di konsol Lambda, Lambda menambahkan izin yang diperlukan ke peran eksekusi fungsi Anda.](lambda-intro-execution-role.md) Atau, tambahkan kebijakan [AWSXRayDaemonWriteAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess) ke peran eksekusi.

Setelah mengonfigurasi penelusuran aktif, Anda dapat mengamati permintaan tertentu melalui aplikasi Anda. [Grafik layanan X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html#xray-concepts-servicegraph) menunjukkan informasi tentang aplikasi Anda dan semua komponennya. Contoh berikut menunjukkan aplikasi dengan dua fungsi. Fungsi utama memproses kejadian dan terkadang mengembalikan kesalahan. Fungsi kedua di bagian atas memproses kesalahan yang muncul di grup log pertama dan menggunakan AWS SDK untuk memanggil X-Ray, Amazon Simple Storage Service (Amazon S3), dan Amazon Logs. CloudWatch 

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


X-Ray tidak melacak semua permintaan ke aplikasi Anda. X-Ray menerapkan algoritma pengambilan sampel untuk memastikan bahwa penelusuran efisien, sambil tetap memberikan sampel yang representatif dari semua permintaan. Tingkat pengambilan sampel adalah 1 permintaan per detik dan 5 persen dari permintaan tambahan. Anda tidak dapat mengonfigurasi laju pengambilan sampel X-Ray untuk fungsi Anda.

Di X-Ray, *jejak* merekam informasi tentang permintaan yang diproses oleh satu atau beberapa *layanan*. Lambda mencatat 2 segmen per jejak, yang menciptakan dua node pada grafik layanan. Gambar berikut menyoroti dua node ini:

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


Node pertama di sebelah kiri mewakili layanan Lambda, yang menerima permintaan pemanggilan. Node kedua mewakili fungsi Lambda spesifik Anda. Contoh berikut menunjukkan jejak dengan dua segmen ini. Keduanya bernama **fungsi saya**, tetapi yang satu memiliki asal `AWS::Lambda` dan yang lainnya memiliki asal usul. `AWS::Lambda::Function` Jika `AWS::Lambda` segmen menunjukkan kesalahan, layanan Lambda mengalami masalah. Jika `AWS::Lambda::Function` segmen menunjukkan kesalahan, fungsi Anda mengalami masalah.

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/V2_sandbox_images/my-function-2-v1.png)


Contoh ini memperluas `AWS::Lambda::Function` segmen untuk menunjukkan tiga subsegmennya.

**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  
Contoh jejak yang ditunjukkan di sini menggambarkan segmen fungsi gaya lama. Perbedaan antara segmen gaya lama dan baru dijelaskan dalam paragraf berikut.  
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.

Segmen fungsi gaya lama berisi subsegmen berikut:
+ **Inisialisasi** – Mewakili waktu yang dihabiskan untuk memuat fungsi dan menjalankan [kode inisialisasi](foundation-progmodel.md). Subsegmen ini hanya muncul untuk peristiwa pertama yang diproses oleh setiap instance fungsi Anda.
+ **Doa** - Merupakan waktu yang dihabiskan untuk menjalankan kode handler Anda.
+ **Overhead** - Merupakan waktu yang dihabiskan runtime Lambda untuk mempersiapkan diri untuk menangani acara berikutnya.

Segmen fungsi gaya baru tidak berisi subsegmen. `Invocation` Sebagai gantinya, subsegmen pelanggan dilampirkan langsung ke segmen fungsi. Untuk informasi lebih lanjut tentang struktur segmen fungsi gaya lama dan baru, lihat. [Memahami jejak X-Ray](services-xray.md#services-xray-traces)

Anda juga dapat melakukan instrumentasi klien HTTP, merekam kueri SQL, dan membuat subsegmen khusus dengan anotasi dan metadata. Untuk informasi selengkapnya, lihat [AWS X-Ray SDK for Python](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-python.html)di *Panduan AWS X-Ray Pengembang*.

**Harga**  
Anda dapat menggunakan penelusuran X-Ray secara gratis setiap bulan hingga batas tertentu sebagai bagian dari Tingkat AWS Gratis. Di luar ambang batas itu, X-Ray mengenakan biaya untuk penyimpanan dan pengambilan jejak. Untuk informasi selengkapnya, lihat [harga AWS X-Ray](https://aws.amazon.com/xray/pricing/).

## Menyimpan dependensi runtime dalam lapisan (X-Ray SDK)
<a name="python-tracing-layers"></a>

Jika Anda menggunakan X-Ray SDK untuk menginstruksikan klien AWS SDK kode fungsi Anda, paket penerapan Anda bisa menjadi cukup besar. [Untuk menghindari mengunggah dependensi runtime setiap kali Anda memperbarui kode fungsi, paketkan X-Ray SDK di lapisan Lambda.](chapter-layers.md)

Contoh berikut menunjukkan `AWS::Serverless::LayerVersion` sumber daya yang menyimpan file AWS X-Ray SDK for Python.

**Example [template.yml](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/blank-python/template.yml) – Lapisan dependensi**  

```
Resources:
  function:
    Type: [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html)
    Properties:
      CodeUri: function/.
      Tracing: Active
      Layers:
        - !Ref libs
      ...
  libs:
    Type: [AWS::Serverless::LayerVersion](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-layerversion.html)
    Properties:
      LayerName: blank-python-lib
      Description: Dependencies for the blank-python sample app.
      ContentUri: package/.
      CompatibleRuntimes:
        - python3.11
```

Dengan konfigurasi ini, Anda memperbarui lapisan pustaka hanya jika Anda mengubah dependensi runtime Anda. Karena paket penerapan fungsi hanya berisi kode Anda, ini dapat membantu mengurangi waktu upload.

Membuat lapisan untuk dependensi memerlukan perubahan build untuk membuat arsip lapisan sebelum deployment. Untuk contoh pekerjaan, lihat aplikasi sampel [blank-python](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/blank-python).