[CI/CD] AWS CodeDeploy, CodePipeline ์œผ๋กœ node.js, ec2, git ๋ฐฐํฌ ์ž๋™ํ™”ํ•˜๊ธฐ

2021. 12. 16. 17:09ยทDEV/Node.js

๐Ÿ‘๐Ÿป  ๋“ค์–ด๊ฐ€๋ฉฐ

์˜ค๋žœ๋งŒ์— ํฌ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค. ํ•™๊ต + ํšŒ์‚ฌ + ๋™์•„๋ฆฌ๋กœ ๋„ˆ๋ฌด ๋ฐ”์œ ๋‚˜๋จธ์ง€... 

์˜ค๋Š˜์€ AWS Codedeploy, Codepipeline ์„ ํ†ตํ•œ node.js, ec2, git ์„ ์—ฐ๋™ํ•ด ๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค CI/CD๋Š” ์ž˜ ๋ชจ๋ฅด๊ธฐ๋„ ํ•˜๊ณ , ํ•ด๋ณธ ์ ๋„ ์—†๋Š”๋ฐ ๊ทธ๋ƒฅ ํšŒ์‚ฌ์—์„œ ์„œ๋ฒ„๋ฅผ ๋งŒ์ง€๋‹ค ๋„ˆ๋ฌด ๋น„ํšจ์œจ์ ์ธ ์‹œ์Šคํ…œ์ธ ๊ฒƒ ๊ฐ™์•„ ๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ์‹œ์ผœ์•ผ๊ฒ ๋‹ค๊ณ  ๋งˆ์Œ ๋จน์—ˆ์Šต๋‹ˆ๋‹ค. 

๋งˆ์นจ ์„œ๋ฒ„ ์ปด ๋ฌธ์ œ๋กœ ์ธํ•ด ๊ธฐ์กด ์„œ๋ฒ„๋“ค์„ ec2๋กœ ์˜ฎ๊ฒจ์•ผ ํ•ด์„œ ์˜ฎ๊ธด ๊น€์— codedeploy, codepipeline์„ ์ ์šฉํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์ฉŒ๋ฆฌ๊ฐ€ ์ด๋Ÿฐ๊ฑธ ๋ง˜๋Œ€๋กœ ํšŒ์‚ฌ ์„œ๋ฒ„์— ๋“ค์˜€๋ƒ๊ณ ์š”? ์†Œ๊ทœ๋ชจ ์Šคํƒ€ํŠธ์—…์ด๋ผ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ €๋ฐ–์— ์—†๊ฑฐ๋“ ์š”~ 

DevOps ์ฑ…์„ ๋ฐ›๊ฒŒ ๋˜์–ด์„œ (ucpc ์ƒํ’ˆ์ด์—ˆ๋‚˜ .. ?) ๋ฐฉํ•™๋™์•ˆ ์ด๊ฑธ ์ข€ ์ฝ์–ด๋ณด๋ฉฐ CI/CD ๊ณต๋ถ€๋ฅผ ์ข€ ํ•ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ณผ์ •์ด ๊ฝค ๊ธธ๊ณ  ์–ด๋ ค์›Œ์„œ ์ด ํฌ์ŠคํŒ…์„ ํ†ตํ•ด ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

โœ”๏ธ CI, CD๋ž€?

์•„์ง ์ €๋„ ์™„๋ฒฝํžˆ๋Š” ๋ชจ๋ฅด์ง€๋งŒ redhat์ด ๊น”๋”ํ•˜๊ฒŒ ์•Œ๋ ค์ฃผ๋”๋ผ๊ณ ์š”.

CI/CD๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋‹จ๊ณ„๋ฅผ ์ž๋™ํ™”ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณด๋‹ค ์งง์€ ์ฃผ๊ธฐ๋กœ ๊ณ ๊ฐ์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. CI/CD์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์€ ์ง€์†์ ์ธ ํ†ตํ•ฉ, ์ง€์†์ ์ธ ์„œ๋น„์Šค ์ œ๊ณต, ์ง€์†์ ์ธ ๋ฐฐํฌ์ž…๋‹ˆ๋‹ค. CI/CD๋Š” ์ƒˆ๋กœ์šด ์ฝ”๋“œ ํ†ตํ•ฉ์œผ๋กœ ์ธํ•ด ๊ฐœ๋ฐœ ๋ฐ ์šด์˜ํŒ€์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ(์ผ๋ช… "์ธํ…Œ๊ทธ๋ ˆ์ด์…˜ ํ—ฌ(integration hell)")์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.
ํŠนํžˆ, CI/CD๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ†ตํ•ฉ ๋ฐ ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„์—์„œ๋ถ€ํ„ฐ ์ œ๊ณต ๋ฐ ๋ฐฐํฌ์— ์ด๋ฅด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ์ „์ฒด์— ๊ฑธ์ณ ์ง€์†์ ์ธ ์ž๋™ํ™”์™€ ์ง€์†์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์ถ• ์‚ฌ๋ก€๋ฅผ ์ผ๋ฐ˜์ ์œผ๋กœ "CI/CD ํŒŒ์ดํ”„๋ผ์ธ"์ด๋ผ ๋ถ€๋ฅด๋ฉฐ ๊ฐœ๋ฐœ ๋ฐ ์šด์˜ํŒ€์˜ ์• ์ž์ผ ๋ฐฉ์‹ ํ˜‘๋ ฅ์„ ํ†ตํ•ด ์ง€์›๋ฉ๋‹ˆ๋‹ค.
https://www.redhat.com/ko/topics/devops/what-is-ci-cd

redhat์—์„œ ํ›”์ณ์™”์Šต๋‹ˆ๋‹ค. ํ•œ๋ฒˆ ์ฝ์–ด๋ณด์‹œ๋Š” ๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

CI (Continuous Integration), CD (Continuous Delivery, Continuous Deployment) 

์ง€์†์ ์ธ ์ œ๊ณต์ด๋ž€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ์šฉํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฒ„๊ทธ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ(์˜ˆ: GitHub ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ)์— ์ž๋™์œผ๋กœ ์—…๋กœ๋“œ๋˜๋Š” ๊ฒƒ์„ ๋œปํ•˜๋ฉฐ, ์šด์˜ํŒ€์€ ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹ค์‹œ๊ฐ„ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœํŒ€๊ณผ ๋น„์ฆˆ๋‹ˆ์ŠคํŒ€ ๊ฐ„์˜ ๊ฐ€์‹œ์„ฑ๊ณผ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋ถ€์กฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์ค๋‹ˆ๋‹ค. ์ง€์†์ ์ธ ์ œ๊ณต์€ ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ์œผ๋กœ ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
์ง€์†์ ์ธ ๋ฐฐํฌ(๋˜ ๋‹ค๋ฅธ ์˜๋ฏธ์˜ "CD": Continuous Deployment)๋ž€ ๊ฐœ๋ฐœ์ž์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๊ณ ๊ฐ์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋ฆด๋ฆฌ์Šคํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ œ๊ณต ์†๋„๋ฅผ ์ €ํ•ดํ•˜๋Š” ์ˆ˜๋™ ํ”„๋กœ์„ธ์Šค๋กœ ์ธํ•œ ์šด์˜ํŒ€์˜ ํ”„๋กœ์„ธ์Šค ๊ณผ๋ถ€ํ•˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ง€์†์ ์ธ ๋ฐฐํฌ๋Š” ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ž๋™ํ™”ํ•จ์œผ๋กœ์จ ์ง€์†์ ์ธ ์ œ๊ณต์ด ๊ฐ€์ง„ ์žฅ์ ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ˜”  ๊ธฐ์กด ๋ฐฉ์‹์˜ ๋ฌธ์ œ์ 

๊ธฐ์กด node.js, ec2, github ์„ ํ†ตํ•ด ์„œ๋ฒ„ ๋ฐฐํฌ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

local ๊ฐœ๋ฐœ -> github push (PR, merge ๋“ฑ์˜ ์ž‘์—… ๊ฑฐ์ณ์„œ) -> ec2 ์—์„œ pull -> build or run -> deploy ์™„๋ฃŒ

๋งค๋ฒˆ ๊ฐœ๋ฐœ ํ›„ ์ง์ ‘ ec2 ์ ‘์†ํ•ด์„œ pull ๋ฐ›๊ณ  build, run ํ•ด์ฃผ๋Š” ๋น„ํšจ์œจ์„ ์ค„์ด๊ณ ์ž ์šฐ๋ฆฌ๋Š” AWS์—์„œ ์ œ๊ณตํ•˜๋Š”CodeDeploy, CodePipeline ์„ ํ†ตํ•ด github repository์—์„œ ์ž‘์—…ํ•œ code๊ฐ€ ๋ฐ”๋กœ ec2์—์„œ deploy ๋˜๋„๋ก ๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ์ง„ํ–‰ํ• ๊ฒ๋‹ˆ๋‹ค.

