■ はじめに
Serverless Framework ってのを触る機会があったのでメモ。 インストールでかなりハマったが、 AWSアカウントがなくても、ローカル環境で簡単に AWS Lambda の開発できるので、かなりいい、、、
目次
【1】Serverless Framework 【2】環境設定 1)前提条件 2)Serverless Frameworkのインストール 【3】とりあえず、動かしてみる 1)プロジェクト作成 2)プロジェクト内のファイルを確認 3)ローカルで実行してみる
【1】Serverless Framework
* サーバーレスなアプリケーション (e.g. AWS Lambda) を 簡単に開発、デプロイするためのツール
【2】環境設定
1)前提条件
[1] node.js (npm) v4以上
注意
* 古いバージョンだと後々Serverlessがインストールできなくなるので 極力最新版をインストールすること => 「sudo apt-get install nodejs npm」だけだとエラーになる可能性がある => インストールしていない場合は、以下の関連記事を参照のこと
Node.js ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2021/11/06/000000
AWS Lambda の場合
[2] AWS CLI [3] AWSアカウント (なくても、Skipすることは可能) => AWS CLI については、以下の関連記事を参照のこと
AWS CLI ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/12/01/000000
2)Serverless Frameworkのインストール
# Serverless Frameworkのインストール(-g = --global) sudo npm install -g serverless # 確認 serverless --version
【3】とりあえず、動かしてみる
1)プロジェクト作成
# 念のため、、、 mkdir sls-demo cd sls-demo/ # slsと省略可能。 # 以下をコマンドすると、対話形式で選んでプロジェクトを作成する $ serverless Creating a new serverless project ? What do you want to make? AWS - Python - Starter ? What do you want to call this project? hello-world ✔ Project successfully created in hello-world folder ? Register or Login to Serverless Framework No ? No AWS credentials found. Serverless Framework needs these to automate deployment of infra & code. Choose which type of AWS credentials you would like to use, and we'll help you set them up: Skip You can setup your AWS account later. More details available here: http://slss.io/aws-creds-setup
2)プロジェクト内のファイルを確認
# 1)を実行するとプロジェクト名と同じディレクトリができているはず $ ls hello-world $ cd hello-world $ ls README.md handler.py serverless.yml
# | File names | Explanations |
---|---|---|
1 | README.md | READMEで使い方とか書いてある |
2 | handler.py | プログラム本体 |
3 | serverless.yml | デプロイされるサービスの定義を行うファイル |
README.md (一部改変して抜粋)
### Deployment $ serverless deploy ### Invocation serverless invoke --function hello ### Local development ★これでローカルで実行できる(後ほど)★ serverless invoke local --function hello ### Bundling dependencies serverless plugin install -n serverless-python-requirements
handler.py
import json def hello(event, context): body = { "message": "Go Serverless v3.0! Your function executed successfully!", "input": event, } return {"statusCode": 200, "body": json.dumps(body)}
serverless.yml
service: hello-world frameworkVersion: '3' provider: name: aws runtime: python3.9 functions: hello: handler: handler.hello
3)ローカルで実行してみる
* README.md に載っていた「Local development」をやってみる
[1] handler.py を修正
#"message": "Go Serverless v3.0! Your function executed successfully!", "message": "Hello world!!!?",
[2] ローカル実行
# sls invoke local --function hello serverless invoke local --function hello { "statusCode": 200, "body": "{\"message\": \"Hello world!!!?\", \"input\": {}}" }
https://www.serverless.com/framework/docs/providers/aws/cli-reference/invoke-local
参考文献
https://makky12.hatenablog.com/entry/2019/06/23/183233
関連記事
Serverless Framework ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/11/03/234825
Serverless Framework ~ offline ~
https://dk521123.hatenablog.com/entry/2023/11/09/004458
Serverless Framework以外のフレームワーク
https://dk521123.hatenablog.com/entry/2024/05/26/001612
Lambda ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2017/04/05/235618
Lambda ~ Python / 入門編 ~
https://dk521123.hatenablog.com/entry/2021/10/07/103317
Node.js ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2021/11/06/000000
AWS CLI ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/12/01/000000