🥰
[爆速] Serverless Framework で API Gateway + Lambdaデプロイ
1.はじめに
前回、Zappaを利用してAPI Gateway + LambdaをAWSへデプロイすることを確認したので別手法「Serverless Framework」で今回は試してみたいと思います。
2.Serverless Frameworkとは?
特徴を並べてみました
- インフラのコード化できる
- サーバレスアーキテクチャの管理・構築が楽
- ローカルで実行できる。 Zappaはできない、、、
- ローカルの開発環境が整っているのはメリット
- AWS, Azure, GCP など幅広く対応している
- 様々なテンプレートをベースに作業できる
- Node.jsで作られたCLIツール(Node.js:v12以上が必要)
- Serverlessは npmのパッケージで公開されている
3.ハンズオン
3.1 ライブラリのインストール
Serverlessのコマンドをインストール
$ npm install -g serverless
インストールされたか確認
$ serverless --version
3.2 APPの雛形作成
templateを使うと楽
$ serverless create --template aws-python3
以下が作成される
.gitignore
handler.py ( mv してご自身のファイル名へ )
serverless.yml
中身を見てみる 👀
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
# Use this code if you don't use the http event with the LAMBDA-PROXY
# integration
"""
return {
"message": "Go Serverless v1.0! Your function executed successfully!",
"event": event
}
"""
3.3 serverless.ymlの作成
以下のような設定ができます。Prpfileですね
- Lambdaに設定されているIAMロール設定
- デプロイ時にどのファイルとかディレクトリを含めるかの設定
- 使用するプラグインの設定
service: serverless-test
frameworkVersion : 3
provider:
name: aws
runtime: python3.8
stage: dev
region: ap-northeast-1
functions:
hello:
handler: handler.hello
3.4 ローカルでテスト
$ serverless invoke local --function hello
3.5 デプロイ
以下を実行すると CloudFormation Stack が作成される。
$ serverless deploy
4. 発展
Flaskアプリのデプロイを考えてみます。FlaskのアプリケーションはWSGIアプリケーションなので対応させなくてはなりません。
まずは、pluginの追加
$ serverless plugin install -n serverless-wsgi
※ serverless-wsgi
: API Gatewayから LambdaへのリクエストをWSGIアプリ用に形式変換してくれる
api.py
from flask import Flask
app = Flask(__name__)
@app.route("/hello")
def hello():
return "hello-serverless-flask"
yamlの記述
serverless.yml
service : example
provider:
name : aws
runtime : python3.8
region: ap-northeast-1
plugins:
- serverless-wsgi
functions:
api:
handler: wsgi_handler.handler
events:
- http: ANY /
- http: ANY /{proxy+}
custom:
wsgi:
app:api.app
デプロイ
$ serverless deploy
5. 終わりに
Serverless Frameworkはテンプレートが豊富だったりして使いやすかったです。Zappaよりできることも多いように感じました。Terraformとの連携もあるようですので今後勉強していきたいと思います!
Discussion