[1회차] GitHub Action 환경에서 AWS CF, S3 배포와 배포 자동화

김선은·2024년 4월 13일
1

이 포스트는 월간 CS - React, Next 배포와 배포 자동화 A부터 Z 스터디의 참여 후 정리하는 글입니다.

실습
1. CloudFront, S3 배포하기
2. GitHub Action에서 React 지속적 전달 구현하기

인프라 확인하기

도메인 구입 및 네임서버 설정

가비아에서 가장 저렴한 도메인을 구매합니다. 이후 AWS Route53이라는 AWS의 DNS 서비스를 이용해서 네임서버를 변경하게 됩니다.

AWS Route53

AWS Route53은 클라우드 기반의 DNS 서비스로, 도메인에 대한 DNS 요청을 처리합니다. 사용자가 도메인을 Route53의 네임서버로 변경하면, 해당 도메인의 DNS 요청은 Route53으로 전달되게 됩니다.

CloudFront 설정

AWS CloudFront는 콘텐츠 전송 네트워크(CDN) 서비스로, 사용자에게 빠르고 안전한 콘텐츠 전송을 위해 사용됩니다. CloudFront는 ACM(AWS Certificate Manager)에서 발급받은 SSL/TLS 인증서를 사용하여 HTTPS를 지원합니다.

CloudFront와 S3 연동

CloudFront는 웹사이트의 정적 콘텐츠를 제공하기 위해 S3 버킷과 연동됩니다. S3 버킷에는 리액트 애플리케이션의 빌드 파일이 저장되어 있어야 합니다. CloudFront는 요청을 받아 S3 버킷에서 해당 파일을 가져와 사용자에게 전달합니다.

CI/CD란?

지속적 통합과 지속적 제공/배포를 의미합니다.

CI (Continuous Integration)

목적: 코드 변경 사항을 지속적으로 통합하여 품질을 유지하고 소프트웨어의 빌드 및 테스트를 자동화합니다.

  • 코드 커밋 시 자동 빌드 및 테스트 실행
  • 빌드 및 테스트 실패 시 알림을 통해 문제를 빠르게 파악하고 수정
  • 코드 통합의 빈도를 높여 개발자들이 최신 상태를 유지

CD (Continuous Deployment/Delivery)

목적: 코드 변경 사항을 자동으로 프로덕션 환경에 배포합니다.

  • 통합된 코드가 품질 기준을 충족하면 자동으로 스테이징 또는 프로덕션 환경으로 배포
  • 지속적인 통합의 결과물을 실제 사용자에게 빠르게 제공
  • 자동화된 배포 프로세스를 통해 인프라 변경을 빠르게 반영

CI/CD Pipeline

목적: CI와 CD를 연결하여 자동화된 워크플로우를 구성합니다.

  • 빌드: 소스 코드를 컴파일하고 패키징
  • 테스트: 자동화된 테스트 수행
  • 배포: 자동화된 배포 스크립트 실행
  • 모니터링: 배포 후 성능 및 상태 모니터링

Terraform을 사용해서 AWS 인프라 자동화하기

Terraform이란?

AWS에서 Terraform을 사용하면 클라우드 리소스를 프로그래밍 방식으로 정의하고 배포할 수 있습니다. 예를 들어, EC2 인스턴스, S3 버킷, RDS 데이터베이스 등 AWS의 다양한 서비스를 Terraform 코드로 관리할 수 있습니다.

Terraform은 AWS의 서비스를 설정하고 프로비저닝할 때 매우 유용합니다. 코드로 AWS 인프라를 정의하면, 이를 통해 일관된 환경을 구축하고 변경 사항을 추적하며, 재사용 가능한 모듈을 작성할 수 있습니다. 또한, Terraform 상태 파일을 통해 현재 인프라 상태를 추적하고 관리할 수 있습니다.

실습 과정에서 terraform init과 apply를 이용해 DNS 리소스 배포를 실행했습니다. 이 과정에서는 가비아에서 구매한 도메인이 필요하며 네임서버 변경이 있습니다.

DNS 리소스 배포 후 같은 방법으로 CloudFront, S3 배포를 진행합니다.
이후 yarn bulid 후 빌드 파일을 s3에 업로드를 진행합니다.

GitHub Actions으로 CI/CD 파이프라인 구축하기

yarn build를 하고 빌드 파일을 s3에 업로드 하는 과정을 자동화 하는 방법입니다.
GitHub CLI를 이용해 gh auth login 후 스크립트에서 사용할 환경변수를 명령 프롬프트로 등록합니다.

중요한 부분은 GitHub Action용 폴더를 생성하고 그 폴더에 deploy.yml 파일을 만들어서 배포 자동화를 위한 스크립트를 작성하는 것입니다.

설정이 완료되었다면 배포자동화 테스트를 하면 깃허브 저장소 사이트의 Actions 탭에서 확인할 수 있습니다.
만약 깃허브 액션에서 실패하는 경우는 다음과 같을 수 있습니다.
1. 문법 오류가 있는 경우
2. SDK, aws cli의 권한이 없는 경우(관리자 권한을 사용해야함)
3. 스크립트에 문제가 있는 경우

profile
기록은 기억이 된다

0개의 댓글