AWS nodejs
egoing edited this page Nov 30, 2020
·
16 revisions
- github.com 에 저장소를 만듭니다.
- 저정소명 : nodejs-aws
- 저장소는 Public으로 지정해주세요.
- github.com 에 아래와 같은 소스코드를 만듭니다.
index.html
<h1><a href="index.html">WEB</a></h1>
<ul>
<li><a href="html.html">html</a></li>
<li><a href="nodejs.html">nodejs</a></li>
<li><a href="mysql.html">mysql</a></li>
</ul>
<h2>Welcome</h2>
Hello WEB!!
html.html
<h1><a href="index.html">WEB</a></h1>
<ul>
<li><a href="html.html">html</a></li>
<li><a href="nodejs.html">nodejs</a></li>
<li><a href="mysql.html">mysql</a></li>
</ul>
<h2>html</h2>
HTML is hypertext markup language
-
EC2 인스턴스를 만듭니다.
-
git clone 저장소 주소
을 입력해서 저장소를 서버로 deploy합니다. -
sudo apt update
-
sudo apt install nodejs npm
-
sudo npm install --global local-web-server
-
sudo ws --port 80
-
동작하는 것을 확인한 후에 ws를 바로 꺼주세요. EC2 instance connect는 timeout 시간이 짧습니다. 타임아웃이 되면 기존에 동작하던 ws가 계속 동작하고 있기 때문에 port가 충돌되는 문제가 발생할 수 있습니다.
-
nodejs를 이용한 최소한의 구현을 해봅시다.
1.js
var http = require('http');
var app = http.createServer(function(request,response){
response.end(`
<h1><a href="index.html">WEB</a></h1>
<ul>
<li><a href="html.html">html</a></li>
<li><a href="nodejs.html">nodejs</a></li>
<li><a href="mysql.html">mysql</a></li>
</ul>
<h2>Welcome</h2>
Hello WEB!!
`);
});
app.listen(80);
-
sudo node 1.js
-
sudo npm install --global pm2
-
pm2를 이용해서 자동으로 소스코드가 watch 되는 것을 살펴봅니다. 또 pm2에 의해서 구동되던 인스턴스를 켜고 끄는 법을 익힙니다.
-
sudo pm2 start 1.js --watch
-
sudo pm2 status
-
sudo pm2 delete id
-
nodejs와 web server의 차이점을 느껴봅시다.
2.js
var http = require('http');
var app = http.createServer(function(request,response){
var content = Math.random();
response.end(`
<h1><a href="index.html">WEB</a></h1>
<ul>
<li><a href="html.html">html</a></li>
<li><a href="nodejs.html">nodejs</a></li>
<li><a href="mysql.html">mysql</a></li>
</ul>
<h2>Welcome</h2>
${content}
`);
});
app.listen(80);
-
sudo pm2 start 2.js --watch
-
rds를 생성합니다.
-
rds의 VPC security group에 EC2 security group를 등록해서 접속을 허용합니다.
-
sudo apt install mysql-client
-
mysql -uadmin -p -hHOST-NAME
-
데이터베이스 생성
CREATE DATABASE mydb;
-
데이터베이스 선택
use mydb;
-
테이블 생성
CREATE TABLE topic(id int NOT NULL AUTO_INCREMENT PRIMARY KEY, title char(20) NOT NULL, description TINYTEXT, thumbnail varchar(200) NULL);
-
데이터 입력
INSERT INTO topic (id,title,description) VALUES(1, 'S3', 'S3 is ..');
INSERT INTO topic (id,title,description) VALUES(2, 'EC2', 'EC2 is ..');
INSERT INTO topic (id,title,description) VALUES(3, 'CF', 'CF is ..');
- npm 패키지 설치
npm init
npm i mysql
- nodejs 모듈
- mysql을 nodejs로 제어하는 방법을 살펴봅시다.
3.js
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'database-1.cdbrt00yi2pz.ap-northeast-2.rds.amazonaws.com',
user: 'admin',
password: '11111111',
database: 'mydb'
});
connection.connect(function (err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
connection.query('select * from topic', function (error, results, fields) {
console.log('error=>', error);
console.log('results=>', results);
for(var i=0; i<results.length; i++){
console.log(i, results[i].title);
}
});
connection.end();
});
- web-mysql 앱을 만들어봅시다.
var mysql = require('mysql');
var http = require('http');
var url = require('url');
var connection = mysql.createConnection({
host: 'database-1.cdbrt00yi2pz.ap-northeast-2.rds.amazonaws.com',
user: 'admin',
password: '11111111',
database: 'mydb'
});
connection.connect(function (err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
var app = http.createServer(function (request, response) {
var _url = request.url;
var queryData = url.parse(_url, true).query;
var pathname = url.parse(_url, true).pathname;
connection.query('select * from topic', function (error, results, fields) {
var list = "";
for (var i = 0; i < results.length; i++) {
list += `<li><a href="?id=${results[i].id}">${results[i].title}</a></li>`;
}
var content = "";
if (queryData.id === undefined) {
content = "<h2>Welcome</h2>Hello WEB!";
response.end(`
<h1><a href="index.html">WEB</a></h1>
<ul>
${list}
</ul>
<h2>Welcome</h2>
Hello WEB!!
`);
} else {
connection.query(`SELECT * FROM topic WHERE id="${queryData.id}"`, function (error, results) {
console.log(results);
response.end(`
<h1><a href="index.html">WEB</a></h1>
<ul>
${list}
</ul>
<h2>${results[0].title}</h2>
${results[0].description}
`);
})
}
});
});
app.listen(80);
-
sudo crontab -e
에서 아래 내용을 추가@reboot sudo pm2 start /home/ubuntu/nodejs-aws/3.js
- 이미지 생성
- 이미지로 인스턴스 생성
- 재부팅 비활성화
- 이미지로 인스턴스 만들기
- 인스턴스를 만들 때 security group을 rds에서 허용한 것으로 지정