μλ λ°°ν¬(CD) μ νμνκ°?
νλ‘μ νΈλ₯Ό μ§ν μ€ μΌμ λ¨μμ κ°λ°μ΄ μλ£λλ€λ©΄, λ³κ²½ λ΄μ©μ μ€μ μλ²μ λ°μνκΈ° μν Deployment λ₯Ό μ§ννκ² λλ€. νμ§λ§, μ΄λ¬ν Deploy μμ μ΄ λ¬΄μΈκ° νΉλ³ν μλ‘μ΄ κ³Όμ μ΄ μλ κ²μ΄ μλλΌ λ κ°μ κ³Όμ μ λ°λ³΅νλ κ²μ΄κΈ° λλ¬Έμ, κ°λ° μ΄μΈμ λ§μ 곡μλ₯Ό μ‘μλ¨Ήλ μμ μ€ νλμ΄λ€.
κ·Έλ¦¬κ³ , μ€μ μ ν리μΌμ΄μ μ μ΄μν¨μ μμ΄μλ μ΄λ¬ν Deploy μμ μ μΈκ°μ΄ μλμΌλ‘ μ€μνλ€λ³΄λ©΄, μ ν리μΌμ΄μ μ λ³κ²½ λ΄μ©κ³Ό κ΄κ³μμ΄ μ¬λμ μ€μλ‘ μΈν μ₯μ κ° λ°μνκΈ°λ νλ€. μ΄λ κ² Deploy μμ μ λΆνμνκ³ λΉν¨μ¨μ μΌλ‘ λ§μ μκ°μ μλͺ¨νλ€λ©΄, μ΄λ μ μ μ λν μλ‘μ΄ κΈ°λ₯κ³Ό μλΉμ€ μ κ³΅μ΄ λ¦μ΄μ§μ μλ―Ένλ€.
κ·Έλμ μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν λ Έλ ₯μΌλ‘ λ§μ μ ν리μΌμ΄μ μ CI/CD κ° λμ λκ³ μκ³ , κ·Έ μ€μμλ CDλ μ§μμ μΈ μλΉμ€ μ 곡(Continuous Delivery) λ° μ§μμ μΈ λ°°ν¬(Continuous Deployment)λ₯Ό μλ―Ένκ³ μλ€.
μ¬μ©ν AWS μλΉμ€
- CodeDeploy : μ€μ λ‘ EC2μ Source Code λ₯Ό μ λ‘λνμ¬, Deploy λ₯Ό μ€μ
- CodePipeline : GitHub, S3, CodeDeploy μ μ°κ³νμ¬ Auto deploy κ° κ°λ₯νλλ‘ νμ΄νλΌμΈμ μ 곡
- EC2 : Source Code κ° Deploy λλ λμ μλ²
- S3 : λ³κ²½λ Source Code λ₯Ό μ μ₯νκΈ° μν μ μ₯μ
μλ λ°°ν¬μ νλ¦
μ¬μ μμ
1. μλ λ°°ν¬λ₯Ό μ§νν μ ν리μΌμ΄μ μμ± λ° μ€μ (GitHub)
μ ν리μΌμ΄μ μμ±μ κ°λ¨ν μ μ°¨λΌκ³ μκ°νκΈ° λλ¬Έμ μ¬κΈ°μμλ ꡬ체μ μΌλ‘ μ€λͺ νμ§ μλλ€. κ·Έλ₯ GitHub Repository λ₯Ό νλ μμ±νκ³ , μμ μ΄ κ°λ° μ€μΈ νλ‘μ νΈλ₯Ό Push νλ©΄λλ€. λ¨, CodeDeploy μ¬μ©μ μν΄ μμ±μ΄ νμν νμΌμ΄ μλ€.
EC2 μ Source Code λ₯Ό λ°°ν¬νλ κ²μ΄κΈ° λλ¬Έμ, Source Coder λ₯Ό μ΄λ€ λλ ν°λ¦¬ ꡬ쑰μ λ°°μΉν΄μΌνκ³ , λ°°ν¬ μμ μ΄λ€ μμ μ μ€νν΄μΌνλμ§ μ μνκΈ° μν΄μ, Source directory root μ appspec.yml μ΄λΌλ YAML νμΌμ μμ±ν΄μΌνλ€.
version: 0.0
os: linux
# Source Code λ₯Ό λ°°μΉν μμΉ, overwrite μ μ΅μ
μΌλ‘ μ¬μ©κ°λ₯
files:
- source: /
destination: /var/www/html
overwrite: yes
# νμμ λ°λΌμλ λ°°ν¬ ν νμΌμ κΆνμ μ€μ ν μ μμ
permissions:
- object: /var/www/html
owner: develop
group: develop
mode: 755
type:
- directory
- object: /var/www/html
owner: develop
group: develop
mode: 664
type:
- file
# CodeDeploy μ€ν μ /νλ‘ νμν λμμ sh νμΌμ μ μν΄ μ€ν
# (BeforeInstall, AfterInstall, ApplicationStart, ApplicationStop λ±μ΄ μμ)
# hooks μ install_dependencies.sh λ νμμ λ°λΌ μμ λ‘κ² μμ±
hooks:
AfterInstall:
- location: scripts/install_dependencies.sh
runas: develop
2. AWS - GitHub κ³μ μ°λ
CodeDeploy μ μ€μ μ μ§ννκΈ°μ μμ AWS CodeDeploy μ GitHub κ³μ μ μ°λν νμκ° μλ€. CodeDeploy - Settings - Connections - Create connection μμ GitHub λ₯Ό μ ννμ¬ μ 보λ₯Ό μ λ ₯ν ν, Connect to GitHub μ ν΄λ¦νλ©΄ GitHub SSO μ°λ νμ΄μ§κ° λ¬λ€.
3. EC2 Tag μ€μ λ° CodeDeploy Agent μ€μΉ
CodeDeploy μ μ€μ μ΄ ν¬κ² Applications μμ± → Deployment groups μμ± μμΌλ‘ μ§νλλλ°, Deployment groups μ λ°°ν¬ λμμ΄ λλ EC2 λ₯Ό μλ³νκΈ° μν΄ EC2 μ Tag λ₯Ό μΆκ°ν΄μΌ νλ€. λλ Key λ₯Ό deploy, Value λ code-deploy λ‘ ν΄μ£Όμλ€.
κ·Έλ¦¬κ³ μλμ Document λ₯Ό μ°Έκ³ νμ¬, EC2 μ CodeDeploy Agent λ₯Ό μ€μΉνλ€.
4. S3 Bucket μμ±
CodePipeline μ μ€μ ν λ, Source Code λ₯Ό μμΆνμ¬ λ³΄κ΄ν μμΉλ₯Ό μ§μ ν μ μλ€. Default λ₯Ό μ¬μ©νλ©΄ Bucket name μ hash string μ΄ λΆκΈ° λλ¬Έμ, λͺ ννκ² μ΄λ¦μΌλ‘ κ΅¬λΆ κ°λ₯νλλ‘ λ°λ‘ Bucekt μ μμ±ν΄μ£Όμλ€. S3 μ νΉλ³ν μ€μ ν κ²μ μμ§λ§, EC2 μ S3, CodeDeploy μ CodePipeline μ΄ λͺ¨λ κ°μ Region μμ μλλ‘ μμ±ν΄μΌ νλ€.
5. IAM μμ±
μλ λ°°ν¬κ° μ€νλλ κ³Όμ μμ EC2 λ S3μ CodeDeploy μ CodePipeline μ CodeDeploy μ μ¬λ¬ μ 보(GitHub κ³μ μ°λ μ 보μ κ°μ) μ μ κ·ΌνκΈ° λλ¬Έμ, μ΄ 2κ°μ IAM Role μμ±μ΄ νμνλ€. IAM - Role - Create Role μ ν΄λ¦νμ¬, μλμ κ°μ΄ IAM Role μ κ°κ° νμν Policyλ₯Ό λΆμ¬νλ€. λ¨, S3 μ λν Permissions μ κ²½μ° μ΄λ²μλ AmazoneS3FullAccess Policy λ₯Ό λΆμ¬νμ§λ§, μ€μ λ‘λ νμν S3 Bucket λ§μΌλ‘ λ²μλ₯Ό μ’νμ μ€μ νλ κ²μ κΆμ₯νλ€.
CD μ€μ
1. CodeDeploy μ€μ
μμμλ μ κΉ μ΄μΌκΈ°νμ§λ§, CodeDeploy μ μ€μ μλ Applications κ³Ό Deployment groups μμ±μ΄ νμνλ€. CodeDeploy - Deploy - Applications - Create application μ ν΄λ¦νμ¬, μλμ κ°μ΄ μ λ ₯ν΄μ€λ€. νΉμ λ°°ν¬ λμμ΄ EC2 κ° μλλΌλ©΄, Compute platform μμ λ°°ν¬νκ³ μ νλ λμμ μ ννλ©΄ λλ€.
μμ±μ μλ£νλ©΄ μμ±ν CodeDeploy Application νμ΄μ§λ‘ μ΄λνλλ°, μ¬κΈ°μμ λ°λ‘ Create deployment group μ ν΄λ¦νμ¬, νμν μ 보λ₯Ό μ λ ₯νκ³ μλ£ν΄μ€λ€.
- Service role : "IAM μμ±" μμ λ§λ CodeDeploy IAM Role μ€μ
- Deployment type
- In-place
- μμ μ Deploy νκ²½μ λ°λΌ, Blue/green λ°°ν¬ λ°©μλ μ¬μ© κ°λ₯
- Environment configuration
- Amazon EC2 instances : ν λμ EC2 μ λν΄μ λ°°ν¬νλ κ²μ΄κΈ° λλ¬Έμ (ASG μ¬μ© κ°λ₯)
- Key λ deploy, Value λ code-deploy μ λ ₯ : μ μμ μΌλ‘ EC2 λ₯Ό μΈμνλ©΄ 1 unique matched instance λΌκ³ μΆλ ₯
- Deployment settings
- CodeDeployDefault.AllAtOnce μ μ¬μ©
- μμ μ νκ²½μ λ§μΆ°μ deployment configuration μ λ§λ€ μ μμ
- Load balancer : Enable load balancing μ μ²΄ν¬ ν΄μ (μ΄λ²μ λ°λ‘ μ€μ νμ§ μμ)
μ λ ₯μ λͺ¨λ μλ£νκ³ λλ©΄, CodeDeploy μ μ€μ λ Application κ³Ό Deployment group μ μλμ κ°μ΄ νμΈν μ μλ€.
2. CodePipeline μ€μ
GitHub λ₯Ό ν΅ν΄ CodeDeploy κ° μ€νλ μ μλλ‘ trigger λ₯Ό μ€μ ν΄ μ£Όλ λΆλΆμ΄λ€. CodeDeploy - Pipeline - Create pipeline μ ν΄λ¦ν΄ νμν μ 보λ₯Ό μ λ ₯ν΄μ€λ€.
- Choose pipeline settings
- Service role : μμμ μμ±ν΄μ€ IAM Role κ³Ό λμΌν Role μ μ¬μ©νκ±°λ, New service role λ‘ ν΄λ OK
- Advanced settings - Custom location : S3 Bucket μ μ§μ
- Add source stage
- Source provider : GitHub (Version 2)
- Connection : μμμ μ€μ ν GitHub Connection μ ν
- Repository & Branch name
- λ°°ν¬νκ³ μ νλ Repository μ branch μ ν
- PR Merge λ Branch μ Source Code κ° λ³κ²½λ κ²μ΄κΈ° λλ¬Έμ, λκ°μ΄ μ€νλ¨
- Change detection options : Start the pipeline on source code change Check (μ½λκ° λ³κ²½λλ©΄ μλμΌλ‘ μ€ν)
- Output artifact format : CodePipeline default
- Add build stage : νΉλ³ν μ¬μ©νκ³ μλ build tools μ΄ μλ€λ©΄, Skip build stage
- Add deploy stage
- Deploy provider : AWS CodeDeploy μ ν
- Application name & Deployment group : CodeDeploy μμ μμ±ν μ 보 μ λ ₯
'π§π»βπ» Develop > AWS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
AWS λ‘ Web Application Architecture ꡬμ±νκΈ° (1) (0) | 2022.10.02 |
---|---|
ν νλ‘μ νΈμμ AWS κ΄λ¦¬νκΈ° (3) - κ°λ°μ© IAM μ¬μ©μ (0) | 2022.09.18 |
ν νλ‘μ νΈμμ AWS κ΄λ¦¬νκΈ° (2) - κ΄λ¦¬μ© IAM μ¬μ©μ (0) | 2022.09.12 |
ν νλ‘μ νΈμμ AWS κ΄λ¦¬νκΈ° (1) - IAM μ¬μ©μ (0) | 2022.09.12 |
λκΈ