์‚ฌ์‹ค์€ codebuild ๊นŒ์ง€ ์‚ฌ์šฉํ•ด์„œ ๋นŒ๋“œ ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ์ž‘์—…๋„ ํ•ด์•ผํ•˜์ง€๋งŒ ์ „ ์ฒ˜์Œ์ด๋‹ˆ๊นŒ ์ผ๋‹จ CodeDeploy์™€ CodePipeline ๋งŒ ์ ์šฉํ•˜์—ฌ ๋ฐฐํฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“  ์‚ฌ์ „ - ec2 ์— nvm, npm, yarn, git, node ์„ค์น˜

์ฒ˜์Œ ec2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ ‘์†ํ•˜๋ฉด ๋‹น์—ฐํžˆ ๊นจ๋—ํ•œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. (์ €๋Š” ubuntu 18.04 LTS ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค)

์—ฌ๊ธฐ์— node js ์„œ๋ฒ„๋ฅผ ๋Œ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ์ž‘์—…ํ•ด๋ด…์‹œ๋‹ค.

ssh ๋กœ ubuntu ์— ์ ‘์† ํ•ฉ๋‹ˆ๋‹ค.

$ sudo apt-get install curl
$ curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
$ sudo apt-get install -y nodejs
$ sudo apt-get install build-essential

curl ๋ช…๋ น์–ด์—์„œ setup_16.x -> node 16 ๋ฒ„์ „์„ ๋ฐ›๊ณ  ์‹ถ๋‹จ ๋œป์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋‹ค๋ฅธ ๋ฒ„์ „ ์›ํ•˜์‹œ๋ฉด ์ˆซ์ž๋ฅผ ๋ฐ”๊พธ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

nvm ๊ณผ yarn๋„ ์„ค์น˜ํ•ฉ์‹œ๋‹ค. 

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
$ export NVM_DIR="$HOME/.nvm"
$ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" 
$ [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
$ nvm install --lts
$ npm install -g yarn

git ์„ค์น˜ํ•ฉ์‹œ๋‹ค.

$ sudo apt-get update
$ sudo apt-get install git

version ์ด ์ œ๋Œ€๋กœ ๋‚˜์˜ค๋ฉด ์™„๋ฃŒ

๐Ÿ“Œ  EC2 IAM ์ƒ์„ฑ

AWS IAM ์— ๋“ค์–ด๊ฐ€ ์—ญํ• ์„ ๋ˆ„๋ฅด๊ณ , ์—ญํ•  ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ AWS ์„œ๋น„์Šค ์™€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋กœ๋Š” EC2๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ๊ณ  ๋‹ค์Œ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

์ •์ฑ… ํ•„ํ„ฐ ๊ฒ€์ƒ‰์ฐฝ์—์„œ

- AWSCodeDeployFullAccess

- AWSCodeDeployRole

- CloudWatchLogsFullAccess

- AmazonS3FullAccess

๋ฅผ ๊ฒ€์ƒ‰ํ•ด ์ฒดํฌํ•ด์ฃผ๊ณ  ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.

ํƒœ๊ทธ์— ์—ญํ•  ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

์—ญํ•  ์ด๋ฆ„๊ณผ ์„ค๋ช…์„ ์ ์–ด์ฃผ๊ณ  ์—ญํ•  ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

ec2 ๋Œ€์‹œ๋ณด๋“œ๋กœ ๋„˜์–ด์™€ ์‚ฌ์šฉํ•  ์ธ์Šคํ„ด์Šค์—์„œ ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ -> ๋ณด์•ˆ -> IAM ์—ญํ•  ์ˆ˜์ •์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

IAM ์—ญํ• ์—์„œ ๋ฐฉ๊ธˆ ๋งŒ๋“  IAM์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ  CodeDeploy IAM ์ƒ์„ฑ

ec2์— ์—ญํ• ์„ ์ ์šฉํ–ˆ์œผ๋‹ˆ CodeDeploy์—๋„ ์—ญํ• ์„ ์ ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € AWS IAM -> ์—ญํ• ๋กœ ๋‹ค์‹œ ์ด๋™ํ•ด ์—ญํ•  ๋งŒ๋“ค๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

์ด๋ฒˆ์—๋Š” ์ผ๋ฐ˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ CodeDeploy๋ฅผ ๋ˆ„๋ฅด๊ณ  ํ•˜๋‹จ์— ๋œจ๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€ ์„ ํƒ์—์„œ ๋˜‘๊ฐ™์ด CodeDeploy๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

default๋กœ ์ •์ฑ…์ด ๋œน๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.

ํ‚ค-๊ฐ’์„ ์ž…๋ ฅํ•ด์ฃผ๊ณ  ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.

์—ญํ•  ์ด๋ฆ„๊ณผ ์„ค๋ช…์„ ์ ์–ด์ฃผ๊ณ  ์—ญํ•  ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ  CodeDeploy ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ

AWS ๋ฉ”๋‰ด์—์„œ CodeDeploy๋ฅผ ๊ฒ€์ƒ‰ํ•ด ๋“ค์–ด๊ฐ„ ํ›„ ์ขŒ ๋ฉ”๋‰ด์— ์žˆ๋Š” ๋ฐฐํฌ -> ์‹œ์ž‘ํ•˜๊ธฐ -> ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„์„ ์ž‘์„ฑํ•˜๊ณ , ์ปดํ“จํŒ… ํ”Œ๋žซํผ์„ EC2/์˜จํ”„๋ ˆ๋ฏธ์Šค๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

๐Ÿ“Œ  CodeDeploy ์‚ฌ์šฉ์ž ์ถ”๊ฐ€

CodeDeploy ์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋ฅผ EC2 ์™€ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•ด CodeDeploy Agent๋ฅผ ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•ด๋‹น CodeDeploy ๋ฅผ ์‚ฌ์šฉํ•  group์„ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

IAM ์—์„œ ์‚ฌ์šฉ์ž ์ถ”๊ฐ€๊ฐ€ ํ•„์š”ํ•˜๋‹ˆ IAM์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์•ก์„ธ์Šค ๊ด€๋ฆฌ -> ๊ทธ๋ฃน์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฃน ์ƒ์„ฑ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

๊ทธ๋ฃน ์ด๋ฆ„๋งŒ ์ง€์ •ํ•˜๊ณ  ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ •์ฑ…์€ ์ธ๋ผ์ธ ์ •์ฑ…์œผ๋กœ ์ถ”๊ฐ€ํ•ด์ค„๊ฒ๋‹ˆ๋‹ค.

์ดํ›„ ์ƒ์„ฑ๋œ ๊ทธ๋ฃน์œผ๋กœ ๋“ค์–ด๊ฐ€ ํ•˜๋‹จ์— ๊ถŒํ•œ -> ๊ถŒํ•œ ์ถ”๊ฐ€ -> ์ธ๋ผ์ธ ์ •์ฑ… ์ƒ์„ฑ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

json์„ ๋ˆ„๋ฅด๊ณ  ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•ฉ๋‹ˆ๋‹ค.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "autoscaling:*",
                "codedeploy:*",
                "ec2:*",
                "lambda:*",
                "elasticloadbalancing:*",
                "s3:*",
                "cloudwatch:*",
                "logs:*",
                "sns:*"
            ],
            "Resource": "*"
        }
    ]
}

