【画像多め】AWS-Lambda を使って サーバーレス で Express を動かすまでの手順
TL;DL 🗒
以下の手順を画像多めで解説
- aws-serverless-express を使って AWS-Lambdaから Express を実行できるようにする
- Lambda を API Gateway と接続して公開する
これで Serverless Express を公開可能になる
成果物 🎉
動機 🤔
- Serverless で Express をデプロイして AWS-Lambda を Webアプリケーション実行環境としたい
- aws-serverless-express の説明は参考リンクの内容で十分なんだけど、API Gateway の設定で結構はまったので手順を残す
- aws-serverless-express の example に記載の方法で CLIと CloudFormation からデプロイする方法もあるのだけど、既存のexpress アプリケーションをデプロイする方法を確立したかった
環境 💻
- Node.js v8.10.0
- express v4.16.0
- aws-serverless-express 3.2.0
参考リンク
個人開発者のためのaws-serverless-express #kyotojs - Speaker Deck
実行手順
express アプリケーションを作成
$ express aws-lambda-express $ cd aws-lambda-express $ yarn
ローカルサーバーを起動しアクセス
$ yarn start
yarn run v1.7.0 warning ../../../../../package.json: No license field $ node ./bin/www GET / 200 203.128 ms - 170 GET /stylesheets/style.css 200 3.461 ms - 111 GET /favicon.ico 404 11.657 ms - 1562 GET /favicon.ico 404 8.536 ms - 1562
Express が起動していればOK
aws-serverless-express のインストールと Express への統合
インストール
$ yarn add aws-serverless-express
Lambda の実行ファイルとして index.js を作成
const awsServerlessExpress = require('aws-serverless-express'); const app = require('./app'); const server = awsServerlessExpress.createServer(app); exports.handler = (event, context) => awsServerlessExpress.proxy(server, event, context);
app.js (Express) に以下の内容を追記
const serverlessExpress = require('aws-serverless-express/middleware'); var createError = require('http-errors'); var express = require('express'); [中略] var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); // middleware として追加 app.use(serverlessExpress.eventContext());
ローカルの設定は以上
AWS Lambda へのデプロイ
Express アプリケーションを Lambda にデプロイするために zip ファイルの作成
$ rm -rf aws.zip && zip -r aws.zip .
AWS Lambda のコンソールで Lambda 関数の作成
事前に IAM Role で Lambda を実行できるRoleを作成しておく
ロールを仕様するサービスは Lambda を選択
新規でLambda を作成
先ほど作成したzipファイルをアップロード
ソースコードを更新可能になる
基本設定のタイムアウトを3秒から1分以上にしておく(初回の実行でエラーになるため)
テストを実行してエラーにならずに ステータスコード 200 で HTMLが返却されているならOK
Lambda のトリガーとなる API Gateway の作成
API を新規作成
メソッドを追加
- 「アクション」ボタンをクリック
- 「メソッドの作成」を選択
- 以下の画像の通りに選択し作成
リソースを追加
- 「アクション」ボタンをクリック
- 「リソースの作成」を選択
- 以下の画像の通りに選択し作成
APIのデプロイ
- 「アクション」ボタンをクリック
- 「APIのデプロイ」を選択
- 新しいデプロイ用のステージを作成しAPIをデプロイ
- 呼び出し用のURLが作成される
アクセスし、画面が表示されれば作成完了