Apex と python-lambda-localで始める
AWS Lambda Function 開発
株式会社フンザ 小松茂敏
自己紹介• 小松 茂敏 (cgetc)• 株式会社フンザ(チケットキャンプ運営)
• 第一研究開発チーム ( サーバーサイド)• 今年2月に入社
• Python 歴 本格的には2月から• Google App Engine 出たての時に触ったことあり• 本を何冊か読んだことはあった程度
概要• Apex と pythom-lambda-local で AWS
Lambda の Function を作ってみた。• 課題など。• 実用性のあるものが作れるのか?
Apex とは?• AWS Lambda に特化した構成ツール
• デプロイ、起動、ログなど• 複数のランタイムに対応• terraform と連携できる
python-lambda-local とは• AWS Lambda の Python 実行環境をエミュレート
• 動作確認のたびに AWS Lambda にデプロイする手間が省ける
どう組み合わせたか• Apex のファイル構成のまま
• 各ファンクションの直下にライブラリをインストール• python-lambda-local で以下を指定して実行
• ファイル名 (_apex_main.py)• 関数名 (handle)• ライブラリの読み込み先 ( カレントディレクトリ )
python-lambda-local -l . \ -f handle _apex_main.py event.json
課題• 対策
• ソースとデプロイ用のフォルダを分ける• Fabric でソースとライブラリをコピーして、 Apex deploy を実行する• terraform との連携は?
課題• AWS Lambda の Python ランタイムは環境変数を使えない
• Apex がアップロードする zip ファイルには、環境変数を定義する .env.json が含まれている• AWS Lambda が対応していない?• 実行時に .env.json の内容を環境変数に設定するコードを書くことで解決
課題
• ローカル環境の環境設定に使えて一石二鳥
import jsonimport oswith open('.env.json') as f: os.environ.update(json.load(f, encoding='utf-8'))
def handle(event, context):
_apex_main.py
実用性のあるものが作れるのか?• 実行時間の制約
• 最大 300 秒• 複数の関数を組み合わせて対応
• スケジューラで引数が指定できない• 起動用の関数に引数を内包させて、その関数から主処理の関数を呼び出す
実際に作ったもの• Google のクロールエラーを検知する処理
• Google Search Console API でクロールエラーを問い合わせ• Incoming Webhook で Slack に通知https://github.com/cgetc/lambda-seo-alert
感想• Apex が便利
• 複数の関数を管理するのに Project になっている• マイナーバージョンアップでも仕様変更あり?
• それなりに動くものは作れそう• google-api-python-client と requests は動く。
Top Related