์ด๋ฆ„์„ ์ง€์ •ํ•˜๊ณ  ์ •์ฑ… ์ƒ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๊ถŒํ•œ ์ •์ฑ…์ด ๋ฐฉ๊ธˆ ์ƒ์„ฑํ•œ ๊ฒƒ์œผ๋กœ ์ œ๋Œ€๋กœ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด์ œ ํ•ด๋‹น ๊ทธ๋ฃน์— ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋ฅผ ๋จผ์ € ๋งŒ๋“ค์–ด์ค์‹œ๋‹ค.

IAM ์ขŒ์ธก ๋ฉ”๋‰ด์—์„œ ์‚ฌ์šฉ์ž -> ์‚ฌ์šฉ์ž ์ถ”๊ฐ€ ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์ง€์ •ํ•˜๊ณ , ์•ก์„ธ์Šค ์œ ํ˜•์—์„œ ์•ก์„ธ์Šค ํ‚ค - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹ ์•ก์„ธ์Šค ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€๋ฉด ์‚ฌ์šฉ์ž ์ถ”๊ฐ€๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ๋งŒ๋“ค์–ด๋‘” ๊ทธ๋ฃน์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.

๊ฒ€ํ†  ์™„๋ฃŒ ํ›„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•ก์„ธ์Šค ํ‚ค๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค. csv๋ฅผ ๋‹ค์šด๋ฐ›์์‹œ๋‹ค. ์ด ํŒŒ์ผ์€ ์—ฌ๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ๋” ์ด์ƒ ๋ณผ ์ˆ˜ ์—†์œผ๋‹ˆ ๊ผญ ๋‹ค์šด ๋ฐ›์•„์ค๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€ ์˜ค์‹œ๋ฉด CodeDeploy ์‚ฌ์šฉ์ž ์ƒ์„ฑ๊นŒ์ง€ ์™„๋ฃŒํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ  CodeDeploy Agent ์„ค์น˜

๋จผ์ € awscli ์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

$ sudo apt install awscli

