DevOps BootCamp/CI, CD 파이프라인 12

EC2 인스턴스에 CodeDeploy-Agent 설치

배포할 서버에 접속하여 최초 한 번만 설치 1. apt 저장소 업데이트 sudo apt-get update 2. ruby 설치 CodeDeploy Agent는 ruby라는 프로그래밍 언어로 작성 -> ruby 설치해줘야 함 # ubuntu 16.04 이상 sudo apt-get install ruby 3. wget 설치 sudo apt-get install wget 4. Agent 설치 wget으로 Agent의 설치파일을 다운받는 과정에 bucket 이름과 region 식별자를 적절히 적어주면 됨, 한국 리전을 사용하려면 wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install을 사용 # install..

카나리 배포

카나리 배포란? > 전체 인프라에 새로운 소프트웨어 버전을 릴리스하여 모든 사용자가 사용할 수 있도록 하기 전에 변경 사항을 천천히 릴리스함으로써 프로덕션 환경에 새로운 소프트웨어 버전을 도입하는 위험을 줄이는 기술 > 이 기법의 이름은 광부들이 광산으로 들어갈 때 새장에 카나리아를 넣어 가져가는 것에서 유래 > 광산에서 유독가스가 누출되면 광부들이 중독되기 전에 카나리아가 먼저 죽게 됩니다. > Canary Release는 비슷한 개념으로 잠재적 문제를 초기에 발견하여 전체 운영환경이나 사용자에게 영향을 미치는 것을 방지 즉, 특정 서버에만 배포를 진행하여 오류 여부를 확인하고 문제가 없다면 모든 서버에 새로운 버전을 단계적으로 배포하는 방식 카나리 배포 장점 문제 발생 시 먼저 배포가 진행되었던 서버..

롤링 배포

롤링 배포란? 롤링 배포는 애플리케이션이 실행 중인 인프라를 완전히 교체하여 이전 버전의 애플리케이션을 새로운 버전의 애플리케이션으로 서서히 교체하는 배포 전략 롤링 배포는 가용 자원이 제한적일 경우에 사용 롤링 배포의 방식 [출처] codestates 사용 중인 인스턴스(v1) 내에서 새 버전(v2)을 점진적으로 교체. 롤링 배포의 장점 업그레이드 과정에서 문제가 발견되면 일반적으로 롤링 배포를 "reverse"로 이동하여 새 버전의 앱을 제거하고 이전 버전을 다시 시작할 수 있음 Downtime이 없음 롤링 배포의 단점 배포가 진행되는 동안 구버전과 신버전이 공존하기 때문에 호환성 문제가 발생할 수 있음 배포 중인 서버는 서비스가 중단된 상태이기 때문에 서버 부하량을 체크하며 배포를 진행해야 함

블루/그린 배포

블루 / 그린 배포란? 애플리케이션 또는 마이크로서비스의 이전 버전에 있던 사용자 트래픽을 이전 버전과 거의 동일한 새 버전으로 점진적으로 이전하는 애플리케이션 릴리스 모델 블루 / 그린 배포가 필요한 이유 배포를 자동화할 때 겪는 어려움 중 하나는 소프트웨어를 최종 테스트 단계에서 실제 프로덕션 단계로 전환하는 컷오버 자체 > 다운 타임을 최소화하려면 이 작업을 신속하게 수행해야 함 컷오버(cutover) : 기존에 운영되던 환경을 중단시키고, 새로 구축된 환경으로 오픈하는 것 다운타임(Downtime) : 시스템을 이용할 수 없는 시간 블루 / 그린 배포의 방식 [출처] codestates blue를 실제 운영 중인 환경으로 가정 새로운 버전을 릴리스 하고 싶은 경우 green 환경에서 테스트를 진행..

서버 환경 변수 설정

