AWS Lambdaをpython-lambda-localとlambda-uploaderを使ってローカル開発してみる

さて、今回はAWS Lambdaでpythonの開発体制を取るためにローカルで開発したものをアップするということを実施してみます。

【関連記事】
AWS LambdaでS3にファイルがアップロードされたのを検知する
AWS LambdaでS3にファイルがアップロードされたら、加工して別フォルダにファイルを作成する(Python)
外部のライブラリを利用してのAWS Lambdaの設定

今まで開発してきた中で、外部ライブラリなどを使うと都度zipのアップロードで開発が大変ということがありました。

 

そこで、ローカルで開発したものをデプロイするという手法を試すために、python-lambda-local と lambda-uploader というツールを使い開発を行っていきます。

尚、開発は以下の環境で実施しています。
AmazonLinuxでpyenvを利用してPython3.6の仮想環境の構築(Vagrant)

 

python-lambda-localのインストール

pythonでローカル環境で開発を行えるツールです。

https://github.com/HDE/python-lambda-local

 

lambda-uploaderのインストール

こちらはAWS lambdaにローカルからデプロイを行うためのツールです。

https://github.com/rackerlabs/lambda-uploader

 

開発環境のファイル準備

ローカルからデプロイを行うためには以下の4つのファイルが必要になります。

requirements.txt pipモジュールが書かれたファイル。
モジュール名だけの記載でもいいし、バージョンを指定するときは「<モジュール名>==<バージョン>」のように記載。
event.json テスト時に投げるPOSTリクエストの内容で、GETリクエストのテストの場合は空でも問題ありません。
lambda.json lambdaの設定ファイルで関数名やロールなどを記載する。
lambda_function.py(最初に実行するファイル名) 実行される関数ファイル。

 

ではローカル環境で試してみます。

「python-lambda-local」に virtualenv の環境で使ってと書いてあるのでそちらの環境で実施してみます。

 

こちらで以下の4つのファイルを作成しました。

 

 

 

 

 

 

ローカルでの試験

ファイルが準備できたところでローカルでの試験を実施してみます。

python-lambda-local の利用方法は以下になります。

 

引数の説明は以下になります。

HANDLER_FUNCTION イベントハンドラの名前になります。
今回の設定では「lambda_handler」となります。
FILE 実行するpythonのファイル名です。
今回の設定では「lambda_function.py」となります。
EVENT イベント用のjsonファイルです。

 

さて、こちらを実行すると以下のようになります。

無事、結果が出力されました。

 

デプロイ

ローカルでの試験が無事に終わったところでデプロイを行います。

コマンド一つで非常に簡単にデプロイが行えました。

 

AWSマネージメントコンソールでの試験

さて、デプロイしたファイルが実際に上がっているかと、動くかの試験をしてみます。

今回は最初の確認なのでAWSマネージメントコンソールで実施しましたが、ローカル環境からawsコマンドを叩くようなツールを作成し確認を行うなども慣れて来ると実施できます。

 

さて、AWSマネージメントコンソールに接続すると、無事関数が作成されており関数を確認すると以下のようになっていました。

 

今回、イベントなどは必要ないのでそのままテストを実施します。

「テストイベントの選択」をクリックし、「テストイベントの設定」を実施します。

 

テストイベントでは event.json に書いたように以下を設定します。

 

さて、それでは実際のテストを実施してみます。

「テスト」をクリックすると以下のような実行結果が出てきます。

 

こちらで関数の実行から返された結果が出ており、無事想定通りの結果となっていることを確認できました。

とりあえずは簡単なテストをしてみましたが、AWS Lambda ではローカルの開発環境などが非常に苦労しそうなので少しでも開発のしやすい手法を取れればと思います。

 

【関連記事】
AWS LambdaでS3にファイルがアップロードされたのを検知する
AWS LambdaでS3にファイルがアップロードされたら、加工して別フォルダにファイルを作成する(Python)
外部のライブラリを利用してのAWS Lambdaの設定