์•„๊นŒ ๋‹ค์šด๋ฐ›์€ ์‚ฌ์šฉ์ž csv ํŒŒ์ผ์—์„œ ์•ก์„ธ์Šค ํ‚ค ์•„์ด๋””์™€ ์‹œํฌ๋ฆฟ ์•ก์„ธ์Šค ํ‚ค๋ฅผ ๋ณด๊ณ  aws configure๋ฅผ ์„ค์ •ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$ sudo aws configure
AWS Access Key ID : ๋‹ค์šด ๋ฐ›์€ csv ํŒŒ์ผ ๋‚ด์— Access Key ID
AWS Secret Access KEy : ๋‹ค์šด ๋ฐ›์€ csv ํŒŒ์ผ ๋‚ด์— Secret Access Key
Default region name : ap-northeast-2
Default output format : json

agent ์„ค์น˜ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ํ•˜๊ณ  install ํŒŒ์ผ์— ๊ถŒํ•œ์„ ์ถ”๊ฐ€ํ•ฉ์‹œ๋‹ค.

$ wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install
$ chmod +x ./install

ruby๋ฅผ ๋จผ์ € ์„ค์น˜ํ•˜๊ณ , agent๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

$ sudo apt-get install ruby
$ sudo ./install auto
$ sudo service codedeploy-agent status # ์„ค์น˜ ํ™•์ธ

๋งˆ์ง€๋ง‰ ๋ช…๋ น์–ด๋กœ status๋ฅผ ํ™•์ธํ•˜๊ณ  active๊ฐ€ ๋œฌ๋‹ค๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ๋ถ€ํŒ… ์‹œ codedeploy-agent๊ฐ€ ์ž๋™ ์‹œ์ž‘ ๋˜๋„๋ก shell script๋ฅผ ์ž‘์„ฑํ•ฉ์‹œ๋‹ค.

$ sudo vim /etc/init.d/codedeploy-startup.sh

i๋กœ ํŽธ์ง‘๋ชจ๋“œ ์ง„์ž… 

#!/bin
sudo service codedeploy-agent restart

esc -> :wq ์ €์žฅ ํ›„ ๋‚˜๊ฐ€๊ธฐ

์ž‘์„ฑํ•œ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์— ์‹คํ–‰ ๊ถŒํ•œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

$ sudo chmod +x /etc/init.d/codedeploy-startup.sh

๐Ÿ“Œ  ๋ฐฐํฌํ•  ์„œ๋ฒ„ ์„ค์ •

์šฐ๋ฆฌ๊ฐ€ ๋ฐฐํฌํ•  ์„œ๋ฒ„ ๋‚ด์— (๋ฃจํŠธ๊ฒฝ๋กœ) appspec.yml ํŒŒ์ผ์„ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. appspec.yml ํŒŒ์ผ์€ CodeDeploy๊ฐ€ ๋ฐฐํฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์–‘ ํŒŒ์ผ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

version: 0.0
os: linux
files:
  - source:  /
    destination: /home/ubuntu/build/

CodeDeploy๊ฐ€ ๋ฐฐํฌํ•  ์œ„์น˜๊ฐ€ /home/ubuntu/build/ ๊ฒฝ๋กœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ดํ›„๋กœ ubuntu ๋‚ด๋ถ€์— /home/ubuntu/build ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

$ mkdir /home/ubuntu/build

์šฐ๋ฆฌ๊ฐ€ ๋ฐฐํฌํ•  ํ”„๋กœ์ ํŠธ๋ฅผ ์šฐ๋ถ„ํˆฌ๋กœ cloneํ•ด ์˜ต์‹œ๋‹ค.

$ git clone https://github.com/githubid/repository-name

์ถ”๊ฐ€๋กœ ๊นƒํ—™ id, password (token)์„ ๋งค๋ฒˆ ์น˜๊ธฐ ๊ท€์ฐฎ์œผ๋‹ˆ๊นŒ ๋””์Šคํฌ์— ์ €์žฅํ•ด๋‘๋ฉด ๋‚˜์ค‘์— pull ๋ฐ›์„ ๋•Œ ๋˜ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

$ cd repository-name
$ git config --global credential.helper store

๋ณธ์ธ์ด ํด๋ก ๋ฐ›์€ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ ํ›„ ์ € ๋ช…๋ น์–ด๋ฅผ ์น˜๊ณ  ๋‚˜์„œ ํ•œ๋ฒˆ ๋” pull ๋ฐ›์œผ๋ฉด ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ์ €์žฅ๋œ ๊ธฐ๋ก์œผ๋กœ ๋ฐ”๋กœ ๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ  CodeDeploy ๋ฐฐํฌ ์ƒ์„ฑ

