GCP30 :: CloudSQL 데이터베이스에서 select 조회하는 Application 배포는Cloud RUN
ㅡ. 개요
CloudSQL에 데이터를 node.js서버에서 간단하게 불러오는 rest api application을 만들고 이를 Cloud Run을 이용해 배포하는 과정
ㅡ. 시작
프로젝트를 생성합니다.
ㅡ. Cloud SQL 생성
cloud SQL 생성시 공개 IP 주소로 접근하였습니다.
Terminal 환경에서 접속으로 Local에서 CloudSQL이 접근가능한지 확인하였습니다.
ㅡ. Mysql Workbench 실행
워크벤치에서 Connection을 생성하고 데이터베이스, 테이블 생성 후 데이터를 insert 하였습니다.
ㅡ. node.js 와 mysql 연동
2020/08/25 - [Node.js] - node.js restful api 서버 만들기 (with bigQuery)
이전에 Express를 활용해 Node.js로 rest api를 생성하는 과정을 확인할 수 있었습니다.
이상태에서
npm install -S mysql
mysql 설치
var mysql = require('mysql');
var connection = mysql.createConnection({
host : '35.238.205.2',
user : 'root',
password : '',
database : 'fancy'
})
connection.connect();
mysql 접속하기 위한 connection을 생성합니다. .
var gogoRouter = require('./routes/gogo');
app.use('/gogo', gogoRouter);
ㅡ. app.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var gogoRouter = require('./routes/gogo');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/neotek', neotekRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
ㅡ. gogo.js
var express = require('express');
var router = express.Router();
var mysql = require('mysql');
const query = async(res)=>{
var connection = mysql.createConnection({
host : '[cloud-sql-ip]',
user : 'root',
password : '',
database : 'fancy'
})
connection.connect();
let k=0;
await connection.query('SELECT * FROM products', function(error, results, fields){
if(error){
console.log(error);
}
k = results;
console.log(results);
res.send(k);
})
}
/* GET users listing. */
router.get('/as', async function(req, res, next) {
await query(res);
});
module.exports = router;
ㅡ. Postman 실행결과
ㅡ. CloudRun
ㅡ. Dockerfile생성
# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim
# Create and change to the app directory.
WORKDIR /usr/src/app
# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./
# Install production dependencies.
RUN npm install --only=production
# Copy local code to the container image.
COPY . ./
# Run the web service on container startup.
CMD [ "npm", "start" ]
ㅡ. dockerignore
Dockerfile
README.md
node_modules
npm-debug.log
불필요한것들은 제외시켜줍니다.
ㅡ. 1Step
gcloud builds submit --tag gcr.io/PROJECT-ID/helloworld
ㅡ. 2Step
gcloud run deploy --image gcr.io/PROJECT-ID/helloworld --platform managed
ㅡ. 배포된 상태에서 URL만 변경시 결과 화면
'GCP' 카테고리의 다른 글
GCP32 :: VM 인스턴스에 대한 액세스 관리 (0) | 2020.09.03 |
---|---|
GCP31 :: Gsuit 정리 - 디지털 컨퍼런스를 들으면서... (0) | 2020.09.01 |
GCP29 :: Cloud-Run 으로 빌드 및 배포 (0) | 2020.09.01 |
GCP28 :: Google Cloud Certification 시작 (0) | 2020.08.31 |
GCP27 :: Compute Engine, 이론 (0) | 2020.08.31 |
댓글
이 글 공유하기
다른 글
-
GCP32 :: VM 인스턴스에 대한 액세스 관리
GCP32 :: VM 인스턴스에 대한 액세스 관리
2020.09.03 -
GCP31 :: Gsuit 정리 - 디지털 컨퍼런스를 들으면서...
GCP31 :: Gsuit 정리 - 디지털 컨퍼런스를 들으면서...
2020.09.01 -
GCP29 :: Cloud-Run 으로 빌드 및 배포
GCP29 :: Cloud-Run 으로 빌드 및 배포
2020.09.01 -
GCP28 :: Google Cloud Certification 시작
GCP28 :: Google Cloud Certification 시작
2020.08.31