AWS CodeDeploy는 Amazon EC2, AWS Fargate, AWS Lambda 및 온프레미스 서버와 같은 다양한 컴퓨팅 서비스에 대한 소프트웨어 배포를 자동화하는 완전관리형 배포 서비스
현위치 배포=롤링배포
- 애플리케이션의 이전 버전(파란색)을 점차적으로 새 버전(초록색)으로 교체
기본 VPC 생성
EC2 인스턴스 생성
기본 VPC로 설정
보안 그룹 SSH, HTTP 접속이 가능하도록 설치
웹 서비스에 필요한 프로그램 설치 및 환경 설정을 위해 인스턴스로 연결
sudo yum install -y httpd php mysql php-mysql #웹서버 php, mysql, php-mysql 연동 모듈 설치
sudo chkconfig httpd on # 웹 서버 데몬을 서비스로 등록
sudo systemctl start httpd # 웹 서버 시작
# 웹 루트 디렉토리에서 index.html파일 생성
cd /car/www/html
echo 'Hello EC2 !!!' | sudo tee -a index.html
yum -y update # 패키지를 최신 상태로 업데이트
CodeDeploy를 이용하여 소스코드를 자동 배포할 수 있도록 해당 인스턴스에 CodeDeploy Agent를 설치
sudo yum install -y ruby #루비 설치 CodeDeploy Agent 설치 파일 실행에 사용
# 설치 파일 다운로드
#(https://docs.aws.amazon.com/codedeploy/latest/userguide/resource-kit.html#resource-kit-bucket-names)참고
wget https://"bucket-name".s3."region-identifier".amazonaws.com/latest/install
chmod +x ./install # 실행 권한 부여
sudo ./install auto # CodeDeploy Agent 설치
sudo service codedeploy-agent status #실행 상태 확인
AMI 생성
인스턴스 중지 후 이미지 생성
CodeDeploy 서비스에 적용할 역할 생성
EC2 정책 생성
CodeDeploy Agent가 S3에서 업로드 된 파일을 가져올 경우 S3읽기 권한이 필요
정책을 적용할 역할 생성
대상 그룹 생성
로드 밸런싱 대상 그룹을 생성
이전에 생성한 기본 VPC를 선택, 나머지는 기본 설정
시작 템플릿 생성
앞에서 생성한 AMI, EC2의 키페어, 기본 VPC, 보안 그룹을 선택
고급 세부 정보에서 S3읽기 권한을 부여한 인스턴스 정책(skuser68-codedeploy-ec2-role)를 선택
Auto Scaling 그룹 생성
생성한 시작 템플릿을 선택
기본 VPC와 가용가능한 모든 서브넷 선택
만들어둔 로드벨런서가 없기 때문에 새 로드 밸런서에 연결을 선택
외부에서 로드밸런서로 요청을 전달할 수 있어야하므로 Internet-facing을 선택
라우팅 대상으로 앞에서 생성한 대상 그룹을 선택
실습에서는 대상 그룹을 2개로 설정
CodeDeploy 애플리케이션 생성
배포 그룹 생성
AWS CodeDeploy Role 정책을 반영한 skuser68-codedeploy-role선택
배포할 환경으로 Amazon EC2 Auto Scaling 그룹을 선택 앞서 생성한 그룹을 선택
배포 구성으로 한번에 하나씩 배포를 진행하는 CodeDeployDefault.OneAtATime을 선택 로드밸런싱 활성화
앞서 생성한 대상그룹을 선택
배포 생성
github 레포지토리에 개정할 index.html 개정절차를 기술한 appspec.yml파일, 웹 루트 디렉토리에서 이전의 index.html을 삭제하는 쉘 스크립트 파일을 추가
<!--index.html-->
<html>
<head>
<title>Title of the document</title>
<script>
var text = "I told you so!";
</script>
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<msup><mi>a</mi><mn>2</mn></msup>
<mo>+</mo>
<msup><mi>b</mi><mn>2</mn></msup>
<mo>=</mo>
<msup><mi>c</mi><mn>2</mn></msup>
</mrow>
</math>
<!-- embed svg elements directly in HTML5 -->
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="190">
<polygon points="100,10 40,180 190,60 10,60 160,180"
style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;">
</svg>
<script>
document.write("<p>"+text+"</p>");
document.write("<p>"+text+"</p>");
document.write("<p>"+text+"</p>");
</script>
</body>
</html>
#appspec.yml
version: 0.0
os: linux
files:
- source: /
destination: /var/www/html
hooks:
BeforeInstall:
- location: ./scripts/before-install.sh
timeout: 60
runas: root
# /scripts/before-install.sh
#!/bin/bash
cd /var/www/html
rm index.html
커밋 ID : 배포할 서비스의 commit을 담고 있는 커밋아이디로 진행
배포 실행
CodeDeployDefault.OneAtATime로 배포 구성했기 때문에 한번에 하나의 인스턴스만 배포가 진행됨
배포가 진행되는 동안 개별인스턴스에 직접 접속하면 이전 버전의 서비스가 실행됨
로드벨런스로 접속시 새버전의 서비스만 출력됨(배포가 진행되는 동안에 로드밸런서는 배포가 완료되어 서비스중인 인스턴스만 라운팅하는 것을 확인 가능)
'AWS' 카테고리의 다른 글
AWS CloudFormation (2)- 웹 애플리케이션 배포 및 관리 실습 (0) | 2021.08.25 |
---|---|
AWS CloudFormation (1)- VPC생성 실습 (0) | 2021.08.25 |
AWS 블루/그린 배포 실습 (0) | 2021.08.19 |
AWS 기반 웹서비스 구성 실습(3) (0) | 2021.08.18 |
AWS 기반 웹서비스 구성 실습(2) (0) | 2021.08.18 |
댓글