NodejsはSAMを介してAWSラムダで表現する
19463 ワード
私はNodeJsが好きで、それが便利で、使いやすい軽さを表現します.私は最近、Pythonとフラスコを選択する傾向がありますが、私は個人的なプロジェクトで、仕事でこれを使用している.私がエクスプレスに関して好きであることは、私が私のフロントエンド(そして、SSR内容)とAPIを同じプロジェクトに主催することができるということです.私がPOCまたは小さなサイト/アプリケーションを構築しているならば、これは完全な感覚を作ります.
私がローカルのために研究室を建設していたので"AWS Programming and Tools" Meetup私はlocalstackとダイナモを使用して小さなデモを構築しました.適応を構築するチームScrumbler いくつかの問題があるので、私は急行の簡単な例をwhippedして、サムテンプレートに包まれて、AWSラムダに展開しました.
このセットは、単に私が使用している@vendia/serverless-express ラッパー/ラムダのプロキシとして.このように、私は局所的に熱い再装填で発展することができて、ラムダに変化なしで同じコードを押します.
2エントリポイントがあります. ローカル(app . local . js)
ラムダ.js
http://localhost:3000/fruitbox
どこで見るべき
ビューのコードを追加しましょう.この特定のビューのために、私はAPIとの相互作用を実証し、フルーツボックスに新しいフルーツアイテムを投稿し、インデックスを基にすべてのフルーツボックスと個々の項目を取得できるように小さなHTMLとJSアプリを構築した.
それどころか、そのファイルをペーストして、私は直接それにリンクします.Here
Expressはまた、側面に沿って@ Veldia/Serverless Expressモジュールは、ラムダから直接5 MBまでの静的資産の提供を許可します.生産環境では、私はS 3とCloudfrontにこれを無効にするが、これはローカル開発に非常に便利です.
以下は、この実行の短いクリップです.
SAM/AWS展開
完全なレポを見ることができますhere
私がローカルのために研究室を建設していたので"AWS Programming and Tools" Meetup私はlocalstackとダイナモを使用して小さなデモを構築しました.適応を構築するチームScrumbler いくつかの問題があるので、私は急行の簡単な例をwhippedして、サムテンプレートに包まれて、AWSラムダに展開しました.
このセットは、単に私が使用している@vendia/serverless-express ラッパー/ラムダのプロキシとして.このように、私は局所的に熱い再装填で発展することができて、ラムダに変化なしで同じコードを押します.
2エントリポイントがあります.
const app = require('./app')
const port = 3000
app.listen(port)
console.log(`listening on http://localhost:${port}`)
and const serverlessExpress = require('@vendia/serverless-express')
const app = require('./app');
exports.handler = serverlessExpress({ app })
そして、もちろん、アプリケーション自体.このアプリケーションはシンプルで小さく、1つのファイル(app . js)のすべてですconst express = require('express')
const app = express()
const router = express.Router()
const bodyParser = require('body-parser')
const cors = require('cors')
const path = require('path')
let FruitBox = [];
//Static content ie images
app.use('/static', express.static('static'))
router.use(cors())
router.use(bodyParser.json())
router.use(bodyParser.urlencoded({ extended: true }))
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
router.get('/', function(req, res) {
res.render('index', { fruitBox: FruitBox })
})
router.get('/index', function(req, res) {
res.render('index', { fruitBox: FruitBox })
})
router.get('/react', function(req, res) {
res.render('react')
})
router.get("/ping", async (req, res) => {
const result = { incomming : 'ping ', resonse : 'pong '}
res.send(JSON.stringify(result))
});
router.get("/fruitbox", async (req, res) => {
res.send(JSON.stringify(FruitBox))
});
router.get("/fruitbox/:item", async (req, res) => {
const item = parseInt(req.params.item)
res.send(JSON.stringify(FruitBox[item]))
});
router.post('/fruitbox', async (req, res) => {
let result
try{
const fruitName = req.body.fruitName;
const qty = req.body.qty;
const item = { fruit: fruitName, qty : qty}
FruitBox.push(item)
result = FruitBox
res.status(200)
}catch(e){
console.log(e)
result = { errorMessage : 'Ensure your POST body contains both a fruitName and a qty and content type is application/json '}
res.status(500);
}
res.send(result)
})
app.use('/', router)
module.exports = app;
パッケージ.JSON{
"name": "FruitBox",
"version": "1.0.0",
"description": "Express JS in AWS Lambda deployed to AWS Lambda via SAM",
"main": "app.js",
"repository": "https://github.com/kukielp/aws-sam-nodejs-express",
"author": "Paul Kukiel",
"license": "MIT",
"dependencies": {
"@vendia/serverless-express": "^4.3.2",
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"ejs": "^3.1.6",
"express": "^4.17.1"
},
"devDependencies": {
"nodemon": "^2.0.11",
"npm-watch": "^0.7.0"
},
"scripts": {
"dev": "nodemon app.local.js"
}
}
この時点で我々はNPMのインストールを実行し、アプリケーションを実行する必要がありますnpm install
npm run dev
アプリを起動する必要がありますnodemon変更(ホットリロード)を見ている.しかしながら、ビューをまだ定義していないので、ベースルート(/)はエラーとなります.APIを使用すると、次のように閲覧できます.http://localhost:3000/fruitbox
どこで見るべき
[]
はい空の配列.ビューのコードを追加しましょう.この特定のビューのために、私はAPIとの相互作用を実証し、フルーツボックスに新しいフルーツアイテムを投稿し、インデックスを基にすべてのフルーツボックスと個々の項目を取得できるように小さなHTMLとJSアプリを構築した.
それどころか、そのファイルをペーストして、私は直接それにリンクします.Here
Expressはまた、側面に沿って@ Veldia/Serverless Expressモジュールは、ラムダから直接5 MBまでの静的資産の提供を許可します.生産環境では、私はS 3とCloudfrontにこれを無効にするが、これはローカル開発に非常に便利です.
以下は、この実行の短いクリップです.
SAM/AWS展開
完全なレポを見ることができますhere
Reference
この問題について(NodejsはSAMを介してAWSラムダで表現する), 我々は、より多くの情報をここで見つけました https://dev.to/paul_k/nodejs-express-in-aws-lambda-via-sam-1a5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol