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

AWS運用自動化サービス「Cloud Automator」
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。

こんにちは。技術3課の森です。
長年スノーボードをやってまして、板はアルペン(gray snowboards / FORCE)を使ってます。

前回のお話と今回の概要

前回のお話では、「virtualenv」と「python-lambda-local」と「lambda-uploader」を使ったAWS Lambdaの開発を紹介させていただきました。
今回は、「Serverless Framework」を使ってAWS Lambdaをローカル環境で開発する環境を以下の手順でご紹介します。

  • serverless frameworkのインストール

事前情報

今回はAmazon EC2を使って作業をします。

  • OS: Amazon Linux
  • IAM Role: AdministratorAccessポリシー

Serverless Frameworkのインストール

これからServerless Frameworkをインストールしていきます。まずは、EC2をt2.microで起動させて、ec2-userでログインしてください。

yumパッケージのインストールとアップデートを行い、再起動

まず最初に、yumパッケージのインストールとアップデートを行います。そして、再起動します。

nvmとnode.jpのインストール

次に、nvmとnode.jpをインストールします。次のコマンドを実行してください。

Serverless Frameworkのインストール

やっとServerless Frameworkのインストールを行います。今回は、version 1.6.1 を利用します。

Pythonの実行環境を構築

最後に、前回も使ったPythonの実行環境を構築します。以下のコマンドを実行してください。

設定情報を.bash_profileに書き込みます。

.bash_profileに書き込みましたので、ロードします。

次にPythonと仮想環境の作成を行います。
今回は一般ユーザのホームディレクトリ配下に「Developments/project」フォルダを作成して作業することにします。

開発時に必要なもの

実際に開発を始めるにあたり必要なファイルの準備手順を紹介します。

  1. requirements.txt
  2. これは前回と同じなので、割愛します。

  3. serverless.yml
  4. デプロイに必要なファイルになります。Lambda関数に付与するIAMロールやAWS Lambdaに設定するハンドラー、トリガーなどを書きます。詳しい内容はここでは割愛しますが、リファレンスがあるので、コチラをご覧ください。

Lambda Functionの実行とデプロイ

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

ローカルでLambda Functionを実行

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

引数 説明
<function name> serverless.ymlの”functions”プロパティの下に書かれる名前
AWS – Functions

なお、コマンド内の「local」を消すとデプロイ済みのLambda関数を実行します。

ローカルからのデプロイ

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

これで、Lambda関数をAWSにデプロイすることができました。

前回と違うところ

前回のvirtualenv / python-lambda-local / lambda-uploaderでは、Lambdaのトリガー設定ができないと書きましたが、今回のServerless Frameworkではトリガー設定ができるようになります。
以下に、S3のバケットに拡張子が「csv」のファイルが置かれたらLambdaが発火するというserverless.ymlの例を書きます。

この例は、「pub_csv_bucket」という名のバケットに拡張子が「csv」のファイルが作成(配置)されたらhandler「pythonfile.main」が実行されるとなります。

まとめ

実際にコードを開発している間では、前回と変わりはありませんが、今回書かなかったですが、serverless.ymlに情報を書き込むことで他にもできることがあります。

  • トリガーに必要なリソースの作成とLambdaへのトリガー設定
  • IAMRoleの情報を作成
  • 新たなリソースを作成

そのあたりはまた別の記事を書いてみる予定です。
また、もしこんなことすればもっと楽になるとかあれば、教えていただけると幸いです。

AWS運用自動化サービス「Cloud Automator」