Serverless Framework のインストールから AWS へのデプロイまで
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 の内容は以下です。
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 をちょっと修正します。
修正後の内容は以下になります。provider
にregion
を追加しています。
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 のタグが今回のコードです)。
Discussion