Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menyebarkan aplikasi Node.js Express ke Elastic Beanstalk
Prasyarat
Tutorial ini membutuhkan prasyarat berikut:
-
Runtime Node.js
-
Perangkat lunak pengelola paket Node.js default, npm
-
Generator baris perintah Express
-
Antarmuka Baris Perintah Elastic Beanstalk (EB) CLI
Untuk detail tentang menginstal tiga komponen pertama yang terdaftar dan menyiapkan lingkungan pengembangan lokal Anda, lihatMenyiapkan lingkungan pengembangan Node.js Anda untuk Elastic Beanstalk. Untuk tutorial ini, Anda tidak perlu menginstal AWS SDK untuk Node.js, yang juga disebutkan dalam topik yang direferensikan.
Untuk detail tentang menginstal dan mengonfigurasi EBCLI, lihat Pasang Antarmuka Baris Perintah Elastic Beanstalk dan. Mengonfigurasi EB CLI
Membuat lingkungan Elastic Beanstalk
Direktori aplikasi Anda
Tutorial ini menggunakan direktori yang disebut nodejs-example-express-rds
untuk bundel sumber aplikasi. Buat nodejs-example-express-rds
direktori untuk tutorial ini.
~$ mkdir nodejs-example-express-rds
catatan
Setiap tutorial dalam chapter ini menggunakan direktorinya sendiri untuk bundel sumber aplikasi. Nama direktori cocok dengan nama aplikasi sampel yang digunakan oleh tutorial.
Ubah direktori kerja Anda saat ini menjadinodejs-example-express-rds
.
~$ cd nodejs-example-express-rds
Sekarang, mari kita mengatur lingkungan Elastic Beanstalk yang menjalankan platform Node.js dan aplikasi sampel. Kita akan menggunakan antarmuka baris perintah Elastic Beanstalk (EB). CLI
Untuk mengonfigurasi CLI repositori EB untuk aplikasi Anda dan membuat lingkungan Elastic Beanstalk yang menjalankan platform Node.js
-
Buat repositori dengan perintah eb init.
~/nodejs-example-express-rds$
eb init --platform
node.js
--region<region>
Perintah ini membuat file konfigurasi dalam folder bernama
.elasticbeanstalk
yang menentukan pengaturan dalam membuat lingkungan untuk aplikasi Anda, dan membuat sebuah aplikasi Elastic Beanstalk yang diambil dari nama folder saat ini. -
Buat lingkungan yang menjalankan aplikasi sampel dengan perintah eb create.
~/nodejs-example-express-rds$
eb create --sample
nodejs-example-express-rds
Perintah ini membuat lingkungan yang seimbang beban dengan pengaturan default untuk platform Node.js dan sumber daya berikut:
-
EC2instance — Mesin virtual Amazon Elastic Compute Cloud (AmazonEC2) yang dikonfigurasi untuk menjalankan aplikasi web pada platform yang Anda pilih.
Setiap platform menjalankan satu set perangkat lunak, file konfigurasi dan penulisan tertentu untuk mendukung versi bahasa, kerangka kerja, kontainer web tertentu, atau kombinasi dari semua ini. Sebagian besar platform menggunakan Apache atau NGINX sebagai proxy terbalik yang berada di depan aplikasi web Anda, meneruskan permintaan ke sana, menyajikan aset statis, dan menghasilkan akses dan log kesalahan.
-
Grup keamanan instans — Grup EC2 keamanan Amazon yang dikonfigurasi untuk memungkinkan lalu lintas masuk pada port 80. Sumber daya ini memungkinkan HTTP lalu lintas dari penyeimbang beban mencapai EC2 instance yang menjalankan aplikasi web Anda. Secara default, lalu lintas tidak diizinkan di port lain.
-
Penyeimbang beban – Penyeimbang beban Elastic Load Balancing yang dikonfigurasi untuk mendistribusikan permintaan ke instans yang menjalankan aplikasi Anda. Penyeimbang beban juga menghilangkan kebutuhan untuk mengekspos instans Anda langsung ke internet.
-
Grup keamanan penyeimbang beban - Grup EC2 keamanan Amazon yang dikonfigurasi untuk memungkinkan lalu lintas masuk di port 80. Sumber daya ini memungkinkan HTTP lalu lintas dari internet mencapai penyeimbang beban. Secara default, lalu lintas tidak diizinkan di port lain.
-
Grup Auto Scaling – Grup Auto Scaling yang dikonfigurasi untuk menggantikan instans jika diakhiri atau menjadi tidak tersedia.
-
Bucket Amazon S3 – Lokasi penyimpanan untuk kode sumber, log, dan artifact lainnya yang dibuat saat Anda menggunakan Elastic Beanstalk.
-
CloudWatch Alarm Amazon — Dua CloudWatch alarm yang memantau beban pada instans di lingkungan Anda dan yang dipicu jika beban terlalu tinggi atau terlalu rendah. Saat alarm terpicu, grup Auto Scaling Anda akan menaikkan atau menurunkan skala sebagai respons.
-
AWS CloudFormation stack - Elastic AWS CloudFormation Beanstalk digunakan untuk meluncurkan sumber daya di lingkungan Anda dan menyebarkan perubahan konfigurasi. Sumber daya ditentukan di sebuah templat yang dapat Anda lihat di Konsol AWS CloudFormation
. -
Nama domain — Nama domain yang merutekan ke aplikasi web Anda dalam formulir
subdomain
.region
.elasticbeanstalk.com.Keamanan domain
Jika Anda perlu mengatur cookie sensitif di nama domain default untuk aplikasi Elastic Beanstalk Anda, kami sarankan Anda menggunakan cookie
__Host-
dengan awalan untuk meningkatkan keamanan. Praktik ini melindungi domain Anda dari upaya pemalsuan permintaan lintas situs (). CSRF Untuk informasi selengkapnya, lihat halaman Set-Cookiedi Jaringan Pengembang Mozilla.
-
-
Saat pembuatan lingkungan selesai, gunakan eb openperintah untuk membuka lingkungan URL di browser default.
~/nodejs-example-express-rds$
eb open
Anda sekarang telah membuat lingkungan Elastic Beanstalk Node.js dengan aplikasi sampel. Anda dapat memperbaruinya dengan aplikasi Anda sendiri. Selanjutnya, kami memperbarui aplikasi sampel untuk menggunakan kerangka kerja Express.
Perbarui aplikasi untuk menggunakan Express
Setelah Anda membuat lingkungan dengan aplikasi sampel, Anda dapat memperbaruinya dengan aplikasi Anda sendiri. Dalam prosedur ini, pertama-tama kita menjalankan npm install perintah express dan untuk mengatur kerangka kerja Express di direktori aplikasi Anda. Kemudian kami menggunakan EB CLI untuk memperbarui lingkungan Elastic Beanstalk Anda dengan aplikasi yang diperbarui.
Memperbarui aplikasi Anda untuk menggunakan Express
-
Jalankan perintah
express
. Perintah menghasilkanpackage.json
,app.js
, dan beberapa direktori.~/nodejs-example-express-rds$
express
Saat diminta, ketik
y
jika Anda ingin melanjutkan.catatan
Jika express perintah tidak berfungsi, Anda mungkin belum menginstal generator baris perintah Express seperti yang dijelaskan di bagian Prasyarat sebelumnya. Atau pengaturan jalur direktori untuk mesin lokal Anda mungkin perlu diatur untuk menjalankan express perintah. Lihat bagian Prasyarat untuk langkah-langkah rinci tentang pengaturan lingkungan pengembangan Anda, sehingga Anda dapat melanjutkan dengan tutorial ini.
-
Persiapkan dependensi lokal.
~/nodejs-example-express-rds$
npm install
-
(Opsional) Verifikasi server aplikasi web dimulai.
~/nodejs-example-express-rds$
npm start
Anda akan melihat output yang serupa dengan yang berikut:
> nodejs@0.0.0 start /home/local/user/node-express > node ./bin/www
Server berjalan pada port 3000 secara default. Untuk mengujinya, jalankan
curl http://localhost:3000
di terminal lain, atau buka browser di komputer lokal dan masukkan URL alamathttp://localhost:3000
.Tekan Ctrl+C untuk menghentikan server.
-
Terapkan perubahan ke lingkungan Elastic Beanstalk Anda dengan perintah. eb deploy
~/nodejs-example-express-rds$
eb deploy
-
Setelah lingkungan hijau dan siap, segarkan URL untuk memverifikasi itu berfungsi. Anda akan melihat halaman web yang bertuliskan Selamat Datang di Express.
Selanjutnya, mari kita perbarui aplikasi Express untuk menyajikan file statis dan menambahkan halaman baru.
Untuk mengonfigurasi file statis dan menambahkan halaman baru ke aplikasi Express
-
Tambahkan file konfigurasi kedua di .ebextensionsfolder dengan konten berikut:
nodejs-example-express-rds/.ebextensions/staticfiles.config
option_settings: aws:elasticbeanstalk:environment:proxy:staticfiles: /stylesheets: public/stylesheets
Pengaturan ini mengonfigurasi server proksi untuk menyajikan file di folder
public
pada jalur/public
aplikasi. Melayani file secara statis dari server proxy mengurangi beban pada aplikasi Anda. Untuk informasi selengkapnya, lihat File statis sebelumnya di Bab ini. -
(Opsional) Untuk mengonfirmasi bahwa pemetaan statis dikonfigurasi dengan benar, komentari konfigurasi pemetaan statis di.
nodejs-example-express-rds/app.js
Ini menghapus pemetaan dari aplikasi node.//
app.use(express.static(path.join(__dirname, 'public')));Pemetaan file statis dalam
staticfiles.config
file dari langkah sebelumnya harus tetap memuat stylesheet dengan sukses, bahkan setelah Anda mengomentari baris ini. Untuk memverifikasi bahwa pemetaan file statis dimuat melalui konfigurasi file statis proxy, bukan aplikasi ekspres, hapus nilai berikut.option_settings:
Setelah dihapus dari konfigurasi file statis dan aplikasi node, stylesheet akan gagal dimuat.Ingatlah untuk mengatur ulang isi dari kedua
nodejs-example-express-rds/app.js
danstaticfiles.config
ketika Anda selesai pengujian. -
Menambahkan
nodejs-example-express-rds/routes/hike.js
. Ketik berikut ini:exports.index = function(req, res) { res.render('hike', {title: 'My Hiking Log'}); }; exports.add_hike = function(req, res) { };
-
Perbarui
nodejs-example-express-rds/app.js
untuk menyertakan tiga baris baru.Pertama, tambahkan baris berikut untuk menambahkan
require
pada rute ini:var hike = require('./routes/hike');
File Anda akan terlihat mirip dengan snippet berikut:
var express = require('express'); var path = require('path');
var hike = require('./routes/hike');
Kemudian, tambahkan dua baris berikut ke
nodejs-example-express-rds/app.js
setelahvar app = express();
app.get('/hikes', hike.index); app.post('/add_hike', hike.add_hike);
File Anda akan terlihat mirip dengan snippet berikut:
var app = express();
app.get('/hikes', hike.index); app.post('/add_hike', hike.add_hike);
-
Salin
nodejs-example-express-rds/views/index.jade
kenodejs-example-express-rds/views/hike.jade
.~/nodejs-example-express-rds$
cp views/
index.jade views/hike.jade
-
Terapkan perubahan dengan eb deployperintah.
~/nodejs-example-express-rds$
eb deploy
-
Lingkungan Anda akan diperbarui setelah beberapa menit. Setelah lingkungan Anda berwarna hijau dan siap, verifikasi itu berfungsi dengan menyegarkan browser Anda dan menambahkan
hikes
di akhir URL (mis.,http://node-express-env-syypntcz2q.elasticbeanstalk.com/hikes
).Anda akan melihat halaman web berjudul Log Hiking Saya.
Anda sekarang telah membuat aplikasi web yang menggunakan kerangka kerja Express. Di bagian berikutnya, kita akan memodifikasi aplikasi untuk menggunakan Amazon Relational Database Service RDS () untuk menyimpan log hiking.
Perbarui aplikasi untuk menggunakan Amazon RDS
Pada langkah selanjutnya ini kami memperbarui aplikasi untuk menggunakan Amazon RDS for MySQL.
Untuk memperbarui aplikasi Anda untuk digunakan RDS untuk My SQL
-
Untuk membuat SQL database RDS for My yang digabungkan ke lingkungan Elastic Beanstalk Anda, ikuti petunjuk dalam topik Menambahkan database yang disertakan nanti dalam chapter ini. Menambahkan instance database membutuhkan waktu sekitar 10 menit.
-
Perbarui bagian dependensi di
package.json
dengan konten berikut:"dependencies": { "async": "^3.2.4", "express": "4.18.2", "jade": "1.11.0", "mysql": "2.18.1", "node-uuid": "^1.4.8", "body-parser": "^1.20.1", "method-override": "^3.0.0", "morgan": "^1.10.0", "errorhandler": "^1.5.1" }
-
Jalankan npm install.
~/nodejs-example-express-rds$
npm install
-
Perbarui
app.js
untuk terhubung ke database, membuat tabel, dan menyisipkan log hiking default tunggal. Setiap kali aplikasi ini digunakan, aplikasi ini akan menjatuhkan tabel kenaikan sebelumnya dan membuatnya kembali./** * Module dependencies. */ const express = require('express') , routes = require('./routes') , hike = require('./routes/hike') , http = require('http') , path = require('path') , mysql = require('mysql') , async = require('async') , bodyParser = require('body-parser') , methodOverride = require('method-override') , morgan = require('morgan') , errorhandler = require('errorhandler'); const { connect } = require('http2'); const app = express() app.set('views', __dirname + '/views') app.set('view engine', 'jade') app.use(methodOverride()) app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended: true })) app.use(express.static(path.join(__dirname, 'public'))) app.set('connection', mysql.createConnection({ host: process.env.RDS_HOSTNAME, user: process.env.RDS_USERNAME, password: process.env.RDS_PASSWORD, port: process.env.RDS_PORT})); function init() { app.get('/', routes.index); app.get('/hikes', hike.index); app.post('/add_hike', hike.add_hike); } const client = app.get('connection'); async.series([ function connect(callback) { client.connect(callback); console.log('Connected!'); }, function clear(callback) { client.query('DROP DATABASE IF EXISTS mynode_db', callback); }, function create_db(callback) { client.query('CREATE DATABASE mynode_db', callback); }, function use_db(callback) { client.query('USE mynode_db', callback); }, function create_table(callback) { client.query('CREATE TABLE HIKES (' + 'ID VARCHAR(40), ' + 'HIKE_DATE DATE, ' + 'NAME VARCHAR(40), ' + 'DISTANCE VARCHAR(40), ' + 'LOCATION VARCHAR(40), ' + 'WEATHER VARCHAR(40), ' + 'PRIMARY KEY(ID))', callback); }, function insert_default(callback) { const hike = {HIKE_DATE: new Date(), NAME: 'Hazard Stevens', LOCATION: 'Mt Rainier', DISTANCE: '4,027m vertical', WEATHER:'Bad', ID: '12345'}; client.query('INSERT INTO HIKES set ?', hike, callback); } ], function (err, results) { if (err) { console.log('Exception initializing database.'); throw err; } else { console.log('Database initialization complete.'); init(); } }); module.exports = app
-
Tambahkan konten berikut ke
routes/hike.js
. Ini akan memungkinkan rute untuk memasukkan log hiking baru ke dalam HIKESdatabase.const uuid = require('node-uuid'); exports.index = function(req, res) { res.app.get('connection').query( 'SELECT * FROM HIKES', function(err, rows) { if (err) { res.send(err); } else { console.log(JSON.stringify(rows)); res.render('hike', {title: 'My Hiking Log', hikes: rows}); }}); }; exports.add_hike = function(req, res){ const input = req.body.hike; const hike = { HIKE_DATE: new Date(), ID: uuid.v4(), NAME: input.NAME, LOCATION: input.LOCATION, DISTANCE: input.DISTANCE, WEATHER: input.WEATHER}; console.log('Request to log hike:' + JSON.stringify(hike)); req.app.get('connection').query('INSERT INTO HIKES set ?', hike, function(err) { if (err) { res.send(err); } else { res.redirect('/hikes'); } }); };
-
Ganti konten
routes/index.js
dengan yang berikut ini:/* * GET home page. */ exports.index = function(req, res){ res.render('index', { title: 'Express' }); };
-
Tambahkan template giok berikut
views/hike.jade
untuk menyediakan antarmuka pengguna untuk menambahkan log hiking.extends layout block content h1= title p Welcome to #{title} form(action="/add_hike", method="post") table(border="1") tr td Your Name td input(name="hike[NAME]", type="textbox") tr td Location td input(name="hike[LOCATION]", type="textbox") tr td Distance td input(name="hike[DISTANCE]", type="textbox") tr td Weather td input(name="hike[WEATHER]", type="radio", value="Good") | Good input(name="hike[WEATHER]", type="radio", value="Bad") | Bad input(name="hike[WEATHER]", type="radio", value="Seattle", checked) | Seattle tr td(colspan="2") input(type="submit", value="Record Hike") div h3 Hikes table(border="1") tr td Date td Name td Location td Distance td Weather each hike in hikes tr td #{hike.HIKE_DATE.toDateString()} td #{hike.NAME} td #{hike.LOCATION} td #{hike.DISTANCE} td #{hike.WEATHER}
-
Terapkan perubahan dengan eb deployperintah.
~/nodejs-example-express-rds$
eb deploy
Bersihkan
Jika Anda selesai bekerja dengan Elastic Beanstalk, Anda dapat menghentikan lingkungan Anda.
Gunakan perintah eb terminate untuk mengakhiri lingkungan Anda dan semua sumber daya yang dimuatnya.
~/nodejs-example-express-rds$ eb terminate
The environment "nodejs-example-express-rds-env" and all associated instances will be terminated.
To confirm, type the environment name: nodejs-example-express-rds-env
INFO: terminateEnvironment is starting.
...