Before 2022/AWS & DevOps

CodeCommit & CodePipeline을 활용한 정적 웹호스팅 배포 자동화

Eljoe 2022. 6. 18. 17:30

S3 정적 호스팅 배포 시 문제점

이전 포스팅(AWS S3 & CloudFront & Route 53을 활용한 정적 웹 호스팅 하기:Link)에서 호스팅까진 완료하였지만, 별도의 소스 관리 도구가 없어 수정이 불편하다는 단점이 부각된다.

그래서, 본 포스팅에서는 AWS에서 제공하는 Git Repository 서비스인 CodeCommit을 이용하여 소스를 관리하고 추가적으로 CodePipeline을 활용하여 배포 파이프라인을 구축하고 자동화를 진행해보겠다.

 

CodeCommit

프라이빗 Git 리포지토리를 호스팅하는 안전하고 확장 가능한 소스 관리형 서비스입니다. CodeCommit을 사용하면 자체 소스 제어 시스템을 관리하거나 인프라 확장을 걱정할 필요가 없습니다. CodeCommit을 사용하여 코드와 바이너리 등을 저장할 수 있습니다. 또한 Git의 표준 기능을 지원하므로 기존 Git 기반 도구와도 원활하게 연동됩니다

(출처 : AWS CodeCommit란 무엇입니까?)

 

CodePipeline

빠르고 안정적인 애플리케이션 및 인프라 업데이트를 위해 릴리스 파이프라인을 자동화하는 데 도움이 되는 완전관리형 지속적 전달 서비스입니다. CodePipeline은 코드 변경이 발생할 때마다 사용자가 정의한 릴리스 모델을 기반으로 릴리스 프로세스의 빌드, 테스트 및 배포 단계를 자동화합니다. 따라서 기능과 업데이트를 신속하고 안정적으로 제공할 수 있습니다.

(출처 : AWS CodePipeline)

 

구성도

배포 자동화 구성도

  1. 정적 호스팅 Bucket에 저장한 소스를 CodeCommit Repository로 이관 작업 진행
  2. 유저가 저장소에서 소스 작업 후 Git Push를 진행하면, 연결한 CloudWatch의 변경 Event가 발생한다.
  3. CodePipeline에서 Event를 감지하여 지정한 Bucket에 변경한 소스를 배포한다.
  4. 배포 성공 시, 웹 사이트에서 변경점을 확인한다.

준비 작업

먼저 CodeCommit Repository에 접근하려면 자격증명이 필요하다.

IAM 콘솔에서 자격증명을 생성할 사용자로 접속한다.

 'AWS CodeCommit에 대한 HTTPS Git 자격증명' > '자격 증명 생성' 버튼을 눌러 생성한다.

생성을 확인하고 사용자 이름, 비밀번호를 기록해두거나 자격 증명 파일을 다운로드한다.

 

PC에선 S3 명령어를 실행하기 위한 CLI와 리포지토리 관련 작업을 수행할 Git이 설치되어야 한다.

Create & Clone Repository

이관 작업을 진행하기 위해 먼저 리포지토리를 생성한다.

 

리포지토리의 이름을 작성하고 생성하면 아래와 같이 성공 메시지와 함께 연결 단계 문구가 뜨는데, HTTPS 탭에서

'3단계: 리포지토리 복제' 항목의 주소를 복사한다.

 

PC에서 로컬 저장소가 될 디렉토리로 이동하여, Git Bash 창을 연다.

 

Git Bash 창에서 해당 디렉토리가 맞는 지 확인 후 다음과 같이 clone 명령어와 복사한 URL을 입력한다.

git clone https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/repo-name

 

입력하면, 아래와 같이 'Git Credential Manager' 창이 뜨는데 준비작업에서 진행하였던 자격증명의 '사용자 이름'과 '비밀번호'를 순차적으로 입력하고, 확인 버튼을 클릭한다.

 

clone이 성공적으로 수행된 경우 아래와 같이 빈 리포지토리가 clone되었다는 문구를 확인할 수 있다.

S3에서 Repository로 소스 이관

명령 프롬프트를 열어서 아래와 같이 S3 sync 명령어를 입력하여 S3에 저장된 소스를 해당 로컬 저장소로 전송한다.

aws s3 sync s3://bucket local_repository_경로

 

해당 명령어를 성공적으로 수행하였으면, 로컬 저장소에 S3 콘텐츠가 전송되어있는 것을 볼 수 있다.

 

전송 완료된 로컬 저장소 경로에서 git bash 창을 열고 다음과 같이 add를 수행한다.

git add .

 

add를 정상적으로 수행하였으면 첫 번째 commit & push를 진행한다.

git commit -m 'first commit'
git push origin master

 

commit & push 작업을 모두 수행하였으면, AWS CodeCommit 콘솔에 접근하여 해당 저장소에 S3 콘텐츠들이 이관되어있는지 확인한다.

CodePipeline 구축

CodePipeline을 활용하여 배포 자동화가 이뤄지도록 파이프라인을 생성해보자.

아래와 같이 AWS CodePipeline 콘솔에 접속하여 파이프라인 생성을 클릭한다.

 

기본 값인 새 서비스 역할이 체크된 상태에서 파이프라인 이름을 입력하면 서비스 역할 이름을 자동으로 생성하며, 다음을 클릭한다.

 

소스 스테이지 추가에서 아래와 같이 선택하고 다음 버튼을 클릭한다.

  • 소스 공급자 : AWS CodeCommit
  • 리포지토리 이름 : S3 콘텐츠를 이관한 리포지토리 선택
  • 브랜치 이름 : master
  • 변경 감지 옵션 : Amazon CloudWatch Events
  • 출력 아티팩트 형식 : CodePipeline 기본값

 

빌드 스테이지가 나오는데 본 실습의 경우 정적 호스팅 방식이라 별도의 빌드 과정이 필요 없기에 '빌드 스테이지 건너뛰기'를 클릭한다.

 

배포 스테이지에선 변경한 소스를 배포할 대상을 지정해준다.

여기선 정적 호스팅 대상인 S3에 업로드할 것이므로 아래와 같이 입력하고 다음을 클릭한다.

  • 배포 공급자 : Amazon S3
  • 리전 : 버킷이 위치한 리전 선택
  • 버킷 : 정적 호스팅 대상 버킷
  • '배포하기 전에 파일 압축 풀기' 체크

 

배포 스테이지까지 진행하였으면 다음과 같이 스테이지 리뷰가 나오며 내용을 확인하고 생성을 클릭한다.

 

파이프라인을 정상적으로 생성한 경우 아래와 같이 최초 수행을 진행하고 상태를 확인한다.

만약, 파이프라인 실행이 실패한 경우 에러 메시지를 확인하고 적절한 조치를 취한다.

 

배포 자동화 확인해보기

git 관리 도구를 설치한 IDE(작성자의 경우 VSCode)에서 저장소를 열고 소스 수정 후 반영 작업을 진행해본다. 

 

수정한 내용을 확인하였으면 Commit & Push 작업을 진행한다.

 

정상 반영을 하였으면 아래와 같이 CodePipeline 콘솔 접속 후 대상 파이프라인에서 자동으로 배포를 수행하는 것을 확인할 수 있다.

 

배포가 성공한 경우, 정적 호스팅 DNS로 접속하여 변경 내용을 확인한다.