์ •๋ง ๊ธธ๊ณ  ์–ด๋ ต์ฃ .. ์กฐ๊ธˆ๋งŒ ๋”ํ•˜๋ฉด ๋๋‚˜๋‹ˆ๊นŒ ํž˜๋‚ด์„ธ์š”. (To. ME..)

์ด์ œ EC2 ์™€ CodeDeploy๋ฅผ ์—ฐ๊ฒฐํ•ด์ค์‹œ๋‹ค.

AWS ์—์„œ CodeDeploy ๋กœ ์ด๋™ํ•œ ํ›„ ์•„๊นŒ ๋งŒ๋“ค์–ด๋‘” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ ๊ทธ๋ฃน ์ƒ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ ๊ทธ๋ฃน ์ด๋ฆ„ ์ž…๋ ฅ ํ›„, ์„œ๋น„์Šค ์—ญํ• ์€ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘” role ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๊ตฌ์„ฑ์—์„œ Amazon EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์„ ํƒํ•˜๊ณ  ์ ์šฉํ•  ec2 ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์„ค์ •๊นŒ์ง€ ๋งˆ์น˜๊ณ  ๋ฐฐํฌ ๊ทธ๋ฃน ์ƒ์„ฑ์„ ๋ˆŒ๋Ÿฌ ์™„๋ฃŒํ•ฉ์‹œ๋‹ค.

์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— ์ฃผํ™ฉ์ƒ‰ ๋ฐฐํฌ ์ƒ์„ฑ์„ ๋ˆŒ๋Ÿฌ์ค์‹œ๋‹ค.

์šฐ๋ฆฌ๋Š” github์— ์ €์žฅํ• ๊ฑฐ๋‹ˆ ์„ ํƒํ•ด์ฃผ๊ณ , github token ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด์ค€ ๋‹ค์Œ github์— ์—ฐ๊ฒฐ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

repository์—์„œ ๋ฐฐํฌํ•  commit์„ ๋ˆŒ๋Ÿฌ Id๋ฅผ ํ™•์ธํ•ด์ฃผ๊ณ  ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๋ฐฐํฌ ๋™์ž‘ ์„ค์ •์—์„œ ๋ฐฐํฌ ์‹คํŒจ๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

์™„๋ฃŒ ํ›„ ๋ฐฐํฌ ๋งŒ๋“ค๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด

์„ฑ๊ณต์ด ๋œจ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ubuntu ํ„ฐ๋ฏธ๋„์—์„œ build ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ํ™•์ธํ•ด๋ณด์‹œ๋ฉด 

์ •์ƒ์ ์œผ๋กœ ํ•ด๋‹น ์ปค๋ฐ‹ ๋‚ด์šฉ์ด ๋“ค์–ด์™€ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ  CodePipeline ์„ ํ†ตํ•œ ๋ฐฐํฌ ์ž๋™ํ™”

CodeDeploy๋งŒ ๊ฐ€์ง€๊ณ ๋Š” ์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ •์‚ฌํ•ญ์„ ๋ฐ”๋กœ ๋ฐฐํฌํ•ด์ฃผ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ CodePipeline์„ ํ†ตํ•ด ๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ํ•ด์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค.

AWS CodePipeline ๋ฉ”๋‰ด์— ๋“ค์–ด๊ฐ€์„œ ํŒŒ์ดํ”„๋ผ์ธ ์ƒ์„ฑ์„ ๋ˆŒ๋Ÿฌ์ค์‹œ๋‹ค.

pipeline ์ด๋ฆ„์„ ์„ค์ •ํ•ด์ฃผ๊ณ  ๋‹ค์Œ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

์†Œ์Šค ๊ณต๊ธ‰์ž๋ฅผ github(๋ฒ„์ „ 2)๋กœ ์„ ํƒํ•˜๊ณ  Github์— ์—ฐ๊ฒฐ์„ ๋ˆŒ๋Ÿฌ ๋‚˜์˜ github๊ณผ ์—ฐ๊ฒฐํ•ด์ค๋‹ˆ๋‹ค.

์ค‘๊ฐ„์— ์ด๋Ÿฐ ๋ถ€๋ถ„์ด ๋‚˜์˜จ๋‹ค๋ฉด ์ƒˆ ์•ฑ ์„ค์น˜๋ฅผ ๋ˆ„๋ฅด๊ณ  ํ•ด๋‹น ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์„ ํƒํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

