Infrastruktur cloud saat ini menjadi solusi pada banyak tugas komputasi yang diperlukan sehari-hari. Cloud memberikan solusi kemudahan untuk meningkatkan kapasitas (scaling), pilihan sumber daya sesuai yang anda butuhkan, powerful instances, less maintenance, dan semua itu bisa diperoleh dengan harga yang relatif terjangkau. Ada banyak Skema Bisnis Layanan Cloud yang banyak disediakan provider yang dapat membuat anda bingung mau Pilih Cloud Mana. Salah satu layanan cloud yang sangat powerful dan terjangkau adalah AWS-Lambda, di provider lain dikenal juga dengan Function. Ini adalah solusi serverless application dimana pada layanan ini kita hanya akan benar-benar fokus pada kode dibanding infrastruktur dll. Pada tulisan sebelumnya saya sempat membahas Serverless pada AWS-Lambda dengan menggunakan Yii2 yang merupakan framework PHP. PHP pada Lambda menggunakan runtime sehingga kode PHP yang dijalankan tidak berjalan secara native di Lambda. Untuk itu agar lebih hemat resources maka saya pribadi lebih senang menggunakan solusi Lambda dengan menggunakan bahasa pemrograman yang memang telah didukung di Lambda, salah satu bahasa pemrograman yang didukung pada Lambda adalah Python.
Python merupakan salah satu bahasa yang paling enak dibaca dengan dukungan library yang sangat banyak. Ketika menggunakan Lambda, library yang tersedia dibatasi dengan library default pada Python dan beberapa library pada AWS. Lalu bagaimana jika kita membutuhkan library tambahan pada Lambda? Jika di server kita dapat dengan mudah menjalankan pip install package
. Namun pada lambda kita akan menggunakan fitur yang disebut dengan layer.
Requirements
Untuk memudahkan mengikuti tutorial ini maka hal-hal yang perlu diperhatikan:
- Anda memiliki akun AWS
- Komputer anda sudah diinstall dengan docker dan docker-compose
Build Docker Lambda Layer Container
Langkah pertama kita akan membuat file denan nama Dockerfile (buatlah dalam folder khusus contohnya folder LambdaLayer) kemudian isi file tersebut seperti di bawah ini.
FROM amazonlinux:2.0.20191016.0
RUN yum install -y python37 && \
yum install -y python3-pip && \
yum install -y zip && \
yum clean all
RUN python3.7 -m pip install --upgrade pip && \
python3.7 -m pip install virtualenv
Perintah di atas akan menggunakan image docker amazonlinux dan melakukan instalasi Python beserta package yang kita perlukan untuk membuat python package yang sesuai dengan format lambda layer.
Selanjutnya lakukan build dan run file Dockerfile tersebut.
docker build -f "<filename>.Dockerfile" -t lambdalayer:latest .
docker run -it --name lambdalayer lambdalayer:latest bash
Setelah perintah di atas kita akan masuk ke bash dari container kita.
Install Package into Lambda Layer Container
Selanjutnya kita perlu mengisolasi package yang ingin kita convert ke lambda layer dengan menggunakan virtuanenv yang sebelumnya kita install. Jalankan perintah di bawah ini dimana package adalah virtualenv yang ingin anda gunakan sebagai media lambdalayer.
python3.7 -m venv package
Anda dapat membuat pakcage baru tanpa membuat ulang container dengan menggunakan nama package yang berbeda. Selanjutnya masuk ke virtualenv untuk package dengan perintah activate dilanjutkan dengan instalasi package python yang kita butuhkan.
source package/bin/activate
pip install your-python-package -t ./python
deactivate
ZIP and Upload Package to AWS-Lambda Layer
Setelah itu anda dapat mengkompresi package pada folder ./python tadi dengan perintah berikut.
zip -r python.zip ./python/
Selanjutnya silakan keluar dari container, lalu jalankan perintah berikut untuk mendapatkan file python.zip yang nantinya akan kita unggah ke lambda layer.
docker cp lambdalayer:python.zip ./Desktop/
Silakan akses AWS-Lambda anda dan unggah file tadi dengan menekan tombol create layer dan unggah zip file.
Setelah unggah berhasil maka anda dapat menggunakan package Python eksternal pada AWS-Lambda anda. Setelah ini sky is the limit.
Demikian tutorial kali ini, semoga bermanfaat dan Happy Coding!
Sumber: https://medium.com/@jenoyamma/how-to-install-python-packages-for-aws-lambda-layer-74e193c76a91