Serverless FrameworkでAWS Lambdaを作成する
Serverless Frameworkを利用して、Lambda関数をデプロイします。参考にした公式ページはこちら。
環境
- Serverless Framework
- Framework Core: 1.67.0 (standalone)
- Plugin: 3.5.0
- SDK: 2.3.0
- Components: 2.22.3
Serviceの作成
まず Service
を作成します。Serviceとは、Serverless Frameworkにおけるプロジェクトのようなものらしいです。 create
コマンドで作成することができ、 template
パラメーターを指定すると、指定した言語でのサンプルファイルを生成してくれます。
$ serverless create --template aws-python3 --path myService
カレントディレクトリの myService
ディレクトリ配下に、以下のファイルが生成されています。
. ├── .gitignore ├── handler.py └── serverless.yml
handler.py
の編集
handler.py
ファイルは、Lambdaで実行されるソースコードを記述するファイルとなります。
The handler.js file contains your function code. The function definition in serverless.yml will point to this handler.js file and the function exported here.
今回は、偶数か奇数かを判断する以下のコードを書いています。
handler.py
import json def run(event, context): if 'number' in event: if int(event['number']) % 2 == 0: body = { 'result': 'even number' } else: body = { 'result': 'odd number' } response = { 'statusCode': 200, 'body': json.dumps(body) } return response
serverless.yml
の編集
serverless.yml
ファイルは、デプロイするLambda関数の設定を定義したファイルとなっています。このファイルから、CloudFormationのテンプレートが生成されるとのこと。
Every serverless.yml translates to a single AWS CloudFormation template and a CloudFormation stack is created from that resulting CloudFormation template.
サンプルとして雛形を出力してくれているので、それを編集する形で定義を作成します。
serverless.yml
frameworkVersion: ">=1.67.0" service: myservice provider: name: aws runtime: python3.8 stage: dev region: ap-northeast-1 memorySize: 128 versionFunctions: true functions: isEven: handler: handler.run
デプロイ
デプロイします。
$ serverless deploy --aws-profile (aws profile名)
Lambdaのinvoke
作成したLambda関数を実行します。実行する前に、 serverless create
したServiceディレクトリのルートパスに event.json
というファイルを作成し、実行するLambdaに渡すイベントデータを記載してあげます。
event.json
{ "number": 2 }
実行します。
$ serverless invoke --function isEven --path event.json --aws-profile (aws profile名) { "statusCode": 200, "body": "{\"result\": \"even number\"}" }
ログの表示
logs
コマンドを実行すると、ログを表示してくれます。
$ serverless logs --function isEven --aws-profile (aws profile名) START RequestId: 1545c57d-5c63-4b00-be5a-aacb5d5dede0 Version: $LATEST END RequestId: 1545c57d-5c63-4b00-be5a-aacb5d5dede0 REPORT RequestId: 1545c57d-5c63-4b00-be5a-aacb5d5dede0 Duration: 1.34 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 49 MB Init Duration: 120.89 ms
削除
remove
コマンドにて、デプロイしたリソースを削除できます。
$ serverless remove --aws-profile (aws profile名)
GitHubからサービスのインストール
gitのホスティングサービス上に公開したServiceを、serverlessコマンド経由でローカルにダウンロードできるとのこと。
$ serverless install -u https://github.com/some/service.git