Pada kesempatan kali ini saya akan berbagi bagaimana menambahkan depedencies dan library yang digunakan pada lambda function. Lambda layers memungkinkan kita untuk mempermudah me-manage libraries dan depedencies yang digunakan. Lambda layers juga dapat digunakan untuk custom runtime dan dapat digunakan oleh lebih dari satu lambda functions
Penjelasan lebih detil:
Problems
Jika kita menggunakan library luar maka lambda tidak dapat memanggil library tersebut. Sebagai contoh kita mencoba memanggil requests
Jika di run maka akan muncul error seperti gambar di bawah
Dalam panduan ini, kita akan membuat lambda layers untuk Python 3.9
Supported runtime untuk language lain dapat dilihat di Lambda Runtimes
Prerequisites
Lambda functions (cara membuat lambda function: Deploy Telegram Bot ke AWS)
Docker / Virtual Machine Linux Architecture x86_64
Note: Dalam panduan ini saya menggunakan Docker Ubuntu
Python3, pip, dan zip dalam environment Linux
Bagi kalian yang menggunakan virtual environment python dapat langsung melihat bagian ini
Mempersiapkan Package
Tidak disarankan, tapi kalian dapat mencoba membuat layers dari Windows machine terlebih dahulu dengan mengikuti panduan nomor 2 & 3 dengan PowerShell
Note: Pada panduan ini, layer untuk library requests dapat dibuat dari Windows machine.
Sebelum membuat lambda layers, kita perlu mempersiapkan package yang akan ditambahkan dalam format ZIP. Untuk membuat file tersebut, AWS menyarankan penggunaan AWS Cloud9 untuk memastikan package compatible dengan Lambda.
Namun, untuk memangkas biaya kita dapat membuat package tersebut dengan virtual machine ataupun docker berbasis Linux Ubuntu (untuk beberapa libraries, machine Windows dapat digunakan untuk membuat package).
Setup di Docker
1. Jalankan docker dengan command
docker run -it ubuntu
Jika docker sudah berjalan sebelumnya dapat menggunakan command
docker exec -it [id container/nama container] /bin/bash
2. Buat sebuah folder site-packages dengan command
Pembuatan folder mengacu pada Dokumen AWS Lambda Layers
mkdir -p python/lib/python3.9/site-packages
3. Install library yang dibutuhkan ke dalam folder yang telah dibuat
pip3 install requests -t python/lib/python3.9/site-packages/
# Atau jika menggunakan requirements.txt
pip3 install -r requirements.txt -t python/lib/python3.9/site-packages/
4. Jalankan zip -r package.zip python/
untuk membuat file Zip.
5. Setelah file Zip terbuat copy file dari dalam docker ke host machine dengan command
docker cp 306de63b5010:/create-layer/package.zip C:\Users\ziaka\Documents
Sesuaikan container ID dan destination path.
ZIP Package pada Windows (Skip jika menggunakan Docker)
Klik kanan pada folder dan pilih Compress to ZIP file
Jika terjadi error saat menggunakan package dari Windows machine, ulangi step dengan environment Linux
Untuk Pengguna Python Virtual Environment di Linux
Bagi kalian yang menggunakan venv Python di enviroment linux, kalian dapat langsung membuat package dari folder venv yang sudah kalian buat. Seperti pada gambar di bawah merupakan struktur foler virtual enviroment test-req
dengan Python 3.10.
Dari dalam directory venv rename/copy file
lib/python3.10
menjadilib/python3.9
dengan commandmv lib/python3.10 lib/python3.9
karena AWS hanya support hingga Python 3.9 hingga saat artikel ini dibuat.Jalankan command di bawah ini dari directory venv
zip -r layer.zip python/lib
File ZIP kalian telah siap untuk di-upload!
Upload Package ke Lambda Layers
Pada tahap ini kita akan masuk ke console AWS dan membuka service Lambda
1. Buka Layers pada service Lambda dan klik Create layer
2. Isi konfigurasi layer sesuai dengan package yang telah kita buat dan klik Create
3. Buka function yang ingin ditambahkan layer dan pada bagian Layers klik Add a layer
4. Gunakan layer yang telah kita buat sebelumnya
5. Jika sudah maka sekarang kita dapat memanggil library tersebut.
Tidak terdapat error seperti gambar di awal saat menjalankan function
Sekian panduan mengenai Lambda layers. Jika terdapat kendala atau pertanyaan dapat menghubungi kami melalui Instagram atau email globalpolaris@protonmail.com
Terima Kasih!