2018年9月19日 星期三

在 AWS Lambda 執行 web3.py

這篇要紀錄想要在 AWS Lambda 上執行 web3.py 之前需要先做的準備。因為 web3.py 用了一些 C/C++ 編譯的函式庫,因此必須要事先準備好能夠在 AWS Lambda 上執行的編譯後結果。主要步驟也可以參考 [2-3]。

準備環境

目前 AWS Lambda 支援的是 Python 2.7 和 3.6,而我的程式是用 Python 3.6 寫的,因此準備的環境也是以有 Python 3.6 的環境比較好。Amazon Linux 在 EC2 裡能夠選擇 AMI 和 AMI2,其中 AMI2 目前只能直接安裝 Python 3.7.0 的樣子(我找不到怎麼安裝 Python 3.6.x),因此最後我是選擇了 Amazon Linux AMI 2018.03.0 來啟動 VM。

在 AMI 上安裝 Python 3 環境

AMI 預設都是內載 Python 2.7,但不知道為什麼,雖然透過 yum list 可以看到 Python 3,卻找不到 python3 這個指令。因此首先需要安裝 Python 3 的執行環境、以及等等要安裝 web3.py 時需要的 gcc 相關套件。

sudo yum install python36-pip python36 python36-setuptools python36-devel gcc openssl-devel
sudo python3 -m pip install pip --upgrade

第一個指令是安裝 Python 3.6,在我的環境中實際會安裝的 Python 版本是 3.6.5。同時因為等等要編譯 web3.py,因此也需要安裝 gcc 和 Python 3.6、openssl 等的開發套件。

匯入並編譯 web3.py

編譯 web3.py 其實只是單純地讓 pip 工作而已,不過要把 pip 安裝的結果輸出到特定的地方,方便我們可以取走。這裡假設我們在家目錄裡建立了一個 ~/lambda-web3 資料夾用來輸出編譯後的結果,可以使用下述指令,將 web3 相關的檔案安裝到這個資料夾裡。

python3 -m pip install ethereum web3 --upgrade -t ~/lambda-web3

安裝完以後,把整個資料夾都打包帶走就好。

tar -zcvf lambda-web3.tar.gz ~/lambda-web3

這邊用 tar 是因為我會先把檔案下載下來,解壓縮放進我的專案以後,再從我的工作電腦上重新壓縮成 zip。也可以直接把程式碼放進 ~/lambda-web3,然後用 zip 壓縮就上傳到 Lambda。

參考資料
  1. Python3 not available on AWS Linux 2 AMI?
  2. Web3.py on AWS Lambda
  3. AWS LambdaでPythonのweb3.pyライブラリを使用する

沒有留言: