본문 바로가기
[SK Shieldus Rookies 16기]/AWS

CodeDeploy를 이용한 자동 배포

by RYU21 2023. 12. 16.

CodeDeploy

EC2 인스턴스, 온프레미스 인스턴스, 서버리스 Lambda 함수 또는 Amazon ECS 서비스로 애플리케이션 배포를 자동화하는 배포 서비스

 

CodeDeploy는 서버에서 실행되고 Amazon S3 버킷, GitHub 리포지토리 또는 Bitbucket 리포지토리에 저장되는 애플리케이션 콘텐츠를 배포할 수 있다.

 

CodeDeploy를 사용하기 위해 기존 코드를 변경할 필요가 없다.

 

- 자세한 사항 참고
CodeDeploy
https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/welcome.html

 

 

CodeDeploy 실습

GitHub를 사용하여 간단한 웹 페이지를 EC2 인스턴스에 자동으로 배포해보자.



#1 IAM에서 CodeDeploy에 사용할 역할 생성

 

 

 

 

나머지 설정 그대로 ‘역할 생성’



 

#2 IAM에서 EC2 인스턴스에 적용할 역할 생성


CodeDeploy 역할

나머지 그대로 ‘역할 생성’



EC2 역할 생성

신뢰 관계만 필요하므로 따로 정책을 추가할 필요가 없다.

 

나머지 그대로 ‘역할 생성’



생성확인





#3 CodeDeploy에 사용할 배포 가능한 인스턴스를 생성


기본 VPC 생성

이미 있다면 스킵

없다면 기본 설정 그대로 생성


인스턴스 생성

 

 

키페어가 없다면 새로 생성하여 설정

 

서브넷은 첫 번째 가용영역 a를 선택

 

ssh는 기본으로 있고 보안 그룹 규칙 추가를 누르고 HTTP 추가

 

고급 세부 정보를 열고 하단에 다음 내용 입력

 

웹 어플리케이션을 위한 환경을 다운로드하는 코드

#!/bin/sh

amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
yum -y install httpd php-mbstring

# Start the web server
chkconfig httpd on
systemctl start httpd

# Update existing packages
yum -y update

 

나머지 설정 그대로 ‘인스턴스 시작’


인스턴스 실행 확인 후 SSH로 해당 인스턴스 접속



CodeDeploy Agent 설치

CodeDeploy Agent 설치 관리자 다운로드 주소

https://bucket-name.s3.region-identifier.amazonaws.com/latest/install

  • bucket-name은 해당 리전의 CodeDeploy 리소스 키트 파일이 포함되어 있는 Amazon S3 버킷의 이름 
  • region-identifier는 리전의 식별자

예를 들어, 서울 리전인 경우, 
https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install


[ec2-user@ip-172-31-4-248 ~]$ sudo yum update
[ec2-user@ip-172-31-4-248 ~]$ sudo yum install ruby
[ec2-user@ip-172-31-4-248 ~]$ sudo yum install wget
[ec2-user@ip-172-31-4-248 ~]$ cd /home/ec2-user
[ec2-user@ip-172-31-4-248 ~]$ wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
[ec2-user@ip-172-31-4-248 ~]$ chmod +x ./install
[ec2-user@ip-172-31-4-248 ~]$ sudo ./install auto
[ec2-user@ip-172-31-4-248 ~]$ sudo service codedeploy-agent status
:
The AWS CodeDeploy agent is running as PID 26137

 

- 자세한 사항 참고
CodeDeploy Agent Install
https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html
Legion Bucket Name
https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/resource-kit.html#resource-kit-bucket-names

 

 


인스턴스의 현재 상태 그대로 이미지로 저장

 

나머지 설정 그대로 ‘이미지 생성’

 


AMI메뉴에서 이미지 생성 확인

조금 기다려야 됩니다.




생성한 AMI로 시작 템플릿 생성

 

 

 

 

고급 세부 정보 화살표 펼친 후 IAM 역할 설정



나머지 그대로 ‘시작 템플릿 생성’



AutoScalingGroup 생성

 

 

첫 번째 가용영역 선택



VPC 서브넷 가용영역을 a와 c 두 개를 설정



 

나머지 그대로 ‘다음’  ‘Auto Scaling 그룹 생성’



로드밸런서 보안 그룹 변경

 

default 보안 그룹 대신에 상단의 보안 그룹으로 변경 후 저장

 

22번 포트와 80번 포트를 모두 허용하는 보안그룹을 선택했지만

원래는 80번 포트만 허용하는 보안그룹을 새로 만들어서 적용하는 것이 옳다.





#4 GitHub 리포지터리를 생성하고 소스코드(웹 페이지) 커밋


리포지터리 생성

 


리포지터리에 필요 파일 커밋

https://github.com/RyuSeung/RepositoryForCodeDeploy.git

상단 링크와 똑같이 파일을 생성 후 커밋

 

index.html

별모양을 그리는 웹 페이지 코드

 

appspec.yml

배포 시 CodeDeploy Agent가 수행할 내용을 기술한 파일

※ 들여쓰기는 반드시 스페이스로 입력 (탭으로 하면 오류 발생)

 

scripts/set_owner

appspec.yml 에서 실행하게 되어 있는 쉘 스크립트 파일




배포할 리포지터리의 커밋 ID(커밋 버전)을 확인

제일 상단(최근) 커밋의 ID 복사





#5 CodeDeploy 애플리케이션, 배포그룹, 배포 생성

애플리케이션 생성

 



배포 그룹 생성

 

나머지 그대로 ‘배포 그룹 생성’



배포 생성

자신의 GitHub 이름을 적고 하단 연결 버튼을 누르면 뜨는 창에서 인증 진행.

연결 후, 1번 상자에 자신의 GitHub이름/리포지토리이름 입력

2번 상자에 #4에서 복사한 깃허브 커밋 ID 입력

 

나머지 그대로 ‘배포 만들기’



배포 상태 확인

참고 

https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html#appspec-hooks-server



로드밸런서 DNS로 접근

깃허브에 있는 코드가 반영된 것을 확인

 

'[SK Shieldus Rookies 16기] > AWS' 카테고리의 다른 글

배포 전략(Deployment Strategy)  (0) 2023.12.18