본문 바로가기
클라우드/AWS

CodeDeploy를 이용한 현재 위치 배포 #4

by ^..^v 2021. 8. 22.
728x90
반응형

8. CodeDeploy 애플리케이션 생성

자동 배포를 수행할 애플리케이션을 생성합니다. 

 

애플리케이션 이름을 입력하고, 컴퓨팅 플랫폼으로 EC2/온프레미스를 선택합니다. 

 

 

9. 배포 그룹 생성

애플리케이션 생성을 확인하고, 배포 그룹을 생성합니다. 

 

배포 그룹 이름을 입력하고, 서비스 역할로 앞에서 생성한 AWSCodeDeployRole 정책을 반영한 OOO-codedeploy-role을 선택합니다. 

 

애플리케이션 배포 방법으로 현재 위치를 선택하고, 애플리케이션 개정을 배포할 환경으로 Amazon EC2 Auto Scaling 그룹을 선택하고, 앞에서 생성한 Auto Scaling 그룹을 선택합니다. 

 

배포 구성으로 한 번에 하나씩 배포를 진행하는 CodeDeployDefault.OneAtATime을 선택합니다. 로드 밸런싱을 활성화하고, Application Load Balancer 또는 Network Load Balancer를 선택하고, 앞에서 생성한 대상 그룹을 선택합니다. 

 

 

10. 배포 생성

배포를 생성합니다. 

 

앞에서 생성한 배포 그룹을 선택하고, 개정 유형으로 애플리케이션을 GitHub에 저장을 선택합니다.

 

GitHub 계정을 입력하고 GitHub에 연결 버튼을 클릭해서 GitHub에 연결합니다. GitHub 연결 후 개정할 소스 코드가 있는 리포지토리 이름과 개정에 반영할 버전의 커밋 ID를 입력합니다. 

 

GitHub 리포지토리에는 개정할 index.html 파일과 개정 절차를 기술한 appspec.yml 파일이 등록되어 있습니다. 

 

appspec.yml 파일에는 GitHub에서 가져온 개정 파일을 웹 루트 디렉터리로 복사하는 내용을 포함하고 있습니다. 

appspec.yml 파일 형식은 AWS 문서를 참고합니다. https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/reference-appspec-file.html

version: 0.0
os: linux
files: 
  - source: /
    destination: /var/www/html

 

index.html 파일에는 개정된 내용을 포함합니다. 

<!DOCTYPE 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

 

GitHub 리포지토리에 웹 루트 디렉터리에 index.html 파일을 삭제하는 쉘 스크립트 파일을 추가합니다.

#!/bin/bash
cd /var/www/html
rm index.html

 

기존에 실패한 배포를 복사합니다. 

 

커밋 ID를 최신 수정 버전의 커밋 ID로 변경한 후 배포를 실행합니다.

 

배포가 완료된 인스턴스 주소로 접속하면 새로운 코드로 변경된 것을 확인할 수 있습니다. 

 

배포가 진행되지 않은 인스턴스 주소로 접속하면 이전 코드로 서비스되는 것을 확인할 수 있습니다.

 

배포가 진행되는 동안 개별 인스턴스로 직접 접속하면 이전 버전으로 서비스가 되는 것을 확인할 수 있으며, 로드밸런서로 접속하면 새 버전의 내용만 출력되는 것을 확인할 수 있습니다. 즉, 배포가 진행되는 동안에는 로드밸런서가 서비스 중인 인스턴스로만 라우팅하는 것을 확인할 수 있습니다. 

 

728x90
반응형

댓글