Edited at

serverless frameworkを使って本格的なAPIサーバーを構築(Express編)

More than 1 year has passed since last update.


serverless frameworkを使って本格的なAPIサーバーを構築(Express編)

最近、推しメンの serverless framework の記事の第3弾です。

保守メンテが楽になりつつも、実戦で速攻で構築ができます。


目次

framework_repo.png

前回まで、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サーバーを構築(テストコード編)です!!