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にも対応しており、使いやすそうです。
公式ドキュメントにサンプルコード もあるので、これをなぞるだけでも非常に勉強になります。