Serverless Frameworkを使ってLambdaファンクションをデプロイしてみた

プロジェクトでAWS Lambdaを利用したバッチ処理プログラムを作ることになりました。

Terraformとの比較検討の末、構成管理ツールにServerless Frameworkを使います(インフラと分けて管理できること、チーム内で実装実績があったのが理由です)。

予行練習としてシンプルなJSONを返すファンクションを実装しました。

Serverless Frameworkとは

近年、LabmdaやCloud Functionなどのサービスを使って、サーバーを意識しないアプリケーションの実装が増えてきています。

Serverless FrameworkはLambdaなどのサービスと連携し、サーバーレスなアプリケーションの開発と構成管理をよしなにサポートしてくれるフレームワークです。

事前準備

Serverless Frameworkのインストール

ドキュメントの get started に書いてある通り、下記のコマンドでインストールできます。

# Mac or Linuxの場合
curl -o- -L https://slss.io/install | bash

AWS IAMユーザの作成

AWS Lambdaを使う場合、Serverless FrameworkがAWSアカウントにアクセスできるように、IAMで専用のシステムユーザの作成とアクセスキーの発行が必要です。

発行したアクセスキーを aws config に設定します。

プロジェクトの作成

serverless と打つだけで、メニューを選択しながらアプリケーションを作成できます。

もしくは下記のように serverless create コマンドで作成できます。

serverless create -t "aws-nodejs" -p hogehoge -n mogumogu
  • -t…使用するプラットフォームと言語のテンプレートを指定
  • -p…プロジェクトを置くパスを指定
  • -n…プロジェクト名を指定

serverless create コマンドを実行すると、必要なファイルが指定したパスに作成されます。

プロジェクトのデプロイ

下記コマンドでAWSに必要なIAMロールやS3のバケットが作成され、Lambdaファンクションがデプロイされます。

serverless deploy

ファンクションの呼び出し

serverless.yml にて定義されたファンクションを下記コマンドで呼び出せます。

serverless invoke --function hello

テンプレートのままデプロイして呼び出したら、下記のようなjsonが返ってきました。

{
    "statusCode": 200,
    "body": "{\n  \"message\": \"Go Serverless v1.0! Your function executed successfully!\",\n  \"input\": {}\n}"
}

お片付け

下記コマンドでデプロイしたアプリケーションを削除できます。

serverless remove

まとめ

取り急ぎ、素振りということで簡単にまとめました。Serverless FrameworkはGoやTypeScriptにも対応しており、使いやすそうです。

公式ドキュメントにサンプルコード もあるので、これをなぞるだけでも非常に勉強になります。