'AWS로 구현하는 MAS와 컨테이너 오캐스트레이션' 강의를
블로그를 통해 구매하시는 분들에게만 10%할인 중입니다.
이미지를 클릭하고, 아래 쿠폰번호를 입력해 주세요!
16861-259843d6c2d7
AWS CodeDeploy 및 CI/CD 에 대한 설명은 아래 글로 대신합니다.
CI/CD 파이프라인 구축을 위해 AWS CodeDeploy 설정
CodeDeploy가 CI/CD 파이프라인에서 담당할 과정은 다음과 같다
- CodeBuild 빌드 작업이 완료되면 EC2에 접속 CodeDeploy agent 와 통신
- AppSpec에 작성된 명령을 실행
- ECR에 저장된 이미지를 풀
- 풀 받은 이미지를 실행
- 실행된 프로그램이 게이트웨이에 인식이 되었는지 확인 후 이전 버전의 프로그램 종료
AWS CodeDeploy 애플리케이션 생성
먼저 AWS 콘솔에서 CodeDeploy 서비스로 이동하고 '애플리케이션 생성' 버튼을 클릭한다
애플리케이션의 이름을 입력하고 배포 대상의 서비스 유형을 선택한다.
AWS CodeDeploy 배포 그룹 생성
생성한 CodeDeploy 애플리케이션 선택 화면에서 배포 그룹 생성 버큰 클릭
- 서비스 역할 - CodeDeploy는 EC2에 접속하여 배포를 진행해야하므로 그에 맞는 역할 부여가 필요하다.
AWSCodeDeployRole 역할에 EC2 이외에 ElasticLoadbalancing, AutoSacling 등의 권한도 같이 들어있어 해당 역할만 추가해주면 된다 - 배포 유형 - EC2 인스턴스 하나에서 배포를 하기 때문에 '현재 위치' 를 선택. 오토 스케일링 그룹이 있는 경우에는 '블루/그린' 업데이트를 선택해서 설정할 수 있다.
- 환경 구성 - EC2 인스턴스를 선택하고 배포하려는 인스턴스를 지정할 수 있는 키와 값을 선택
- AWS CodeDeploy 에이전트 설치 - 배포할 EC2에 에이전트가 설치할 여부를 선택
- 안 함 - 에어전트 설치가 미리 되어있을 경우 새로 설치하지 않고 업데이트도 하지 않음
- 한 번만 - 에이언트가 설치되어있지 않을 경우 새로 설치하고, 이미 설치되어있다면 아무런 작업을 하지 않음
- 지금 업데이트 - 에이전트가 이미 설치되어 있으면 최신버전으로 즉시 업데이트
- 업데이트 일정 예약 - 설정한 일정에 따라 에이전트를 업데이트 하도록 설정
- 배포 구성 - 여러대의 인스턴스에 배포할 경우 인스턴스에 얼마나 많은 트래픽을 라우팅할지 결정하는 정책
- CodeDeployDefault.OneAtTime - 한 번에 하나의 인스턴스에만 배포 수행. 배포 중에 서비스 중단이 없도록할 수 있지만 배포 시간이 길어질 수 있다.
- CodeDeployDefault.HalfAtTime - 배포 단계에서 사용 가능한 인스턴스의 절반에 배포 수행.
- CodeDeployDefault.AllAtOnce - 모든 인스턴스에 동시에 배포 수행. 가장 빠르지만 배포 중 모든 서비스가 중단될 수 있다.
배포 환경에 맞게 나머지 설정을 마치고 배포 그룹 생성
AWS CodeDeploy 배포 생성
생성된 배포 그룹으로 이동 후 '배포 생성' 버튼 클릭
개정이란 배포를 위해 필요한 애플리케이션 수정 사항을 의미하며 개정은 두 가지 구성 요소로 구성된다.
- 애플리케이션 수정 사항 - 애플리케이션 코드, 웹 서버, 실행 파일, 관련 라이브러리 Asset 등이 포함된다.
- AppSpec 파일 - 애플리케이션 배포 방법에 대한 지침이 포함된 yml 이나 json 형식의 파일. 이 파일을 통해 CodeDeploy 에이전트에게 애플리케이션을 인스턴스에 어떻게 배포할지, 어떤 순서로 서비스를 중지하고 시작할지를 명령한다.
- 개정 유형 - 개정 파일이 저장된 위치
- 개정 위치 - S3에 저장을 선택했을 경우 저장된 버킷 위치
개정은 CodePipelin 으로 빌드 및 배포를 실행 시 CodeBuild의 빌드 프로세스에서 개정 파일을 저장할 수 현재는 CodePipeline 생성 전이기에 S3 임의의 버킷에 저장해 배포를 진행하도록 한다.
개정파일(appspec.yml) S3에 저장 및 script 작성
애플리케이션 배포 및 실행, 종료 명령어가 담긴 개정파일을 작성한다.
version: 0.0
os: linux
hooks:
BeforeInstall:
- location: scripts/install_dependencies.sh
timeout: 300
runas: root
AfterInstall:
- location: scripts/start_app.sh
timeout: 300
runas: root
- version - appspec 파일의 버전
- os - 대상 운영체제를 명시. linux와 windows 만 지원
- files - CodeDeploy 에이전트가 소스 위치에서 대상 위치로 파일을 복사해야 하는지 지정
- permissions - 파일이나 디렉토리에 설정할 권한을 지정. linux 만 사용 가능
- hooks - 배포의 생명주기 이벤트에 대한 CodeDeploy가 실행해야 하는 스크립트를 지정한다. 각 후크는 미리 정의된 스크립트를 포함할 수 있다.
- ApplicationStop - 새 버전을 배포하기 전에 이전 버전의 애플리케이션을 중지하는 단계
- BeforeInstall - 애플리케이션이 복사되기 전에 실행하는 단계. 여기서 종속성을 설치하거나 기타 사전 설지 작업을 수행한다.
- Install - 애플리케이션 파일이 인스턴스로 복사되는 단계
- AfterInstall - 파일이 복사된 후 실행하는 단계
- ApplicationStart - 애플리케이션을 시작하는 단계
- ValidateService - 애플리케이션 배포를 검증하는 단계
location에 지정된 스크립트는 각자의 환경에 맞게 이미지 풀, 이미지 런, 이전 버전 종료 등을 작성하고 경로도 맞게 설정하여 s3에 업로드 해준다.
확장자는 zip, tar, tgz
'배포 생성'의 '개정 위치'에 개정파일 업로드 경로를 입력해준다.
배포 결과 확인
docker ps 명령어를 통해 아래와 같이 배포한 이미지가 생성된것을 확인할 수 있다.
AWS Pipeline의 장점
모든 파이프라인 구축이 성공했고 AWS Pipeline을 통해 CI/CD를 구축했을경우의 장점은 다음과 같다.
- AWS 서비스와의 통합성 - CodePipeline은 AWS 서비스로 Jenkin와 같은 다른 서비스들에 비해 EC2, ECR 등과 같은 서비스에 통합이 쉽고, IAM을 통한 보안 및 엑세스 관리 기능을 사용할 수 있다.
- 유지 관리의 편리함 - CodePipeline은 완전히 관리되는 서비스로, Jenkins와 같은 자체 호스팅된 도구에 비해 서버 설정, 유지 보수, 업그레이드 등에 대한 부담이 적다.
- 확장성 및 내구성 - AWS에서 제공되는 서비스인 만큼 확장성과 내구성에대한 검증이 되어있고 여러 파이프라인을 동시에 실행함에 따라 필요한 리소스를 자동으로 확장할 수 있다.
그러나 Jenkins와 같은 서비스들은 매우 유연하며, 다양한 플러그인을 통해 거의 모든 CI/CD 작업을 수행할 수 있는 등의 장점이 있을 수 있다.
따라서 각 서비스는 요구사항이나 서비스 환경에 따라 선택이 달라질 수 있다.
'AWS' 카테고리의 다른 글
[AWS] CloudFormation 정리 (0) | 2024.07.04 |
---|---|
[AWS] CodePipeline으로 CI/CD 구현하기 (2) | 2023.05.30 |
[AWS] CodeBuild를 이용한 Docker 이미지 빌드 및 ECR에 저장 (1) | 2023.05.26 |
[AWS] CI/CD 파이프라인과 AWS CI/CD 서비스 (2) | 2023.05.26 |
[AWS] AWS SNS와 SQS를 사용한 이벤트 처리 구현하기 (w.Spring Boot) (0) | 2023.05.03 |