Apexとpython-lambda-local で始める AWS Lambda Function開発

13
Apex と python-lambda- local とととと AWS Lambda Function とと ととととととと とととと

Transcript of Apexとpython-lambda-local で始める AWS Lambda Function開発

Page 1: Apexとpython-lambda-local で始める AWS Lambda Function開発

Apex と python-lambda-localで始める

AWS Lambda Function 開発

株式会社フンザ 小松茂敏

Page 2: Apexとpython-lambda-local で始める AWS Lambda Function開発

自己紹介• 小松 茂敏  (cgetc)• 株式会社フンザ(チケットキャンプ運営)

• 第一研究開発チーム ( サーバーサイド)• 今年2月に入社

• Python 歴 本格的には2月から• Google App Engine 出たての時に触ったことあり• 本を何冊か読んだことはあった程度

Page 3: Apexとpython-lambda-local で始める AWS Lambda Function開発

概要• Apex と pythom-lambda-local で AWS

Lambda の Function を作ってみた。• 課題など。• 実用性のあるものが作れるのか?

Page 4: Apexとpython-lambda-local で始める AWS Lambda Function開発

Apex とは?• AWS Lambda に特化した構成ツール

• デプロイ、起動、ログなど• 複数のランタイムに対応• terraform と連携できる

Page 5: Apexとpython-lambda-local で始める AWS Lambda Function開発

python-lambda-local とは• AWS Lambda の Python 実行環境をエミュレート

• 動作確認のたびに AWS Lambda にデプロイする手間が省ける

Page 6: Apexとpython-lambda-local で始める AWS Lambda Function開発

どう組み合わせたか• 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開発

課題• 対策

• ソースとデプロイ用のフォルダを分ける• Fabric でソースとライブラリをコピーして、 Apex deploy を実行する• terraform との連携は?

Page 8: Apexとpython-lambda-local で始める AWS Lambda Function開発

課題• AWS Lambda の Python ランタイムは環境変数を使えない

• Apex がアップロードする zip ファイルには、環境変数を定義する .env.json が含まれている• AWS Lambda が対応していない?• 実行時に .env.json の内容を環境変数に設定するコードを書くことで解決

Page 9: Apexとpython-lambda-local で始める AWS Lambda Function開発

課題

• ローカル環境の環境設定に使えて一石二鳥

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開発

実用性のあるものが作れるのか?• 実行時間の制約

• 最大 300 秒• 複数の関数を組み合わせて対応

• スケジューラで引数が指定できない• 起動用の関数に引数を内包させて、その関数から主処理の関数を呼び出す

Page 11: Apexとpython-lambda-local で始める AWS Lambda Function開発

実際に作ったもの• Google のクロールエラーを検知する処理

• Google Search Console API でクロールエラーを問い合わせ• Incoming Webhook で Slack に通知https://github.com/cgetc/lambda-seo-alert

Page 12: Apexとpython-lambda-local で始める AWS Lambda Function開発

感想• Apex が便利

• 複数の関数を管理するのに Project になっている• マイナーバージョンアップでも仕様変更あり?

• それなりに動くものは作れそう• google-api-python-client と requests は動く。

Page 13: Apexとpython-lambda-local で始める AWS Lambda Function開発

最後に株式会社フンザは

Python エンジニアを募集中ですhunza.jp/jobs