Server Side Rendering を Serverless Framework と Nuxt.js でやる Tutorial
Server Side Rendering を Serverless Framework と Nuxt.js でやる Tutorial:
必要なファイルとディレクトリを用意して起きます。
以下は Nuxt.js で使用します
create
起動する
なお、require して使う場合は以下のように実行します。Serverless Framework で動かす場合は require しますのでこのようにしています。
edit
edit
動作確認。以下の実行するとローカル環境で Lambda が実行できます。
動作させるだけなので、最小限の
edit
create
動作確認をします。
edit
開発する時は以下のように実行します。
この状態で
最後に deploy します。 以下のコマンドを実行して必要なファイルを生成します。
次に deploy するときにファイルの容量が増えないように工夫します。これはb
edit
それでは deploy してみましょう。
動作確認が終わったら以下のコマンドでお掃除します。
以上です。お疲れ様でした。
実を言うと serverless.yml の
色々ハマった点がありましが、とても参考になる記事を書いてくれていた人がいのたでなんとかゴールする事ができました。ありがとうございました。
https://mya-ake.com/posts/nuxtjs-on-aws-lambda/
対象読者
- Node.js で express を使った事がある。
- async, await 書ける。
-
sls deployしたことある -
nuxt buildしたことある
STEP0: 準備
必要なファイルとディレクトリを用意して起きます。sls create --template aws-nodejs --path tutorial-serverless-nuxt && cd $_ yarn init -y yarn add express serverless-http yarn add -D serverless-offline touch server.js
yarn add nuxt touch nuxt.config.js mkdir -p app/pages touch app/pages/index.vue
STEP1: Express Server を用意する
create server.jsconst express = require('express');
const app = express();
const port = process.env.PORT || 3000
app.get('/api/ping', (req, res) => {
res.json({ ping: 'pong' });
});
function listen() {
app.listen(port, '0.0.0.0')
console.log('Server listening on `localhost:' + port + '`.')
}
if (!module.parent) {
listen()
}
module.exports = app;
% node server.js Server listening on `localhost:3000`.
curl http://localhost:3000/api/ping で動作確認する。なお、require して使う場合は以下のように実行します。Serverless Framework で動かす場合は require しますのでこのようにしています。
% node -e "require('./server').listen(3000)"
用意した Express Server を Serverless Framework で使う
edit serverless.ymlservice: tutorial-serverless-nuxt
plugins:
- serverless-offline
provider:
name: aws
runtime: nodejs8.10
stage: dev
region: ap-northeast-1
functions:
server:
handler: handler.server
timeout: 30
events:
- http:
method: ANY
path: '/'
- http:
method: ANY
path: '{proxy+}'
handler.js'use strict';
const serverless = require('serverless-http');
const server = require('./server');
module.exports.server = serverless(server);
% sls offline
STEP2: 最小限の Nuxt.js を用意する
動作させるだけなので、最小限の nuxt.config.js と app/pages/index.vueを用意します。edit
nuxt.config.jsmodule.exports = {
head: {
titleTemplate: "%s - Nuxt.js"
},
srcDir: 'app'
}
app/pages/index.js<template>
<div>
<h1>Hello, Nuxt.js</h1>
</div>
</template>
% yarn run nuxt --port 3001
srcDir は参考にした記事によると deploy するときにアップロードするファイルを除外する為だそうです。素直に真似をしています。
STEP3: Nuxt.js を express の middleware として使う
edit server.jsconst { Nuxt, Builder } = require('nuxt')
const express = require('express');
const app = express();
const isProd = (process.env.NODE_ENV === 'production')
const port = process.env.PORT || 3000
const config = require('./nuxt.config.js')
config.dev = !isProd
const nuxt = new Nuxt(config)
app.get('/api/ping', (req, res) => {
res.json({ ping: 'pong' });
});
app.use(nuxt.render)
// Build only in dev mode with hot-reloading
if (config.dev) {
new Builder(nuxt).build()
.then(listen)
.catch((error) => {
console.error(error)
process.exit(1)
})
}
function listen() {
// Listen the server
app.listen(port, '0.0.0.0')
console.log('Server listening on `localhost:' + port + '`.')
}
module.exports = app;
% PORT=3002 node server.js
app/pages/index.vue を書き換えて hot-reloading が動作していることを確認してください。
STEP4: Lambda に deploy する
最後に deploy します。 以下のコマンドを実行して必要なファイルを生成します。% yarn nuxt build
edit
serverless.yml service: serverless-tutorial-one
plugins:
- serverless-offline
package:
excludeDevDependencies: true
exclude:
- .**
- .**/*
- app/**
- LICENSE
- README.md
- package.json
- yarn.lock
include:
- handler.js
- server.js
- nuxt.config.js
provider:
name: aws
runtime: nodejs8.10
stage: dev
region: ap-northeast-1
functions:
nuxt:
handler: handler.server
timeout: 30
environment:
NODE_ENV: production
events:
- http:
method: ANY
path: '/'
- http:
method: ANY
path: '{proxy+}'
sls offline だと上手く動かなかったので実際に deploy しています。% sls deploy
/api/ping は json が返ってきて、それ以外は Nuxt.js が画面を返していることを確認します。動作確認が終わったら以下のコマンドでお掃除します。
% sls remove
ちなみに
実を言うと serverless.yml の exclude と include の設定に関してはこれで合っているのかよく調べていません。その辺りは後日追記・修正するかもしれません。色々ハマった点がありましが、とても参考になる記事を書いてくれていた人がいのたでなんとかゴールする事ができました。ありがとうございました。
https://mya-ake.com/posts/nuxtjs-on-aws-lambda/
コメント
コメントを投稿