概要
- python-lambda-localでローカル開発
- Apexでデプロイする
組み合わせた環境を説明します
事前準備
必要なライブラリをインストール
pip install python-lambda-local
pip install boto3
Apexをインストール
curl https://raw.githubusercontent.com/apex/apex/master/install.sh | sudo sh
※ AWS config/credentialsを事前に設定
※ IAMユーザにiam:CreateRoleを割り当てる必要あり
Apexプロジェクトを作成
scaffoldを作成
mkdir hello-project
cd hello-project
apex init
... 対話モードで入力 ...
設定ファイルを変更
project.json
{
...
"runtime": "python",
"environment": {} //共通の環境変数
...
}
.apexignore
event.json
requirements.txt
*.pyc
Lambdaを作成
Functionを作成
functions/hello/_apex_main.py
def handle(event, context):
print 'Hello Lamba'
return 'success'
設定ファイルを作成
ここでも環境変数を設定できる
functions/hello/event.json
{
"description": "about this function"
}
Lambdaに渡すデータを作成
動作確認に必要
functions/hello/event.json
{
"key": "value"
}
依存ライブラリをインストール
functions/hello
pip install $ライブラリ名 -t .
pip freeze > requirements.txt
AWSで実行
デプロイ
apex deploy
実行
apex invoke < event.json
Localで動作確認
python-lambda-localを実行
毎回AWSにデプロイするのは手間
functions/hello
python-lambda-local -l . -f handle -t 5 _apex_main.py event.json
課題
環境変数
AWS LambdaのPythonランタイムは環境変数を使えない
- Apexがアップロードするzipファイルには、環境変数を定義する
.env.json
が含まれている - 実行時に
.env.json
の内容を環境変数に設定してあげる
_apex_main.py
import json
with open('.env.json') as f:
os.environ.update(json.load(f, encoding='utf-8'))
def handle(event, context):