💨

Serverless Framework のインストールから AWS へのデプロイまで

2021/04/08に公開

Serverless Framework のインストールから AWS へのデプロイまでの流れを説明します。

Serverless Framework のインストール

Serverless Framework のインストールは公式サイトに従います。

Mac OS/Linux は以下でインストールできます。

$ curl -o- -L https://slss.io/install | bash

新規 Serverless サービスの作成

インストールできたら、新規に Serverless サービスを作成します。

使用するクラウドが AWS、言語は Python 3.8 を使用する場合は、以下でテンプレートが作成できます。

$ sls create -t aws-python3

ちなみに、aws-pythonで作成すると Python 2.7 で作成されるので、Python2 系を使いたい場合はそちらを使用してください。

実行すると、以下のようなファイルが作成されます。

$ tree -a
.
├── .gitignore
├── handler.py
└── serverless.yml

0 directories, 3 files

それぞれのファイルについて説明しますが、.gitignore については Git に関するものなので、説明は割愛します。

serverless.yml が Serverless Framework の各種設定で、AWS Lambda で動作する関数本体になります。

serverless.yml の説明

sls create 実行直後の serverless.yml は以下になります。
実際はコメントが多数入ってますが、コメントをすべて削除すると以下のみになります。

service: serverless-sample

frameworkVersion: "2"

provider:
  name: aws
  runtime: python3.8
  lambdaHashingVersion: 20201221

functions:
  hello:
    handler: handler.hello

serviceは作成したサービスのサービス名で、デフォルトだとディレクトリ名が使われます。

frameworkVersionは Serverless Framework の使用するバージョンです。現時点の最新版を使っていれば 2 になっているはずです。

providerはクラウド周りの設定で、nameは使うクラウド、runtimeは使用言語になります。lambdaHashingVersionは、このプルリクで追加されたオプションですが、新規サービスであれば基本的にこのままで大丈夫です。

functionsは AWS Lambda の設定です。hello となっている部分が Lambda の関数名に使われます。Serverless Framework で作成される Lambda 関数名は<service>-<stage>-<関数名>になります。stage 名のデフォルト値は dev なので、serverless-sample-dev-helloという関数が作成されます。

handlerは、実際に動作するプログラムの場所を示しています。handler.hello は handler.py ファイルの hello 関数を実行するという意味になります。

handler.py の説明

handler.py の内容は以下です。

handler.py
import json

def hello(event, context):
    body = {
        "message": "Go Serverless v1.0! Your function executed successfully!",
        "input": event
    }

    response = {
        "statusCode": 200,
        "body": json.dumps(body)
    }

    return response

serverless.yml に設定している通り、hello 関数が Lambda の起点になります。

引数の event は Lambda の入力値です。Lambda が何のイベントで起動するかによって入ってくる値は異なります。

AWS にデプロイする

では、この Serverless サービスを AWS にデプロイしましょう。

awscli で credentials の設定

デプロイできるようにするため、AWS の credentials を設定します。awscli をインストール後、以下のコマンドで設定できます(serverless コマンドでも設定できるので、このあたりは好みでいいです)。

$ aws credentials

細かい設定方法は公式サイトの設定方法を参考にしてください。

公式サイトに詳細は記載されていますが、使用する IAM ユーザーにAdministratorAccessを設定していれば基本的に問題なく動作するはずです。

デプロイ前に設定を一部変更

サービスをデプロイする前に、デプロイ先を東京リージョンにしたいので、serverless.yml をちょっと修正します。
修正後の内容は以下になります。providerregionを追加しています。

serverless.yml
service: serverless-sample

frameworkVersion: "2"

provider:
  name: aws
  runtime: python3.8
  lambdaHashingVersion: 20201221
  region: ap-northeast-1 # 追加部分

functions:
  hello:
    handler: handler.hello

サービスをデプロイ

以下のコマンドでデプロイできます。

$ sls deploy

デプロイした関数を実行

AWS の Management Console から実行してもいいですが、Serverless Framework のコマンドでも以下のように実行できます。

$ sls invoke -f hello -d '{"key":"value"}'

invoke コマンドの f オプションが関数名で、d オプションに入力値を設定しています。

結果は以下のようになります。

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

デプロイしたサービスの削除

デプロイして関数が動作することまで確認できましたので、サービスの削除方法も説明しておきます。

以下のコマンドを実行すれば削除できます。

$ sls remove

おまけ

今回使用したコードは以下の Github リポジトリにアップしているので、全体のコードを確認したい方はそちらを見てください(v1.0 のタグが今回のコードです)。
https://github.com/ombran/serverless-sample/tree/v1.0

Discussion