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