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
예를 들어, 서울 리전인 경우, 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 입력
나머지 그대로 ‘배포 만들기’
배포 상태 확인
참고
로드밸런서 DNS로 접근
깃허브에 있는 코드가 반영된 것을 확인
'[SK Shieldus Rookies 16기] > AWS' 카테고리의 다른 글
배포 전략(Deployment Strategy) (0) | 2023.12.18 |
---|