[TIL] ๋ฐฐํฌ ์๋ํ
๐๐ป ๋ฐฐํฌ ์๋ํ : Automated Deployment
- ํ ๋ฒ์ ํด๋ฆญ ํน์ ๋ช ๋ น์ด ์ ๋ ฅ์ ํตํด ์ ์ฒด ๋ฐฐํฌ ๊ณผ์ ์ ์๋์ผ๋ก ์งํํ๋ ๊ฒ
๐ก ๋ฐฐํฌ ์๋ํ๊ฐ ํ์ํ ์ด์ ?
- ์๋์ ์ด๊ณ ๋ฐ๋ณต์ ์ธ ๋ฐฐํฌ ๊ณผ์ ์ ์๋ํํจ์ผ๋ก์จ ์๊ฐ์ด ์ ์ฝ๋จ
- ํด๋จผ ์๋ฌ๋ฅผ ๋ฐฉ์งํ ์ ์์ (ํด๋จผ ์๋ฌ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ๋ฎ์ถ ์ ์์)
* ํด๋จผ ์๋ฌ : Human Error
- ์ฌ๋์ด ์๋์ ์ผ๋ก ๋ฐฐํฌํ๋ ๊ณผ์ ์์ ์๊ธฐ๋ ์ค์
- ๊ทธ ์ ์ ๋ฐฐํฌ์ ๋ค๋ฅด๊ฒ ์งํํ๊ฑฐ๋ ํน์ ๊ณผ์ ์ ์๋ตํ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒ
๐ ํ์ดํ ๋ผ์ธ : Pipeline
๐ AWS ๊ฐ๋ฐ์ ๋๊ตฌ
* AWS์๋ ๊ฐ๋ฐ์ ๋๊ตฌ ์ธ์ ์ด ์กด์ฌ → ์ด๋ฅผ ํ์ฉํ์ฌ ๋ฐฐํฌ ์๋ํ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ ๊ฐ๋ฅ
โ CodeCommit
- Source ๋จ๊ณ๋ฅผ ๊ตฌ์ฑํ ๋ CodeCommit ์๋น์ค๋ฅผ ์ด์ฉํจ
- GitHub๊ณผ ์ ์ฌํ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋ฒ์ ๊ด๋ฆฌ ๋๊ตฌ
- Github๊ณผ ๋น๊ตํ์ ๋ CodeCommit์ ๋ณด์์์์ ๊ฐ์ ์ ๊ฐ์ง
( but ๊ณผ๊ธ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํด์ผ ํจ )
โก CodeBuild
- Build ๋จ๊ณ์์๋ CodeBuild์๋น์ค ์ด์ฉ
- ์ ๋ ํ ์คํธ, ์ปดํ์ผ, ๋น๋์ ๊ฐ์ Build ๋น๋ ๋จ๊ณ์ ํ์ ์คํ ์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด ์คํ ๊ฐ๋ฅ
โข CodeDeploy
- Deploy ๋จ๊ณ๋ฅผ ๊ตฌ์ฑํ ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ํ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์์
- ์คํ๋๊ณ ์๋ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์๊ฐ์ผ๋ก ๋ณ๊ฒฝ์ฌํญ์ ์ ๋ฌํ ์ ์์
- S3 ์๋น์ค, S3 ๋ฒํท์ ํตํด ์ ๋ก๋ ๋ ์ ์ ์น ์ฌ์ดํธ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ค์๊ฐ์ผ๋ก ์ ๋ฌํ๊ณ ๋ฐ์ ๊ฐ๋ฅ
โฃ CodePipeline
- ๊ฐ ๋จ๊ณ๋ฅผ ์ฐ๊ฒฐํ๋ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ ๋ ์ด ์๋น์ค ์ด์ฉ
๐ AWS Pipeline์ ํตํ ๋ฐฐํฌ ์๋ํ
๐ธ EC2 ์ธ์คํด์ค์ ํ๊ทธ๋ฅผ ์ถ๊ฐํ๋ ์ด์
: ํ์ดํ๋ผ์ธ ๊ตฌ์ถ ๋จ๊ณ์์ ์ธ์คํด์ค๋ฅผ ์ ์๋ณํ๊ธฐ ์ํด
[์์
] - [์ธ์คํด์ค ์ค์ ] - [ํ๊ทธ๊ด๋ฆฌ] - [ํ๊ทธ์ถ๊ฐ] - ํ๊ทธ์ด๋ฆ ์์ ๋กญ๊ฒ ์ค์ - [์ ์ฅ]
๐ธ EC2 ์ธ์คํด์ค์ ์ญํ ๋ถ์ฌ (IAM ์๋น์ค์ด์ฉ)
: IAM ์ญํ ์ AWS์ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ์๋น์ค์ ์ ๊ทผํ ์ ์๋๋ก ํด์ฃผ๋ ๋ฐฉ๋ฒ
→ EC2 ์ธ์คํด์ค์ ์ญํ ์ ๋ถ์ฌํจ์ผ๋ก์จ ๋ค๋ฅธ AWS ์๋น์ค๋ฅผ ํธ์ถํ ์ ์๋ ๊ถํ์ ๊ฐ์ง
* ์ญํ ์์ฑ *
์ธ์คํด์ค ์ ํ - [์์
] - [๋ณด์] - [IAM ์ญํ ์์ ] - [์ IAM ์ญํ ์์ฑ] - [์ญํ ๋ง๋ค๊ธฐ] - [AWS์๋น์ค] - [EC2] - [๋ค์: ๊ถํ]
- [ S3๊ฒ์ - AmazonS3FullAccess ์ ํ ]
- [ EC2Role ๊ฒ์ - AmazonEC2RoleforAWSCodeDeploy ์ ํ ]
- [ CodeDeploy ๊ฒ์ - AWSCodeDeployRole ์ ํ ]
- [ SSM ๊ฒ์ - AmazonSSMFullAccess ์ ํ ]
- [๋ค์: ํ๊ทธ] - ํค์ Name์, ๊ฐ์ EC2forCodeDeploy๋ฅผ ์
๋ ฅ - [๋ค์: ๊ฒํ ] - ์ญํ ์ด๋ฆ ์
๋ ฅ ํ - [์ญํ ๋ง๋ค๊ธฐ]
* ์ญํ ๋ถ์ฌ *
์์ฑํ ์ญํ ํด๋ฆญ - [์ ๋ขฐ๊ด๊ณ] - [์ ๋ขฐ๊ด๊ณ ํธ์ง]
- Service ๊ฐ์ ์ ๋ขฐ ์ฌ์ดํธ ๋ฑ์ ๋๊ดํธ๋ก ์ถ๊ฐํด์ค - [์ ๋ขฐ ์ ์ฑ
์
๋ฐ์ดํธ]
- [์์
] - [๋ณด์] - [IAM ์ญํ ์์ ] - IAM ์ญํ ์ ํ - [์ ์ฅ]
๐ก ์ ๋ขฐ๊ด๊ณ
: ํด๋น ์ญํ ์ ์ทจํ ์ ์๋ ์๋น์ค๋ ์ฌ์ฉ์๋ฅผ ๋ช
์ํ๋ ๋ถ๋ถ
๐๐ป EC2๋ S3, CodeDeploy์ ์ ๊ทผํ ์ ์์
* ๋ณด์ ๊ทธ๋ฃน ํ์ธ *
EC2 ๋์๋ณด๋ - [๋ณด์ ๊ทธ๋ฃน] - [๋ณด์ ํญ] - [๋ณด์ ๊ทธ๋ฃน]
- ์ธ๋ฐ์ด๋ ๊ท์น์ 8080๊ณผ 443 ํฌํธ๊ฐ ํฌํจ๋์ด ์๋์ง ํ์ธ - [์ธ๋ฐ์ด๋ ๊ท์น ํธ์ง]
- TCP : 8080 : ์ด๋์๋ / HTTPS : 443 : ์ด๋์๋ - [๊ท์น ์ ์ฅ]
๐ก 8080 ํฌํธ
: ์๋ฒ ๋ฐฐํฌ๋ฅผ ์ํด ํ์
๐ก 443 ํฌํธ
: CodeDeploy-Agent์ ์ ์์ ์ธ ์๋์ ์ํด ํ์
๐น ํ์ดํ ๋ผ์ธ ๊ตฌ์ถ
- ๋ถ์ฌ๋ฐ์ IAM User ๊ถํ๊ณผ ๋ฆฌ์์ค๋ฅผ ํ์ฉํ์ฌ ํ์ดํ ๋ผ์ธ ๊ตฌ์ถ
* EC2 ์ธ์คํด์ค ์ญํ (IAM Role) ํ์ธ *
- ์ธ์คํด์ค ์ด๋ฆ : be-pair-63 (ํ๊ทธ์ ๊ฐ๊ณผ ๋์ผํจ)
- ํ๊ทธ ๊ฐ : {"Name" : "be-pair-63"}
- IAM ์ญํ : BE_EC2RoleForSSM
→ EC2 ์ธ์คํด์ค์ ์ฐ๊ฒฐ๋์ด ์๋ IAM ์ญํ
- ๋ฐ๊ธ๋ฐ์ EC2 ์ธ์คํด์ค๋ฅผ ํตํด ์ฐ๊ฒฐ๋์ด ์๋ ๋ณด์ ๊ทธ๋ฃน ํด๋ฆญ
๐ธ ๋ก์ปฌ ํ๊ฒฝ ํ์ผ ์ค์
* appspec.yml ํ์ผ ์์ฑ *
- ๋ฐฐํฌ ์๋ํ๋ฅผ ๋์์ฃผ๋ CodeDeploy-Agent๊ฐ ์ธ์ํ๋ ํ์ผ
* buildspec.yml ํ์ผ ์์ฑ *
- ๋ฐฐํฌ ์๋ํ์์ ๋น๋๋ฅผ ๋ด๋นํ๋ CodeBuild-Agent๊ฐ ์ธ์ํ๋ ํ์ผ
* script ๋๋ ํ ๋ฆฌ ์์ฑ *
โ initialize.sh โก server_clear.sh โข server_start.sh โฃ server_stop.sh
- ๊ฐ ํ์ผ์ appspec.yml ํ์ผ์ด ๊ตฌ์ฑํ๊ณ ์๋ ๋ฐฐํฌ ์๋ช ์ฃผ๊ธฐ์ ๋ฐ๋ผ์ ์คํ๋ ์์
๐ธ CodeDeploy ์ธํ
* ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ *
AWS CodeDeploy ๋์๋ณด๋๋ก ์ด๋ - [์ ํ๋ฆฌ์ผ์ด์
] - [์ ํ๋ฆฌ์ผ์ด์
์์ฑ]
- ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ ์
๋ ฅ - ์ปดํจํ
ํ๋ซํผ : EC2/์จํ๋ ๋ฏธ์ค ์ ํ - [์ ํ๋ฆฌ์ผ์ด์
์์ฑ]
* ๋ฐฐํฌ ๊ทธ๋ฃน ์์ฑ *
[๊ฐ๋ฐ์๋๊ตฌ] - [CodeDeploy] - [์ ํ๋ฆฌ์ผ์ด์
] - [๋ฐฐํฌ๊ทธ๋ฃน] - [๋ฐฐํฌ๊ทธ๋ฃน ์์ฑ]
- ๋ฐฐํฌ ๊ทธ๋ฃน ์
๋ ฅ - ์๋น์ค ์ญํ : EC2 ์ธ์คํด์ค์ ์ฐ๊ฒฐ๋์ด ์๋ ์ญํ ์ ํ
* ํ๊ฒฝ ๊ตฌ์ฑ *
[ํ๊ฒฝ ๊ตฌ์ฑ] - Amazon EC2 ์ธ์คํด์ค ์ ํ
[ํ๊ทธ] - Nameํ๊ทธ ํค์ ๊ฐ ์ ํ
- ๋ก๋ ๋ฐธ๋ฐ์ฑ ํ์ฑํ ์ฒดํฌ ํด์ - [๋ฐฐํฌ๊ทธ๋ฃน ์์ฑ]
๐ธ AWS Code Pipeline์ผ๋ก ์๋ฒ ๋ฐฐํฌ ์๋ํ ํ์ดํ๋ผ์ด ๊ตฌ์ถ
* ์์ค ์คํ ์ด์ง *
[๊ฐ๋ฐ์๋๊ตฌ] - [CodePipeline] - [ํ์ดํ๋ผ์ธ] - [ํ์ดํ๋ผ์ธ ์์ฑ]
- ์ด๋ฆ ์ค์ - ์์ค ์คํ
์ด์ง : Github2 - Github ์ฐ๊ฒฐ - ์ ์ฑ ์ค์น - ์์ ์ github ๊ณ์ ํด๋ฆญ
- Only select repositories ์ ํ ํ ๋ฆฌํฌ์งํ ๋ฆฌ ์ ํ - [Save] - [์ฐ๊ฒฐ]
๋ฆฌํฌ์งํ ๋ฆฌ ์ด๋ฆ ์ ์ - ๋ธ๋์น ์ ์ - CodePipeline ๊ธฐ๋ณธ๊ฐ ์ค์
* ๋น๋ ์คํ ์ด์ง *
๋น๋ ๊ณต๊ธ์ : AWS CodeBuild
- ํ๋ก์ ํธ ์์ฑ - ์ด๋ฆ ์
๋ ฅ
- OS : Amazon Linux 2
- Runtime : Standard
- image : aws/codebuild/amazonlinux2-x86_64-standard:3.0
- Buildspec : DeployServer/buildspec.yml
* ๋ฐฐํฌ ์คํ ์ด์ง *
๋ฐฐํฌ ๊ณต๊ธ์ : AWS CodeDeploy
- region : ์์ธ
- ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ ์
๋ ฅ
- ๋ฐฐํฌ ๊ทธ๋ฃน ์ด๋ฆ ์
๋ ฅ