๋นŒ๋“œ ์Šคํ…Œ์ด์ง€๋Š” ๊ฑด๋„ˆ๋›ฐ๊ณ  (์ „ ์ฉŒ๋ฆฌ๋ผ ์•„์ง CodeBuild๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ๋‚˜์ค‘์— ์ถ”๊ฐ€ํ•ด๋ณผ๊ฒŒ์š”)

๋ฐฐํฌ ์Šคํ…Œ์ด์ง€๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ ๊ณต๊ธ‰์ž๋ฅผ AWS CodeDeploy๋กœ ์„ ํƒํ•˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด๋‘” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐฐํฌ ๊ทธ๋ฃน์„ ์„ ํƒํ•ด์ค๋‹ˆ๋‹ค.

์–ด๋ผ๋ผ ? ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋‹ˆ group-role ์ •์ฑ…์— codestar-connections: UseConnection ์„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•œ๋‹ต๋‹ˆ๋‹ค.

์•„๊นŒ ๋งŒ๋“  IAM -> ์‚ฌ์šฉ์ž ๊ทธ๋ฃน -> name-deploy-pipe-group-role์— ๊ฐ€์…”์„œ ์ธ๋ผ์ธ ์ •์ฑ…์„ ํŽธ์ง‘ํ•ด์ค๋‹ˆ๋‹ค. 

์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค~!

๐Ÿ“Œ  PM2 

์ด์ œ CodeDeploy์™€ CodePipeline์„ ํ†ตํ•ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ฝ”๋“œ ์ˆ˜์ •์‹œ ์ž๋™์œผ๋กœ ec2์— ๋ฐ˜์˜์ด ๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์„œ๋ฒ„๋Š” ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ •๋  ์‹œ ์žฌ์‹œ์ž‘์ด ํ•„์š”ํ•˜๋ฏ€๋กœ pm2๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์ฝ”๋“œ ์ˆ˜์ •์ด ์ผ์–ด๋‚  ์‹œ ์ž๋™์œผ๋กœ ์„œ๋ฒ„ ์žฌ์‹œ์ž‘์ด ๋˜๋„๋ก ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

$ sudo npm install pm2 -g

๊ฐ„๋‹จํžˆ Pm2๋ฅผ ์ „์—ญ์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์•„์ง CodeBuild๋ฅผ ํ†ตํ•ด build ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋„๋ก ์„ค์ •ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋‹จ์€ ecosystem.json file์„ ๋งŒ๋“ค์–ด pm2๊ฐ€ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ์— ecosystem.json ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

(๋กœ์ปฌ์—์„œ ์ž‘์—…ํ•˜๊ณ  repository์— ์˜ฌ๋ฆฌ์„ธ์š”!)

{
    "apps": [
        {
            "name": "project-name",
            "script": "./node_modules/.bin/ts-node",
            "args": "./src/index.ts",
            "watch": true
        }
    ]
}

pm2 ๊ฐ€ ์ด ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ฌ ๊ฒ๋‹ˆ๋‹ค. 

pm2์— --watch ์˜ต์…˜์„ ์ฃผ๋ฉด ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ •๋˜๋ฉด ์ž๋™์œผ๋กœ ์„œ๋ฒ„ ์žฌ์‹œ์ž‘์„ ํ•ด์ค๋‹ˆ๋‹ค.

์ถ”๊ฐ€๋กœ ecosystem.json ์„ ์˜ฌ๋ฆฐ ์ปค๋ฐ‹์„ main์— merge ํ•˜์ž ์ž๋™์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

build ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ํ™•์ธํ•ด๋ณด์‹œ๋ฉด ecosystem์ด ์ž๋™์œผ๋กœ ๋“ค์–ด์™€ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ build ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์—์„œ Pm2 ๋กœ ecosystem.json์„ ์‹คํ–‰์‹œ์ผœ ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

$ pm2 start ecosystem.json

์š”๋Ÿฐ ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚˜์‹ ๋‹ค๋ฉด 

์•„์ฐจ์ฐป yarn์„ ํ•œ๋ฒˆ ์‹คํ–‰ํ•ด์„œ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋ฐ›์•„ node_modules ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ online ์ƒํƒœ๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค.

์ด์ œ repository์— ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ •๋˜๋ฉด ์ž๋™์œผ๋กœ ec2์— ๋ฐ˜์˜๋˜๊ณ , pm2๊ฐ€ ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•ด์ค๋‹ˆ๋‹ค.

โค๏ธ‍๐Ÿ”ฅ  ์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ

https://ookm1020.tistory.com/5?category=858485 

 

GitHub๊ณผ Node.js Express๋ฅผ ์ด์šฉํ•œ ์ž๋™๋ฐฐํฌ ํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ(feat. AWS-EC2, AWS CodeDeploy, AWS CodePipeline) 2ํŽธ - ๊นŒ

