본문 바로가기
Develop/DevOps

Cloud 배포 자동화

by jaeyoungb 2022. 12. 8.

배포 자동화

한 번의 클릭 또는 명령어 입력을 통해, 전체 배포 과정을 자동으로 진행하는 것을 의미한다.

장점

  • 시간을 절약할 수 있다.
  • 수동 배포 과정 중 발생하는 휴먼 에러(Human Error) 방지할 수 있다.

 

배포 자동화 파이프라인(Pipeline)

소스 코드의 관리부터 실제 서비스로의 배포 과정을 연결하는 구조를 의미한다.

  1. Source stage : 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행한다.
  2. Build stage : Source stage에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공하고 결과물을 다음 단계로 전달하는 작업을 수행한다.
  3. Deploy stage : Build stage에서 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행한다.

 

파이프라인의 단계는 상황과 필요에 따라 더 세분화되거나 간소화될 가능성이 있다.

 

 

AWS Pipeline을 통한 배포 자동화

서버 배포자동화 파이프라인

- https://www.carnaghan.com/aws-codepipeline-for-static-websites/

 

 

AWS 개발자 도구

AWS 개발자 도구 섹션에서 제공하는 서비스를 통해, 배포 자동화 파이프라인을 구축할 수 있다.

  • CodeCommit : Source stage 구성 시 사용하는 서비스
  • CodeBuild : Build stage 구성 시 사용하는 서비스
  • CodeDeploy : Deploy stage 구성 시 사용하는 서비스
  • CodePipeline : 각 stage를 연결하는 파이프라인을 구축할 때 사용하는 서비스
  • ...

- https://docs.aws.amazon.com/index.html

- https://velog.io/@ke2007/EC2ubuntu%EC%97%90%EC%84%9C-%EC%9E%90%EB%8F%99%ED%99%94-%EB%B0%B0%ED%8F%AC-%EC%82%AC%EC%A0%84%EC%A4%80%EB%B9%84-AWS-Pipeline%EA%B3%BC-%EC%82%BD%EC%A7%88%ED%95%98%EB%A9%B0-%EC%8B%B8%EC%9B%8C%EB%B3%B4%EA%B8%B0

 

1. 개발 환경 구축

JAVA 설치

$ sudo apt update
$ sudo apt install openjdk-11-jre-headless

$ java -version

AWS CLI 설치

- https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ sudo apt install unzip
$ unzip awscliv2.zip
$ sudo ./aws/install

$ aws --version

CodeDeploy Agent 설치

- https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html

$ sudo apt update
$ sudo apt install ruby-full                # [Y / n] 선택시 Y 입력
$ sudo apt install wget
$ cd /home/ubuntu
$ sudo wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
$ sudo chmod +x ./install
$ sudo ./install auto > /tmp/logfile

$ sudo service codedeploy-agent status

 

2. EC2 인스턴스에 연결할 권한들 추가(역할 부여)

  • AmazonS3FullAccess
  • AmazonEC2RoleforAWSCodeDeploy
  • AWSCodeDeployRole
  • AmazonSSMFullAccess

 

3. EC2를 활용한 파이프라인 구축 (로컬 환경의 터미널에서)

  • 배포 자동화를 도와주는 CodeDeploy-Agent가 인식할 yml 파일 추가 (appspec.yml)
  • 배포 자동화에서 빌드를 담당할 CodeBuild-Agent가 인식할 yml 파일 추가 (buildspec.yml)
  • 최상위에 scripts 디렉토리를 생성한 후 그 안에 initialize.sh, server_clear.sh, server_start.sh, server_stop.sh 파일 4개를 생성
  • AWS CodeDeploy에서 애플리케이션 생성
  • AWS CodeDeploy에서 배포 그룹 생성
  • AWS CodePipeline 설정 (Source stage = GitHub, Build stage = AWS CodeBuild, Deploy stage = AWS CodeDeploy)

파이프라인 생성, 빌드, 배포 자동 실행 모습

 

EC2 인스턴스 터미널에서 codedeploy-agent-deployments.log 파일에서 lifecycle 로그 확인 가능

AWS CodePipeline을 사용하면 소스 코드를 커밋, 푸시할 경우 배포까지 자동으로 이루어지게 된다.

 

환경 변수 설정

  • 비밀번호와 같은 환경 변수는 외부에 노출되면 안되는 정보이기 때문에, 소스 코드에 포함될 수 없다.
  • AWS Parameter Store 대시보드로 이동한 후, 소스 코드 application.properties에 있는 민감한 정보들을 파라미터로 생성시켜주고, 소스 코드에서는 지워준다.

AWS Parameter Store 서비스를 이용하면 EC2 인스턴스에 환경 변수를 전달할 수 있다.

 

 

 

GitHub Actions를 통한 배포 자동화

GitHub Actions는 Github가 제공하는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD 플랫폼이다.

- https://docs.github.com/en/actions

 

GitHub Actions 배포 자동화 과정

- https://aws.amazon.com/ko/blogs/devops/integrating-with-github-actions-ci-cd-pipeline-to-deploy-a-web-app-to-amazon-ec2/

 

 

  • GitHub Actions : .yml 파일에 따라 GitHub Repository에 특정 변동 사항을 트리거로 작동된다.
  • S3 : GitHub Actions에서 빌드한 결과물이 압축되어 S3로 전송되고 버킷에 저장된다.
  • Code Deploy : GitHub Actions에서 배포 명령을 받은 Code Deploy는 S3에 저장되어 있는 빌드 결과물을 EC2 인스턴스로 이동시킨다. appspec.yml의 단계에 따라 통작한다. EC2 인스턴스에 Code Deploy Agent와 JDK 11 버전 설치가 필요하다.
  • EC2 : Code Deploy에 의해 빌드 과정을 거친 프로젝트가 EC2 인스턴스로 전달되고, 빌드 파일(.jar)을 실행한다.

 

GitHub Actions를 이용한 배포 자동화 순서

  1. GitHub에서 GitHub Actions의 workflow를 생성한다. (.yml 파일 추가하고 커밋, 푸시 진행)
  2. GitHub Secret을 이용해 액세스 키 값을 저장하고, 프로젝트의 프로퍼티에서 키를 삭제한다. (공개되면 보안 이슈 발생)
  3. S3 버킷에 빌드된 결과물(압축 파일)이 저장되어 있는지 확인한다.
  4. 저장된 빌드 결과물을 EC2로 배포한다. (AWS의 CodeDeploy 서비스를 이용해 애플리케이션을 생성하고, deploy.sh 파일 추가 후에, 처음 추가했던 .yml 파일 하단에 Code Deploy 배포 명령을 추가)
  5. 배포 결과와 실행 및 에러 로그를 확인한다.

 

 

AWS IAM Service

IAM 서비스는 AWS 내에서 자격 증명(Authentication)에 대해 지원하고 제어한다.

대표적으로 User와 User Group 설정을 통해 AWS 계정에 대한 리소스 접근과 관리 권한을 다른 사람에게 부여하고, Role 설정을 통해 AWS 서비스 간 접근 권한을 부여할 수 있다.

- https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/introduction.html

'Develop > DevOps' 카테고리의 다른 글

Cloud 운영 전략  (0) 2022.12.09
리눅스 명령어 - 프로세스 Kill  (1) 2022.12.08
Cloud 개요 및 AWS 서비스 - 수동 배포  (0) 2022.12.08
Docker  (0) 2022.12.06
애플리케이션 빌드 / 실행 / 배포  (0) 2022.11.15