CodeDeploy
CodeDeploy๋?
CodeDeploy
๋ EC2, Lambda, On-Premise ๋ฑ ๋ค์ํ ์ปดํจํ
์๋น์ค์ ๋ํ ๋ฐฐํฌ๋ฅผ ์๋ํํ๋ ์์ ๊ด๋ฆฌํ ๋ฐฐํฌ ์๋น์ค
- AWS์์ ์์ ํ ๊ด๋ฆฌํด์ฃผ๋ ์๋น์ค์ด๊ธฐ ๋๋ฌธ์ ์ ์ํ๊ณ ์์ ํ๊ฒ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅ
- ๋ํ ๋ฐฐํฌ ๋ฐฉ์๋ ๋ค์ํ๊ฒ ๊ตฌ์ฑํ ์ ์๋๋ฐ ๋ฐฐํฌ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ ํ ๋ค์ด๋๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ์ต์ํ์ ๊ตฌ๋๋๊ณ ์์ด์ผ ํ ์ธ์คํด์ค ํผ์ผํธ๋ฅผ ์ ์ํ๋ค๊ฑฐ๋
Blue/Green Deployment
๋ฅผ ์ํํ๋ ๋ฑ์ ๊ณผ์ ์ผ๋ก ๊ฐ๋ ์ค์ง ์๊ฐ์ ์ต์ํํ ์ ์์
CodeDeploy
๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋จผ์ ์ธํ๋ผ๋ฅผ ํ๋ก๋น์ ๋ํด์ผ ํจ
Deployment
์์ ์ธํ๋ผ๋ฅผ ์๋์ผ๋ก ์์ฑํด์ฃผ์ง๋ ์๊ธฐ ๋๋ฌธ์ ์ด๋์ ์ด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํ ๊ฒ์ธ์ง, ์ด๋ค ํ๊ฒฝ์ ๋ฐฐํฌํ ๊ฒ์ธ์ง ๋ฑ์ ์ ํ์ฌ ๋ฏธ๋ฆฌ ์์ฑํด๋์ด์ผ ํจ
- ๊ทธ ํ ๋ฐฐํฌํ๊ณ ์ ํ๋ ํ๊ฒฝ์
CodeDeploy Agent
๋ฅผ ์ค์น
- ์ค์น๋
Agent
๊ฐ ์ง์์ ์ผ๋ก CodeDeploy
๋ฅผ ํด๋งํ๋ฉด์ ์๋ก ๋ฐฐํฌํด์ผ ํ ์ ๋ณด๋ค์ ๋ฐ์์ด
- ๊ทธ ํ ๋ฐฐํฌํ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๋์
appspec.yml
์ Github์ ํน์ S3์ ์
๋ก๋
- ์ฌ๊ธฐ๊น์ง
Deployment
๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ฌ์ ์ค์ ์ด ๋๋ฌ๋ค๋ฉด CodeDeploy Application
์ ์์ฑ
- ๋ฐฐํฌ๋ฅผ ์ํํ ๋ฐฐํฌ ๊ทธ๋ฃน์ ์ค์ ํ๊ณ ์์์ ํ๋ก๋น์ ๋ํ ์ธํ๋ผ๋ฅผ ์ง์
- ๋ฐฐํฌ ์์ฑ ํ
Deploy
๋ฅผ ์์ฑํ์ฌ ์ํํ๋ฉด ์ ์ํ appspec.yml
์ ๋ฐ๋ผ ๋์ํ๋ฉฐ ๋ฐฐํฌ
- ๋ฐฐํฌ ๊ทธ๋ฃน์ ์ค์ ํ๋ ๊ณผ์ ์์ ์์ฑํ ์ธ์คํด์ค๋ฅผ ํ๊ทธ ๋ฑ์ผ๋ก ๊ตฌ๋ถํ ์ ์์
- ์ฌ๊ธฐ์
CodeDeploy
์ ํฐ ์ฅ์ ์ด ๋ฑ์ฅ
- ์ธ์คํด์ค๋ง๋ค Test, Prod, Dev ๋ฑ ๋ค์ํ ํ๊ทธ๋ฅผ ์ค์ ํด๋์ ํ ๊ฐ ํ๊ทธ๋ณ๋ก ๋ฐฐํฌ ๊ทธ๋ฃน์ ์์ฑํ๋ฉด ๊ฐ ์ฉ๋์ ๋ง๋ ๋ฐฐํฌ ํ๊ฒฝ์ ์ค์ ํ ์ ์์
- ์ฆ, ์ธ์คํด์ค๋ฅผ ํ๊ทธ๋ก ๊ตฌ๋ถํ์ฌ ๊ทธ๋ฃน์ ์์ฑํ๊ณ ๊ฐ ๊ทธ๋ฃน์ ๋ง๋ ๋ฐฐํฌ ํ๊ฒฝ์ ๋ฐ๋ก ์ค์ ํ ์ ์์
- ์๋ฅผ ๋ค์ด Dev์ ๊ฒฝ์ฐ ๋น ๋ฅด๊ฒ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๊ฑฐ๋ ๋์ ํ์ธ์ ํ๊ธฐ ์ํด ๊ตฌ์ฑํ์์ผ๋ฏ๋ก ์ค์ ์ ํ๋ฆฌ์ผ์ด์
์ฌ์ฉ์์๊ฒ ์ํฅ์ ๋ฏธ์น์ง ์๊ธฐ ๋๋ฌธ์ ์ธ์คํด์ค๊ฐ ์ ์ ๋ชจ๋ ๋ค์ด๋์ด๋ ๊ด์ฐฎ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ธ์คํด์ค๋ฅผ ํ๋ฒ์ ๋ฐฐํฌํ๋
AllatOnce
๋ก ์ ํํ์ฌ ํ๋ฒ์ ์ํํ๋๋ก ์ค์
- ๋ฐ๋ฉด Prod์ ๊ฒฝ์ฐ ์ค์ ์ฌ์ฉ์์๊ฒ ์ ๊ณต๋๋ ๋ฐฐํฌ ํ๊ฒฝ์ผ๋ก, ๋๊น์์ด ์ง์๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ธ์คํด์ค๋ฅผ ํ๋์ฉ ๋ฐฐํฌํ์ฌ ์์ ์ ์ธ ์ํ๋ฅผ ์ ์งํ๋
OneatOnce
๋ก ์ ํ
- ์ด ์ธ์๋ ์ํ๋ ๋งํผ ์ธ์คํด์ค๋ฅผ ์ ์งํ๋๋ก ์ค์ ํ๋ ๋ฑ ๋ค๋ฅธ ํํ๋ก๋ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅ
CodeDeploy
์ญ์ CloudWatch
์ ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅ
Logs
์ ๊ฒฝ์ฐ ์ธ์คํด์ค์ CloudWatch Log Agent
๋ฅผ ์ถ๊ฐ๋ก ์ค์นํด์ผ ํ๋ฉฐ ๋ก๊ทธ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์
- ๋ฐฐํฌ๊ฐ ์คํจํ๊ฑฐ๋ ์ค์ ํ ์๋์ด ์ธ๋ฆฌ๋ ๊ฒฝ์ฐ
rollback
๊ธฐ๋ฅ๋ ์ง์
- ์๋ก ๋ฐฐํฌํ ์ธ์คํด์ค๊ฐ ์์ ์์ ์์ฒด๊ฐ ์๋๊ฑฐ๋ ๊ธ๊ฒฉํ ๋ฆฌ์์ค ์ฌ์ฉ๋์ด ๋ง์์ง๋ ๋ฑ ๋ฌธ์ ์ํฉ์ด ๋ฐ์ํ์ ์ ์์ ์ ์ธ ๋ฒ์ ์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์ ๋ฐฐํฌํ๊ธฐ ์ํด ๋กค๋ฐฑํจ
Tip! CodeDeploy์ ํน์ง
- AWS๋
CodeDeploy
๋ฅผ ํตํด CD
(Continous Delivery)๋ฅผ ์งํ
CodeDeploy
๋ Revision
(code, dependencies, packages ๋ฑ ํ์ํ ํ์ผ๋ค๊ณผ appspec.yml
)์ด ๋ก์ปฌ์์ S3 Bucket, Github ๋ฑ์ผ๋ก ์
๋ก๋ ๋ ๋ ์คํ๋์ด EC2 ์ธ์คํด์ค ๋๋ auto-scaling group
์ ๋ฐฐํฌ
appspec.yml
์ OS, files, permisson ๊ทธ๋ฆฌ๊ณ hooks์ ํฌํจํ๊ณ ์๋ ํ์ผ
appspec.yml
์ CodeDeploy Agent
์๊ฒ ๋ฐฐํฌ ๋๋ ์คํํด์ผํ๋ ํ์ผ๋ค์ ์์์ ๊ฒฝ๋ก๋ฅผ ์๋ ค์ฃผ๋๋ฐ, ์ด ๋ ๋ชจ๋ EC2 ์ธ์คํด์ค์๋ appspec.yml
ํ์ผ์ ์ฝ์ ์ ์๋ Agent
๊ฐ ์ค์น๋์ด ์์ด์ผํจ
CodeDeploy ์ปดํจํ
ํ๋ซํผ ๊ฐ์
CodeDeploy
๋ ์ธ ๊ฐ์ง ์ปดํจํ
ํ๋ซํผ์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํ ์ ์์
EC2/์จํ๋ ๋ฏธ์ค
- ๋ฌผ๋ฆฌ์ ์๋ฒ์ ์ธ์คํด์ค๋ฅผ ์ค๋ช
- Amazon EC2 ํด๋ผ์ฐ๋ ์ธ์คํด์ค๋ ์จํ๋ ๋ฏธ์ค ์๋ฒ ๋๋ ๋ ๋ค์ผ ์ ์์
- EC2/์จํ๋ ๋ฏธ์ค ์ปดํจํ
ํ๋ซํผ์ ์ฌ์ฉํ์ฌ ๋ง๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํ ํ์ผ๊ณผ ๊ตฌ์ฑ ํ์ผ, ์ด๋ฏธ์ง ๋ฐ ๊ธฐํ ํญ๋ชฉ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์
- EC2/์จํ๋ ๋ฏธ์ค ์ปดํจํ
ํ๋ซํผ์ ์ฌ์ฉํ๋ ๋ฐฐํฌ์์๋
์ธ ํ๋ ์ด์ค
๋๋ ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ์ ํ
์ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค๋ก ํธ๋ํฝ์ด ์ ์ก๋๋ ๋ฐฉ์์ ๊ด๋ฆฌ
AWS Lambda
- ์
๋ฐ์ดํธ ๋ฒ์ ์ Lambda ํจ์๋ก ๊ตฌ์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉ
- AWS Lambda๋ ๊ณ ๊ฐ์ฉ์ฑ ์ปดํจํ
๊ตฌ์กฐ์ ์๋ฒ๋ฆฌ์ค ์ปดํจํ
ํ๊ฒฝ์์ Lambda ํจ์๋ฅผ ๊ด๋ฆฌ
- ์ปดํจํ
๋ฆฌ์์ค์ ๋ํ ๋ชจ๋ ๊ด๋ฆฌ๋ AWS Lambda๋ฅผ ํตํด ์ํ
์นด๋๋ฆฌ(Canary)
, ์ ํ(Linear)
๋๋ ํ ๋ฒ์ ๋ชจ๋(All-at-once)
๊ตฌ์ฑ์ ์ ํํ์ฌ ์
๋ฐ์ดํธ๋ Lambda ํจ์ ๋ฒ์ ์ผ๋ก ํธ๋ํฝ์ ์ ์กํ๋ ๋ฐฉ์์ ๊ด๋ฆฌํ ์ ์์
Amazon ECS
- Amazon ECS ์ปจํ
์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์์
์ธํธ๋ก ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉ
CodeDeploy
๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์
๋ฐ์ดํธ ๋ฒ์ ์ ์๋ก์ด ๋์ฒด ์์
์ธํธ๋ก ์ค์นํ์ฌ ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ
๋ฅผ ์ํ
CodeDeploy
๋ ํ๋ก๋์
ํธ๋ํฝ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์
์์
์ธํธ์์ ๋์ฒด ์์
์ธํธ๋ก ๋ค์ ๋ผ์ฐํ
- ๋ฐฐํฌ๊ฐ ์ฑ๊ณตํ๋ฉด ๊ธฐ์กด ์์
์ธํธ๋ ์ข
๋ฃ
์นด๋๋ฆฌ(Canary)
, ์ ํ(Linear)
๋๋ ํ๋ฒ์ ๋ชจ๋(All-at-once)
๊ตฌ์ฑ์ ์ ํํ์ฌ ๋ฐฐํฌ ์ค ์
๋ฐ์ดํธ๋ ์์
์ธํธ๋ก ํธ๋ํฝ์ ์ ์กํ๋ ๋ฐฉ์์ ๊ด๋ฆฌํ ์ ์์
CodeDeploy ๋์ ๊ตฌ์กฐ
- โ ์์ค ์ฝ๋์
appspec.yml
์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ํธ์
- โก
deployment
๋ฅผ ํธ๋ฆฌ๊ฑฐ
- โข
CodeDeploy
๋ฅผ ํด๋ง ํ๊ณ ์๋ EC2 ์ธ์คํด์ค๋ ํธ๋ฆฌ๊ฑฐ๋ฅผ ํ์ธ
- โฃ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์์ค ์ฝ๋์
appspec.yml
์ ๋ฐ์์ deployment
๋ช
๋ น์ ์ํ
appspec.yml
version: 0.0
os: linux
files:
- source: Config/config.txt
destination: /webapps/Config
- source: source
destination: /webapps/myApp
hooks:
BeforeInstall:
- location: Scripts/UnzipResourceBundle.sh
- location: Scripts/UnzipDataBundle.sh
AfterInstall:
- location: Scripts/RunResourceTests.sh
timeout: 180
ApplicationStart:
- location: Scripts/RunFunctionalTests.sh
timeout: 3600
ValidateService:
- location: Scripts/MonitorService.sh
timeout: 3600
runas: codedeployuser
Deployment
๋ช
๋ น์ด์ ํด๋นํ๋ appspec.yml
ํ์ผ ํํ๋ ์์ ๊ฐ์
- ๋ฐฐํฌํ ์์ค ์ฝ๋์ ์์น์ ์๋ก ์ ์ฅ ํ ์์น๋ฅผ ์ง์ ํ ํ
hooks
์ ์ง์
hooks
์ ๋ฐฐํฌ ๊ณผ์ ๋จ๊ณ์์ ๊ฐ๊ฐ ์ํํด์ผ ํ ๋ช
๋ น์ด๋ค์ ์ ์ํ ๊ฒ
- ๋ณดํต ์ ์คํฌ๋ฆฝํธ๋ก ์ ์ํ๋ฉฐ ๋น์ฐํ ํด๋น ์คํฌ๋ฆฝํธ ํ์ผ๋ ํจ๊ป S3 ํน์ Github์ ์กด์ฌ ํด์ผํจ
- ๊ฐ๊ฐ์
hooks
๋จ๊ณ์์ ์ ์ํด์ผ ํ ๋์์ ์๋์ ๊ฐ์
BeforeInstall
- ๋์ฒด ์์
์ธํธ๊ฐ ์์ฑ๋๊ธฐ ์ ์ ์์
์ ์คํํ๋ ค๋ฉด ์ด ํญ๋ชฉ์ ์ฌ์ฉ
- ๋์ ๊ทธ๋ฃน ํ๋๊ฐ ์๋ ์์
์ธํธ์ ์ฐ๊ฒฐ
- ํ
์คํธ ๋ฆฌ์ค๋๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ ์๋ ์์
์ธํธ์ ์ฐ๊ฒฐ
- ์ด ์์ ์์๋ ๋กค๋ฐฑ์ด ๋ถ๊ฐ๋ฅ
AfterInstall
- ๋์ฒด ์์
์ธํธ๊ฐ ์์ฑ๋๊ณ ๋์ ๊ทธ๋ฃน ์ค ํ๋๊ฐ ์ฐ๊ฒฐ๋ ํ ์์
์ ์คํํ๋ฉด ์ด ํญ๋ชฉ์ ์ฌ์ฉ
- ํ
์คํธ ๋ฆฌ์ค๋๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ ์๋ ์์
์ธํธ์ ์ฐ๊ฒฐ
- ์ด ์๋ช
์ฃผ๊ธฐ ์ด๋ฒคํธ์์ ํํฌ ํจ์์ ๊ฒฐ๊ณผ๋ ๋กค๋ฐฑ์ ํธ๋ฆฌ๊ฑฐํ ์ ์์
AfterAllowTestTraffic
- ํ
์คํธ ๋ฆฌ์ค๋๊ฐ ๋์ฒด ์์
์ธํธ์ ํธ๋ํฝ์ ์ ๊ณตํ ํ ์์
์ ์คํํ๋ ค๋ฉด ์ด ํญ๋ชฉ์ ์ฌ์ฉ
- ์ด ์์ ์์ ํํฌ ํจ์์ ๊ฒฐ๊ณผ๋ ๋กค๋ฐฑ์ ํธ๋ฆฌ๊ฑฐํ ์ ์์
BeforeAllowTraffic
- ๋ ๋ฒ์งธ ๋์ ๊ทธ๋ฃน์ด ๋์ฒด ์์
์ธํธ์ ์ฐ๊ฒฐ๋ ํ ํธ๋ํฝ์ด ๋์ฒด ์์
์ธํธ๋ก ์ ํ๋๊ธฐ ์ ์ ์์
์ ์คํํ๋ ค๋ฉด ์ด ํญ๋ชฉ์ ์ฌ์ฉ
- ์ด ์๋ช
์ฃผ๊ธฐ ์ด๋ฒคํธ์์ ํํฌ ํจ์์ ๊ฒฐ๊ณผ๋ ๋กค๋ฐฑ์ ํธ๋ฆฌ๊ฑฐํ ์ ์์
AfterAllowTraffic
- ๋ ๋ฒ์งธ ๋์ ๊ทธ๋ฃน์ด ๋์ฒด ์์
์ธํธ์ ํธ๋ํฝ์ ์ ๊ณตํ ํ ์์
์ ์คํํ๋ ค๋ฉด ์ด ํญ๋ชฉ์ ์ฌ์ฉ
- ์ด ์๋ช
์ฃผ๊ธฐ ์ด๋ฒคํธ์์ ํํฌ ํจ์์ ๊ฒฐ๊ณผ๋ ๋กค๋ฐฑ์ ํธ๋ฆฌ๊ฑฐํ ์ ์์