2ํŽธ์—์„œ๋Š” AWS EC2์— CodeDeploy๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. https://aws.amazon.com/ko/ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค | ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ์†”๋ฃจ์…˜| Amazon Web Services ์ œ์กฐ AWS๋ฅผ ํ™œ์šฉํ•œ Siemens์˜ ์—..

ookm1020.tistory.com

์š” ๋ธ”๋กœ๊ทธ ์ •๋ง ๋งŽ์ด ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘๐Ÿป

๐Ÿ‘๐Ÿป  ๋งˆ์น˜๋ฉฐ 

์—„์ฒญ ๊ธด ํฌ์ŠคํŒ…์ด๋ผ ํž˜๋“œ๋„ค์š”.

์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜์‹œ๋А๋ผ ๊ณ ์ƒ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. 

aws์™€ ๊ฐœ๋ฐœ์˜ ์„ธ๊ณ„๋Š” ๋ฉ€๊ณ ๋„ ํ—˜ํ•˜๋„ค์š” ๐Ÿ™ƒ

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'DEV > Node.js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

node.js, express, typescript ๋กœ S3์— image upload ํ•˜๊ธฐ (Feat. multer, aws-sdk)  (1) 2022.06.11
Node.js, MongoDB Change Streams ๋ฅผ ์‚ฌ์šฉํ•œ ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ ํŠน์ • ์‹œ๊ฐ„์— FCM ๋ณด๋‚ด๊ธฐ  (5) 2022.01.21
[Node.js] Express, TypeScript, MongoDB ํšŒ์›๊ฐ€์ž… (1)  (3) 2021.06.18
Node.js , express, mongoDB, typescript ์ดˆ๊ธฐ ์„ค์ •  (0) 2021.05.26
Node.js + Koa + Typescript ๋กœ ์Šฌ๋ž™ ๋ด‡ ๊ฐœ๋ฐœํ•ด๋ณด๊ธฐ (1)  (0) 2021.04.19
'DEV/Node.js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • node.js, express, typescript ๋กœ S3์— image upload ํ•˜๊ธฐ (Feat. multer, aws-sdk)
  • Node.js, MongoDB Change Streams ๋ฅผ ์‚ฌ์šฉํ•œ ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ ํŠน์ • ์‹œ๊ฐ„์— FCM ๋ณด๋‚ด๊ธฐ
  • [Node.js] Express, TypeScript, MongoDB ํšŒ์›๊ฐ€์ž… (1)
  • Node.js , express, mongoDB, typescript ์ดˆ๊ธฐ ์„ค์ •
jobchae
jobchae
๋งํ•˜๋Š” ๊ฐ์ž์ง€๋งŒ, ์ฝ”๋“œ๋ฅผ ๋„์ ์ด๋Š” Node.js ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.
  • jobchae
    JOBCHAE
    jobchae
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿš€ JOBCHAE (182)
      • DEV (151)
        • PS (108)
        • Node.js (12)
        • React (3)
        • docker (1)
        • ์žก๋‹คํ•œ ๊ฐœ๋ฐœ ์ผ์ง€ (21)
        • injection (1)
        • JS, TS (3)
        • DB (2)
      • ์ถ•๊ตฌ (0)
      • ์ผ์ƒ (19)
      • ์˜ํ™” (3)
      • ์Œ์•… (8)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๐Ÿ’ป Github
    • ๐Ÿ™‹๐Ÿป Linkedin
    • ๐Ÿ“– ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • PS Github
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    typescript
    mongoDB
    GitHub
    ์Šฌ๋ž™
    BFS
    ์†ํŠธ
    ๋ฐฑ์ค€
    boj
    PS
    ๋ฆฌ์•กํŠธ
    ๋ ›์ธ ๋ฝํŽ˜์Šคํ‹ฐ๋ฒŒ
    ์ด๋ถ„ํƒ์ƒ‰
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ํšŒ๊ณ 
    node.js
    nodejs
    ๊ฐœ๋ฐœ
    ์ผ์ƒ
    react
    Express
    ์œ„์ƒ์ •๋ ฌ
    Nest.js
    JavaScript
    SOPT
    ์•ฑ์žผ
    ์Šฌ๋ž™๋ด‡
    DP
    ์šฐ์„ ์ˆœ์œ„ํ
    db
    DFS
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.5
jobchae
[CI/CD] AWS CodeDeploy, CodePipeline ์œผ๋กœ node.js, ec2, git ๋ฐฐํฌ ์ž๋™ํ™”ํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”