【Serverless】Serverless Framework ~ 環境設定編 ~

■ はじめに

 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