❯ 배포 자동화(Automated Deployment)
배포를 위해서는 소스코드를 빌드하고 배포하는 과정을 거쳐야한다.
배포 자동화는 이러한 과정을 자동으로 진행하는 것을 말한다.
배포를 자동화함으로써 수동적이고 반복적인 과정을 자동화하여 시간과 휴먼에러를 줄일 수 있다.
배포 자동화는 파이프라인 구조를 통해 설명할 수 있다.
크게 Source stage, Build stage, Deploy stage 세개 구조로 구분된다.
현재 실습을 AWS를 사용해 진행중인데 AWS CodeBuild, CodeDeploy, Pipeline 등의 개발자 도구를 통해
비교적 간단하게 구현할 수 있다.
❯ 배포 자동화 실습
1. 환경 설정
AWS의 EC2를 통해 배포 자동화를 하기 위해서는 적절한 환경을 설정해주어야한다.
(해당 과정은 로컬이 아닌 EC2 인스턴스에서 진행한다.)
java 기반의 코드를 배포할 예정이므로 java를 설치해주고, AWS CLI와 Code Deploy Agent를 설치한다.
AWS CLI 설치: AWS를 CLI 방식으로 직접 조작할 수 있도록 해주는 도구
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
# curl은 URL을 통해 데이터를 전송하고, 전송받는 도구이다. AWS CLI 압축파일을 다운로드하고 이름을 "awscliv2.zip"로 지정한다.
$ sudo apt install unzip
# unzip을 설치하는 명령어이다. unzip은 압축파일을 푸는 도구이다.
$ unzip awscliv2.zip
# awscliv2.zip 파일의 압축을 푼다.
$ sudo ./aws/install
# AWS CLI 설치파일을 실행한다. 설치파일이 있는 디렉토리에서 실행한다.
aws --version 명령어를 통해 설치 여부를 확인할 수 있다.
Code Deploy Agent 설치: EC2인스턴스에서 CodeDeploy 서비스와 상호작용하기 위해 필요한 에이전트
$ sudo apt update
# 시스템 패키지 목록을 최신 상태로 업데이트한다.
$ sudo apt install ruby-full # [Y / n] 선택 시 Y 입력
# ruby-full 패키지를 설치한다. Ruby 프로그래밍 언어 전체 버전을 설치한다.
$ sudo apt install wget
# wget 패키지를 설치한다. wget는 명령줄에서 파일을 다운로드하는 도구이다.
$ cd /home/ubuntu
# 현재 작업 위치를 이동한다.
$ sudo wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
# AWS CodeDeploy Agent 설치 스크립트를 다운로드한다. wget를 사용해 URL에서 파일을 다운로드한다.
$ sudo chmod +x ./install
# 다운로드한 설치 스크립트에 실행 권한을 부여한다.
$ sudo ./install auto > /tmp/logfile
# 설치 스크립트를 사용하여 AWS CodeDeploy Agent를 자동으로 설치한다.
# auto 옵션은 대화형 모드 없이 자동으로 설치함을 의미하며 설치과정 로그를 /tmp/logfile에 저장한다.
sudo service codedeploy-agent status 명령어를 통해 정상 설치 및 실행 여부를 알 수 있다.
2. 소스코드 준비
실행시킬 소스코드에 appspec.yml 파일과 buildspec.yml, 필요한 셸 스크립트를 설정한다.
- appspec.yml: CodeDeploy가 읽는 파일로 배포 스펙을 나타낸 파일이다.
배포 프로세스를 정의하고 CodeDeploy가 애플리케이션을 배포할 때 수행해야할 작업을 지정해준다.
① 배포 전, 배포 중, 배포 종료 후 수행해야할 작업 등을 정의할 수 있다. ② 파일이나 디렉토리 구성을 정의할 수 있다.
③ 리소스 권한이나 환경변수를 설정해줄 수 있다. - buildspec.yml: CodeBuild가 읽는 파일로 빌드 스펙을 나타낸 파일이다. 소스코드가 빌드되는동안 수행해야할 작업을 정의한다.
① 빌드에 필요한 이미지, 환경변수, 인증설정 등 빌드 환경을 구성할 수 있다.
② 빌드 단계별로 수행해야할 작업을 정의할 수 있다. - 셸 스크립트(Shell Script): 특정 작업을 자동화할 수 있도록 셸에서 실행될 수 있는 명령어를 포함한 텍스트 파일.
각 단계별로 수행해야할 내용을 셸 스크립트로 작성한 후 appspec.yml, buildspec.yml에서 실행되도록 설정할 수 있다.
소스코드 작성이 완료되면 commit 한 뒤 GitHub과 같은 원격저장소에 push해서 코드를 준비한다.
3. AWS 설정
CodeDeploy에서 애플리케이션을 생성하고 적절한 IAM 권한을 설정한다.
CodePipeline에서 파이프라인을 생성하고 배포할 소스코드를 추가(GitHub 연동 등)해준다.
빌드 공급자를 CodeBuild로 설정하고 작성한 Buildspce의 경로를 지정해준다.
파이프라인 생성이 완료되면 자동으로 배포가 진행된다. 오류가 있을 경우 로그를 통해 확인할 수 있다.
❯ 환경변수 설정
소스코드에 비밀번호와 같은 환경변수가 있을 경우 외부에 노출이 되면 안된다.
이러한 중요한 정보는 AWS Parameter Store 서비스를 통해 환경변수로 지정해줄 수 있다.
Parameter Store에서 필요한 환경변수를 '파라미터 생성'을 통해 생성해준다.
파라미터의 이름은 /prefix/name/key 순서로 작성하며 값에는 각 파라미터에 할당할 값을 입력해준다.
소스코드에 AWS Parameter Store에 대한 의존성 설정을 하고 bootstrap.yml 파일을 작성한다.
bootstrap.yml 파일은 애플리케이션 초기화 단계에서 실행되어 환경 구성을 지정해준다.
마지막으로 application 설정파일에 변수 값을 AWS Parameter Store에서 가져오도록 설정해준다.
수정된 코드를 commit, push해주면 배포 자동화를 통해 변경사항이 자동으로 반영된다.
최근에는 AWS 이용과 관련된 내용을 학습하고 있는데 상상했던 기능들의 거의 다 구현되어있는걸 알 수 있었다.
이걸 어떻게 구상하고 구현해냈을까 신기하기도 하고 대단하게 느껴졌다.
언젠가는 나도 뭔가 새로운걸 만들어내거나 현재 있는걸 더 편하고 좋게 만들 수 있는 날이 오지 않을까!
상상하면서 오늘도 열심히 공부해야겠다 😊
'부트캠프 개발일기 > Cloud' 카테고리의 다른 글
77일차: 운영 전략 (0) | 2023.06.02 |
---|---|
76일차: Github Actions (0) | 2023.06.01 |
74일차: Docker (0) | 2023.05.30 |
73일차: 3 Tier Architecture 배포 실습 (0) | 2023.05.26 |
72일차: 배포(AWS) (0) | 2023.05.25 |