17
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

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

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

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
17
Help us understand the problem. What are the problem?