serverless frameworkを使ってみる!
こんにちは!森です。
社内のプロジェクトの一部でserverless frameworkを使っているのでNode.jsでの初期設定から簡単な使い方を紹介できたらなと思います!
serverless frameworkのバージョンをプロジェクトごとに固定して作成したいのでnode_modules内のserverlessを使用して設定して行きたいと思います。
設定ファイルなどの作成
まず、プロジェクトで使うディレクトリを作成して中に入ります。
1 2 |
mkdir myapp cd myapp |
次に、npmの初期設定をします。
1 |
npm init |
npmの設定後
1 |
npm install serverless |
として、serverlessを入れてserverless frameworkの設定をします。
1 |
./node_modules/.bin/serverless create --template aws-nodejs |
このコマンドによってserverless.ymlやhandler.jsなど雛形が作成されるのでそれぞれの設定をしていきます。
serverless.ymlの設定
providerの初期設定では以下のようになっていると思います。
1 2 3 |
provider: name: aws runtime: nodejs12.x |
これを以下のようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
provider: name: aws runtime: nodejs12.x region: ap-northeast-1 stage: ${opt:stage, self:custom.defaultStage} environment: STAGE: ${self:provider.stage} TZ: Asia/Tokyo logRetentionInDays: 30 iamRoleStatements: - Effect: Allow Action: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents Resource: - "*" custom: defaultStage: dev |
providerの設定
providerではインフラ側の設定を主に行っていきます。
name
今回はAWSを使用するのでawsと記入します(GCPの場合はgoogleAzureであればazureと設定します)
runtime
使用する言語やバージョンを選択できます。今回はnodejs12.xを使用します。
region
lambdaを作成するリージョンの設定をします。
stage
API Gagtewayで使用するステージの設定をします。
1 |
${opt:stage, self:custom.defaultStage} |
opt:stage
で実行時のstageオプションを取得、設定されていない場合は右側のself:custom.defaultStage
を使用します。self:custom.defaultStage
はこの設定ファイル内のcustom.defaultStage
を参照しろということです。
environment
環境変数の設定ができます。moment.jsやDay.jsなど時刻を使用する場合はタイムゾーン(TZ)をしておいた方が良いと思います。
logRetentionInDays
ログの保存期間を日付で指定できます。
iamRoleStatements
ログを記録するために権限をつけます。
serverless.ymlにhelloというAPIを作成してみます。/helloというURLにhelloという関数を紐付けます。
1 2 3 4 5 6 7 |
functions: hello: handler: handler.hello events: - http: path: hello method: get |
ここまででserverless.ymlの設定ができたので、紐付けされたコード(handler.js)を見てみると
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
'use strict'; module.exports.hello = async event => { return { statusCode: 200, body: JSON.stringify( { message: 'Go Serverless v1.0! Your function executed successfully!', input: event, }, null, 2 ), }; // 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 }; }; |
となっておりexportsされたhello関数が呼び出されます。
デプロイ
設定
package.jsonのscriptsに以下のように設定します。
1 2 3 |
"scripts": { "deploy-dev": "serverless deploy -v --stage dev } |
プロファイルを指定したい場合は--aws-profile profile_name
の様にオプションにaws-profileを指定します。
デプロイ方法
設定後は
1 |
npm run deploy-dev |
と実行すればデプロイできます。
デプロイ時のendpointsにURLとメソッドが表示されるので、割り当てられたURLにアクセスすると
1 2 3 4 |
{ message: 'Go Serverless v1.0! Your function executed successfully!', input: xxxxx, } |
のように無事レスポンスが返ってきました!!
あとは、関数の処理を書き換えたり新しく関数を作成してeventsを作成したりすれば欲しいAPIが作成できると思います!