Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Log dan pantau fungsi Python Lambda
AWS Lambda secara otomatis memonitor fungsi Lambda dan mengirimkan 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, lihatMengirim log fungsi Lambda ke CloudWatch Log.
Untuk mengeluarkan log dari kode fungsi Anda, Anda dapat menggunakan loggingstdout ataustderr.
Mencetak ke log
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 peristiwa.
Perhatikan bahwa jika fungsi Anda mengeluarkan log menggunakan print pernyataan Python, Lambda hanya dapat mengirim output CloudWatch log ke Log dalam format teks biasa. Untuk menangkap log dalam JSON terstruktur, Anda perlu menggunakan pustaka logging yang didukung. Untuk informasi selengkapnya, lihat Menggunakan kontrol logging lanjutan Lambda dengan Python.
contoh lambda_function.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)
contoh 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. Bar REPORT is tersebut mencakup data berikut:
Bidang data baris LAPORAN
-
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. Ketika 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.
-
SegmentId— Untuk permintaan yang dilacak, ID X-Ray segmen.
-
Diambil Sampel – Untuk permintaan yang dilacak, hasil pengambilan sampel.
Menggunakan pustaka logging
Untuk log yang lebih rinci, gunakan modul stdout ataustderr.
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.
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 diatur ke teks biasa, pengaturan tingkat log default untuk runtime Python adalah WARN. Ini berarti bahwa Lambda hanya mengirimkan output log level WARN dan lebih rendah ke CloudWatch Logs. 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 menggunakan Lambda Advanced Logging Controls dan bukan dengan menyetel level log dalam kode. Untuk mempelajari selengkapnya, lihat Menggunakan penyaringan tingkat log dengan Python
Menggunakan kontrol logging lanjutan Lambda dengan Python
Untuk memberi Anda lebih banyak kontrol 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 Amazon CloudWatch, seperti ERROR, DEBUG, atau INFO
-
Grup log - pilih grup CloudWatch log ke mana fungsi Anda mengirim log
Untuk informasi selengkapnya tentang opsi pencatatan ini, dan petunjuk tentang cara mengonfigurasi fungsi Anda untuk menggunakannya, lihatMengkonfigurasi kontrol logging lanjutan untuk fungsi Lambda.
Untuk mempelajari lebih lanjut tentang menggunakan format log dan opsi tingkat log dengan fungsi Python Lambda Anda, lihat panduan di bagian berikut.
Menggunakan log JSON terstruktur dengan Python
Jika Anda memilih JSON untuk format log fungsi Anda, Lambda mengirimkan output log oleh pustaka logging standar Python ke CloudWatch 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
Pust logging aka Python juga dapat menambahkan pasangan nilai kunci tambahan seperti "logger" ke objek JSON ini.
Contoh-contoh di bagian berikut menunjukkan bagaimana output log yang dihasilkan menggunakan pust logging aka Python ditangkap di CloudWatch 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 dalamMencetak ke log, Lambda menangkap output ini sebagai teks biasa, bahkan jika Anda mengonfigurasi format logging fungsi Anda sebagai JSON.
Output log JSON standar menggunakan pustaka logging Python
Contoh cuplikan kode dan keluaran log berikut menunjukkan bagaimana output log standar yang dihasilkan menggunakan pust logging aka Python ditangkap di CloudWatch Log ketika format log fungsi Anda diatur ke JSON.
contoh Kode pencatatan Python
import logging logger = logging.getLogger() def lambda_handler(event, context): logger.info("Inside the handler function")
contoh 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"
}Pencatatan parameter tambahan di JSON
Ketika format log fungsi Anda diatur ke JSON, Anda juga dapat mencatat parameter tambahan dengan pust logging aka Python standar dengan menggunakan extra kata kunci untuk meneruskan kamus Python ke output log.
contoh Kode pencatatan Python
import logging def lambda_handler(event, context): logging.info( "extra parameters example", extra={"a":"b", "b": [3]}, )
contoh 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
]
}Pencatatan pengecualian di JSON
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 tingkat log ERROR.
contoh Kode pencatatan Python
import logging def lambda_handler(event, context): try: raise Exception("exception") except: logging.exception("msg")
contoh 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
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 mengkodekan ulang 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 menggunakan Powertools untuk AWS Lambda, lihat dan Menggunakan Powertools untuk AWS Lambda (Python) dan AWS SAM untuk logging terstruktur Menggunakan Powertools untuk AWS Lambda (Python) dan AWS CDK untuk logging terstruktur
contoh 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")
contoh 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
Dengan mengonfigurasi penyaringan tingkat log, Anda dapat memilih untuk mengirim hanya log dari tingkat logging tertentu atau lebih rendah ke CloudWatch Log. Untuk mempelajari cara mengonfigurasi penyaringan tingkat log untuk fungsi Anda, lihat. Log-level penyaringan
AWS Lambda Untuk memfilter log aplikasi Anda sesuai dengan tingkat log mereka, fungsi Anda harus menggunakan log berformat JSON. Anda dapat mencapai ini dengan dua cara:
-
Buat output log menggunakan pust
loggingaka 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 diMenggunakan log JSON terstruktur dengan Python. Untuk mempelajari cara mengonfigurasi format log fungsi Anda, lihatMengkonfigurasi kontrol logging lanjutan untuk fungsi Lambda. -
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 pengidentifikasi tingkat log. Pernyataan cetak berikut menghasilkan output berformat JSON di mana tingkat log diatur ke INFO. AWS Lambda mengirimkan 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 output log JSON Anda. Waktu harus ditentukan dalam format stempel waktu RFC 3339 yang valid
Melihat log di konsol Lambda
Anda dapat menggunakan konsol Lambda untuk melihat output log setelah Anda memanggil fungsi Lambda.
Jika kode Anda dapat diuji dari editor Kode yang disematkan, Anda menemukan log dalam hasil eksekusi. Saat Anda menggunakan fitur pengujian konsol untuk memanggil fungsi, Anda menemukan keluaran Log di bagian Detail.
Melihat log di CloudWatch konsol
Anda dapat menggunakan CloudWatch konsol Amazon untuk melihat log untuk semua pemanggilan fungsi Lambda.
Untuk melihat log di CloudWatch konsol
-
Buka halaman Grup log
di CloudWatch konsol. -
Pilih grup log untuk fungsi Anda (/aws/lambda/
your-function-name). -
Pilih pengaliran log.
Setiap aliran log sesuai dengan instans fungsi Anda. Aliran log muncul saat Anda memperbarui fungsi Lambda Anda, dan ketika instance tambahan dibuat untuk menangani pemanggilan bersamaan. Untuk menemukan log untuk pemanggilan tertentu, sebaiknya instrumentasikan fungsi Anda dengan. AWS X-Ray X-Ray merekam detail tentang permintaan dan aliran log di jejak.
Melihat log dengan AWS CLI
Ini AWS CLI adalah alat sumber terbuka yang dapat Anda gunakan untuk 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.
Anda dapat menggunakan AWS CLI untuk mengambil log untuk invokasi menggunakan opsi perintah --log-type. Respons berisi bidang LogResult yang memuat hingga 4 KB log berkode base64 dari invokasi.
contoh 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"
}contoh 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-formatOpsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankanaws configure set cli-binary-format raw-in-base64-out. Untuk informasi selengkapnya, lihat opsi baris perintah global yang AWS CLI didukung 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 Windowsbase64 -D.
contoh 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-formatOpsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankanaws configure set cli-binary-format raw-in-base64-out. Untuk informasi selengkapnya, lihat opsi baris perintah global yang AWS CLI didukung 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-namestream1--limit 5
contoh macOS dan Linux (khusus)
Dalam command prompt yang sama, pengguna macOS dan Linux mungkin perlu menjalankan perintah berikut untuk memastikan skrip dapat dieksekusi.
chmod -R 755 get-logs.sh
contoh 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
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, yang setelahnya log akan dihapus secara otomatis.
Menggunakan alat dan pustaka logging lainnya
Powertools for AWS Lambda (Python) adalah toolkit pengembang untuk mengimplementasikan praktik terbaik Tanpa Server dan meningkatkan kecepatan pengembang. Utilitas Logger menyediakan 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, start dingin, dan output logging struktur 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 format log kustom (Bring Your Own Formatter) untuk menampilkan log dalam struktur yang kompatibel dengan RFC Logging organisasi Anda
Menggunakan Powertools untuk AWS Lambda (Python) dan AWS SAM untuk logging terstruktur
Ikuti langkah-langkah di bawah ini untuk mengunduh, membangun, dan menyebarkan contoh aplikasi Hello World Python dengan Powertools terintegrasi untuk modul Python menggunakan. 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, mengirimkan log dan metrik menggunakan Format Metrik Tertanam ke CloudWatch, 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 SAM CLI versi 1.75 atau yang lebih baru. Jika Anda memiliki versi C AWS SAM LI yang lebih lama, lihat Meng upgrade AWS SAM CLI.
Menyebarkan sampel AWS SAM application
-
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 -
Bangun aplikasi.
cd sam-app && sam build -
Terapkan aplikasi.
sam deploy --guided -
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. -
Dapatkan URL aplikasi yang digunakan:
aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text -
Memanggil titik akhir API:
curl GET<URL_FROM_PREVIOUS_STEP>Jika berhasil, Anda akan melihat respons ini:
{"message":"hello world"} -
Untuk mendapatkan log untuk fungsi tersebut, jalankan sam logs. Untuk informasi selengkapnya, lihat Bekerja dengan log di Panduan AWS Serverless Application Model Pengembang.
sam logs --stack-name sam-appOutput 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
-
Ini adalah titik akhir API publik yang dapat diakses melalui internet. Kami menyarankan Anda menghapus titik akhir setelah pengujian.
sam delete
Mengelola retensi log
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 yang setelah CloudWatch itu secara otomatis menghapus log. Untuk mengatur retensi log, tambahkan yang berikut ini ke AWS SAM template 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) dan AWS CDK untuk logging terstruktur
Ikuti langkah-langkah di bawah ini untuk mengunduh, membangun, dan menerapkan contoh aplikasi Hello World Python dengan modul Powertools untuk AWS Lambda (Python) terintegrasi menggunakan. 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, mengirimkan log dan metrik menggunakan Format Metrik Tertanam ke CloudWatch, 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 SAM CLI versi 1.75 atau yang lebih baru. Jika Anda memiliki versi C AWS SAM LI yang lebih lama, lihat Meng upgrade AWS SAM CLI.
Menyebarkan sampel AWS CDK application
-
Buat direktori proyek untuk aplikasi baru Anda.
mkdir hello-world cd hello-world -
Inisialisasi aplikasi.
cdk init app --language python -
Instal dependensi Python.
pip install -r requirements.txt Buat direktori lambda_function di bawah folder root.
mkdir lambda_function cd lambda_functionBuat 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)-
Buka direktori hello_world. Anda akan melihat file bernama hello_world_stack.py.
cd .. cd hello_world Buka hello_world_stack.py dan tambahkan kode berikut ke file. Ini berisi Lambda Constructor, yang membuat fungsi Lambda, mengonfigurasi variabel lingkungan untuk Powertools dan menetapkan retensi log ke satu minggu, dan ApiGatewayv 1 Constructor, 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 with 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")-
Men-deploy aplikasi Anda.
cd .. cdk deploy -
Dapatkan URL aplikasi yang digunakan:
aws cloudformation describe-stacks --stack-name HelloWorldStack --query 'Stacks[0].Outputs[?OutputKey==`apiUrl`].OutputValue' --output text -
Memanggil titik akhir API:
curl GET<URL_FROM_PREVIOUS_STEP>Jika berhasil, Anda akan melihat respons ini:
{"message":"hello world"} -
Untuk mendapatkan log untuk fungsi tersebut, jalankan sam logs. Untuk informasi selengkapnya, lihat Bekerja dengan log di Panduan AWS Serverless Application Model Pengembang.
sam logs --stack-name HelloWorldStackOutput 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
-
Ini adalah titik akhir API publik yang dapat diakses melalui internet. Kami menyarankan Anda menghapus titik akhir setelah pengujian.
cdk destroy