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

  • 15
    Like
  • 0
    Comment

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