【必見】AWS Lambdaをローカル環境で開発してみた

記事タイトルとURLをコピーする

こんにちは。技術3課の森です。

今までコーヒーはちょっと甘めしか飲めませんでしたが、最近はブラックで飲めるようになりました。大人に近づいた気がします。

Lambd Functionの環境構築

個人的に過去Lambda Functionを作成したときは、Javaで作成することが多かったですが、最近は、Pythonで作るようにしているため、開発環境を整える必要があります。
今回は、現在利用している開発環境を以下の手順でご紹介します。

  • virtualenvのインストール
  • python-lambda-localのインストール
  • lambda-uploaderのインストール

 

事前情報

  • PC: Mac Book Pro Late 2016 13inch
  • OS: macOS Sierra(10.12.3)

virtualenvのインストール

まずはじめに、virtualenvのインストールを行います。

$ sudo easy_install pip
$ sudo pip install virtualenv

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

次にpython-lambda-localのインストールを行います。
このモジュールはローカルでコードを実行する時に使うコマンドです。

$ sudo pip install python-lambda-local

lambda-uploaderのインストール

最後にlambda-uploaderをインストールを行います。
このモジュールはAWS Lambdaに開発したコードなどをデプロイするコマンドです。

 $ sudo pip install lambda-uploader 

開発時に必要なもの

上記の手順で、virtualenv / python-lambda-local / lambda-uploaderがインストールされ、開発環境が整いました。
次は実際に開発を始めるにあたり必要なファイルの準備手順を紹介します。

  1. requirements.txt
  2. pipモジュールが書かれたファイルです。
    記述方法としては、「<モジュール名>==<バージョン>」となります。
    例としてboto3をpipモジュールとしてインストールした場合を書きます。

    boto3==1.4.4
    botocore==1.5.7

    また、以下のコマンドを実行することでも作成してくれます。

    $ pip freeze > requirements.txt
  3. event.json
  4. イベント起動する場合などに利用します。
    今回はイベント起動はしないので、中身は以下のようにしておきます。

    {}
     
  5. lambda.json
  6. AWS Lambdaの設定ファイルになります。
    Management Consoleで入力するような内容を書きます。
    以下に例を書きます。

    {
        "name": "LambdaFunctionName",
        "description": "Description of LambdaFunciton",
        "region": "ap-northeast-1",
        "handler": "lambda_function.lambda_handler",
        "role": "arn:aws:iam::111111111111:role/MyLambdaExecRole",
        "timeout": 300,
        "memory": 128
    }
    項目名 説明
    name Lambda関数の名前
    description Lambda関数の説明
    region 実行するリージョン
    handler Lambdaのハンドラ名
    role Lambda関数に付与するロール
    timeout Lambda関数の実行タイムアウト値
    memory Lambda関数に付与するメモリサイズ

Lambda Functionの実行とデプロイ

インストールは終わって環境ができたので、動作させて、デプロイしていきます。
それでは、実行コマンドを書いていきます。

ローカルでLambda Functionを実行

まずはコマンド実行例を紹介します。

$ python-lambda-local -f 
引数 説明
<Handler> Lambda関数のハンドラー
Lambda関数で一番最初に実行してほしいメソッド名
<Python File Name> Pythonファイル名
<JSON File(Event)> ハンドラーに渡すイベント情報をJSON形式でファイルに記載しておき、そのファイルパスを指定

ローカルからのデプロイ

コマンド一発でデプロイができます。

$ lambda-uploader
λ Building Package
λ Uploading Package
λ Fin

これで、Lambda関数をAWSにデプロイすることができました。 実行結果のスクリーンショットを確認してみましょう。 以上で作業完了です。

まとめ

これまで、ローカルで開発後、実行する度にAWSへデプロイしてから動作確認する手順には時間を要しましたが、今回ご紹介したモジュールを利用することで、ローカルで実行できたり、簡単にデプロイすることが可能となります。

Lambdaをデプロイ可能ですが、現段階で機能が提供されていないためトリガーの設定はできません。
このあたりについては、また別の記事を書いてみる予定です。
また、もしこんなことすればもっと楽になるとかあれば、教えていただけると幸いです。