1. 환경 변수를 AWS System Manager Parameter Store에서 설정할 것이기 때문에 AWS CLI를 먼저 EC2 instance에 설치해야 한다. 밑에 명령어를 차례대로 입력 > 이렇게 되면 aws CLI는 설치가 완료된 것이다 2. RDS 생성 검색 창에 RDS 입력 후 데이터베이스 생성을 클릭 엔진 옵션에 원하는 데이터베이스 소프트웨어를 선택 탬플릿은 사용 용도에 따라 선택하면 되는데, 비용이 제일 싼 걸 선택했다 스크롤을 내려 DB 인스턴스 식별자, 마스터 사용자 이름, 암호를 기입 컴퓨터 리소스는 기존 EC2에 연결하고 싶으면 오른쪽을 아니면 왼쪽을 클릭 VPC는 기존 EC2 VPC에 연결할 수 있음 DB 서브넷 그룹도 기존 존재하던 것에 연결할 수 있음 보안 그룹도 기존에 ..

클라이언트 환경 변수 설정

1. AWS 검색창에 CodeBuild를 검색하여 클릭 2. 원하는 빌드 프로젝트 선택 후 오른쪽 상단에 편집 -> 환경 클릭 3. 밑으로 스크롤을 쭉 내려 추가 구성을 클릭 4. 추가 구성을 클릭하면 새로 선택지가 나옴, 스크롤을 내려 환경 변수에 환경 변수 이름과 서버의 주소를 넣음 -> 환경 업데이트 클릭 5. 파이프라인에 변경사항 릴리스를 클릭 결과 > 이렇게 나온다면 클라이언트와 서버의 연결이 성공한 것이다

서버 배포 파이프라인

1. > 검색 창에 EC2를 검색하여 들어간 후 EC2를 생성 > 작업 -> 보안 -> IAM 역할 수정 클릭 IAM 역할 수정하는 이유: > 인스턴스가 다른 AWS 서비스와 통신할 때, 접근 권한을 주기 위함 2. 새 IAM 역할 생성 클릭 3. 역할 만들기 클릭 4. > AWS Deploy를 이용하여 EC2에 작업할 것이므로 AWS 서비스 선택 > EC2 선택 5. > CodeDeploy가 S3에 있는 코드를 사용할 것이므로 'AmazonS3 FullAcess' 선택 6. EC2에 Agent를 설치하기 위해 선택 7. AWSCodeDeployRole 사용하는 이유 > CodeDeploy에서 배포하는 애플리케이션을 관리하는 데 필요한 권한을 제공 > CodeDeploy 배포 그룹을 만들 때 사용됩니다...

클라이언트 배포 파이프라인

배포 자동화 > 한 번의 클릭 혹은 명령어 입력을 통해 전체 배포 과정을 자동으로 진행하는 것 이유: 수동적이고 반복적인 배포 과정을 자동화함으로써 시간이 절약 휴먼 에러(Human Error)를 방지 배포 자동화 파이프라인 배포에서 파이프라인(Pipeline) : 용어는 소스 코드의 관리부터 실제 서비스로의 배포 과정을 연결하는 구조를 뜻함 Source 단계: Source 단계에서는 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행 Build 단계: Build 단계에서는 Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공, Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달하는 작업을 수행 Deploy 단계: De..

코드로부터 환경 변수 분리

1. CI 상에서 주어진 Dockerfile을 이용해 Docker 이미지를 빌드하기 1. yaml 파일 작성 on : release 할 때마다 workflow 실행 step: uses: actions/checkout@v3 - github 레파지토리에 있는 파일 확인, 최신 버전 uses: docker/login-action@~ - Docker Hub에 로그인 with: - 'username', 'password'는 환경 변수 / Docker Hub 아이디와 패스워드를 통해 로그인 username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} ► github 레파지토리 세팅에서 secret 탭에 환경 변수를 설정해 주어야 ..

GitHub Action 작성법

1. 깃허브 홈페이지에 접속 > 로그인 한다 2. repository 생성 후 Actions 클릭 3. 그 다음 ' set up a workflow yourself ' 를 클릭 4. 파일 이름과 yml 파일을 작성한다. name: 필수. 워크플로의 이름. 이것은 사용 가능한 워크플로 목록에 표시 on 블록: push, pull_request할 때마다 workflow를 실행시킨다. jobs: jobs 단위로 개별 서버(정확히는 도커 컨테이너 단위)에서 작업이 수행 ※ 각 작업은 병렬로 실행 run-on: 사용할 운영 체제 예) ubuntu, window, macos 등 strategy: 변수 개념, 'node version'에 배열이 선언 되어 있는데, 배열안에 있는 원소를 순회하면서 반복해서 실행 > m..