serverless frameworkを使って本格的なAPIサーバーを構築(Express編)
最近、推しメンの serverless framework の記事の第3弾です。
保守メンテが楽になりつつも、実戦で速攻で構築ができます。
目次
- serverless frameworkを使って本格的なAPIサーバーを構築(魅力編)
- serverless frameworkを使って本格的なAPIサーバーを構築(ハンズオン編)
- serverless frameworkを使って本格的なAPIサーバーを構築(Express編)← 今ここ
- serverless frameworkを使って本格的なAPIサーバーを構築(テストコード編)
前回まで、serverless frameworkのハンズオンの記事まで書きました。
今回は、serverless frameworkで 「 lambda + APIGateway + DynamoDB 」 の構成ですが、Expressを導入しローカルで実行できるようにします。
この記事でできるようになること
- Lambda上でExpressを動かす
- ローカルでAPIを試す環境を構築する
Expressを使う旨味
- サーバレスでサービス全体を作るのはしんどい
- ローカルで開発+テストできるようになる
- Expressは、RubyのSinatraのようなシンプルなMVCフレームワークなのでとっつきやすい
- packege.jsonをfunctionごとに用意しなくて良くなる!!
前準備
- expressをinstallしておく
- Lambda上でExpressを動かすツールとして、「aws-serverless-express(公式)」と「express-on-serverless」というものがあります。本来公式のものを使うべきですが、今回はexpress-on-serverlessを使用しました。
$ yarn add express
$ yarn add express-on-serverless
まずは、単純にJSONを返してみる(Express)
- serverless.ymlを編集します
- /配下をAnyですべてExpressに渡します
serverless.yml
functions:
app:
handler: functions/api/api.handler
events:
- http:
path: /{proxy+}
method: any
cors: ${self:custom.cors_enabled.${opt:stage, self:provider.stage}}
- api.jsでは、
/hello
がきたらJSONを返すようにしておきます。
functions/api/api.js
'use strict';
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Go Serverless v1.0! Your function executed successfully!'
}),
};
app.get("/hello", function(req, res, next){
res.json(response);
});
exports.handler = require('express-on-serverless')(app);
ローカルで動かしてみる
- 先ほどの、シンプルなアプリケーションをローカルで動かして見ましょう
- functions/api/api.jsに以下を追記してください。
functions/api/api.js
// 追記する
if (process.env.NODE_ENV === 'dev') {
app.listen(3000, () => {
console.log("Node.js is listening to PORT: 3000");
});
}
そしてサーバーを起動します $ node functions/api/api.js
すると、http://localhost:3000/hello で先ほどのAPIにアクセスすることができます!!
- これで、deployしても、前回と同じようなAPIを作ることができます!!
$ sls deploy -v -s dev
デプロイが成功し、APIにアクセスすると
前回Expressを使わずに作ったAPIと同じレスポンスになると思いますが、ローカルで開発できるようになったので、開発スピードは5000兆倍になります!!
まとめ
- serverlessにExpressを乗せて使うと、開発スピードが5000兆倍になりました!!
- 今まで通り、serverlessの旨味を生かしたイベントのフックでの発動+APIの構築ができるようになり利益ありありです。
次回
- serverless frameworkを使って本格的なAPIサーバーを構築(テストコード編)です!!