建立可用於 AWS Lambda 的 Python 部署套件

前言

這篇主要是紀錄實作 AWS Lambda 開發者文件 Creating a Deployment Package (Python) 的步驟,同時還參考了 Running Python with compiled code on AWS Lambda 這篇文章。

實作

開個跑 Amazon Linux AMI 的 EC2 instance

AWS lambda 的執行環境基本上就是 Amazon Linux AMI,因為使用同樣環境下編譯的套件比較容易成功,所以我們首先要開個跑 Amazon Linux AMI 的 EC2 instance。

安裝編譯 lxml 所需要的套件

ssh 進剛剛開好的 EC2 instance 並安裝套件:

1
$ sudo yum install gcc libxml2-devel libxslt-devel

在虛擬環境安裝 lxml

Amazon Linux AMI 預設的 python 環境已經裝了很多不必要的套件,因此我們需要用 virtualenv 建立乾淨的虛擬環境:

1
$ python -m virtualenv path/to/my/virtual-env

建立好之後啟動虛擬環境:

1
$ source path/to/my/virtual-env/bin/activate

安裝 lxml:

1
$ python -m pip install lxml

打包 lambda 程式

假設用到 lxml 的 lambda 程式放在 path/to/my/project 下,先切換到該目錄再打包成 zip 檔:

1
2
$ cd path/to/my/project
$ zip -9r bundle.zip *

然後再切換到該虛擬環境放置套件的目錄,並打包進剛剛的 zip 檔:

1
2
3
4
$ cd $VIRTUAL_ENV/lib/python2.7/site-packages
$ zip -9r path/to/my/project/bundle.zip *
$ cd $VIRTUAL_ENV/lib64/python2.7/site-packages
$ zip -9r path/to/my/project/bundle.zip *

發佈

最後只要上傳 path/to/my/project/bundle.zip 到 AWS Lambda 去就完成了。