본문 바로가기
CSP (Cloud Service Provider)/AWS

[AWS] code deploy

by 알 수 없는 사용자 2023. 5. 7.

베하~~ 수 지 타 산 입니다

봄비가 오는 주말이네요!!

이번 주 공휴일이 많았는데 다들 즐겁게 보내셨나요?

그럼 오늘은 code deploy에 대해 공부할게요

팔로팔로팔로미 

 


 

Code deploy란?

CodeDeploy는 SourceCode를 운영환경에 자동 배포하는 역할을 수행하는 AWS Service입니다. 즉, CD 지속적 배포 서비스입니다. CodeDeploy는 Amazon EC2 인스턴스, 온프레미스 인스턴스, 서버리스 Lambda 함수 또는 Amazon ECS 서비스로 애플리케이션 배포를 자동화하는 배포 서비스입니다.

아래를 포함하여 다양한 애플리케이션 콘텐츠를 거의 무제한으로 배포할 수 있습니다.

  • 코드
  • 서버리스 AWS Lambda 함수
  • 웹 및 구성 파일
  • Executables
  • 패키지
  • 스크립트
  • 멀티미디어 파일

CodeDeploy는 서버에서 실행되고 Amazon S3 버킷, GitHub 리포지토리 또는 Bitbucket 리포지토리에 저장되는 애플리케이션 콘텐츠를 배포할 수 있습니다. 또한 CodeDeploy는 서버리스 Lambda 함수를 배포할 수 있습니다. CodeDeploy를 사용하기 위해 기존 코드를 변경할 필요가 없습니다.

 

 

 

AWS CodeDeploy의 이점

  • 서버, 서버리스 및 컨테이너 애플리케이션 : CodeDeploy를 사용하면 서버 상의 기존 애플리케이션과 서버리스 AWS Lambda 함수 버전 또는 Amazon ECS 애플리케이션을 배포하는 애플리케이션을 모두 배포할 수 있습니다.
  • 배포 자동화 :  CodeDeploy는 개발, 테스트 및 프로덕션 환경에 걸쳐 애플리케이션 배포를 완전 자동화합니다. 그리고 CodeDeploy는 인프라에 맞춰 규모를 조정할 수 있으므로 인스턴스 하나 또는 수천 개에 배포할 수 있습니다.
  • 가동 중지 최소화 : 애플리케이션이 EC2/온프레미스 컴퓨팅 플랫폼을 사용하는 경우 CodeDeploy는 애플리케이션 가용성을 극대화합니다. 인 플레이스(In-place) 배포에서 CodeDeploy는 Amazon EC2 인스턴스 전체에 대해 롤링 업데이트를 수행합니다. 업데이트 시 오프라인 상태가 될 수 있는 인스턴스 수를 지정할 수 있습니다. 블루/그린 배포 시에는 최신 애플리케이션 수정이 대체 인스턴스에 설치됩니다. 선택한 경우 새로운 환경 테스트를 완료한 직후 이러한 인스턴스로 트래픽이 다시 라우팅됩니다. 두 가지 배포 유형에 대해 CodeDeploy는 사용자가 구성한 규칙에 따라 애플리케이션 상태를 추적합니다.
  • 중지 및 롤백 : 오류가 있는 경우 자동 또는 수동으로 배포를 중지하고 롤백할 수 있습니다.
  • 중앙 집중식 제어 : CodeDeploy 콘솔 또는 AWS CLI를 통해 배포 상태를 시작 및 추적할 수 있습니다. 각 애플리케이션 개정이 배포된 시점 및 Amazon EC2 인스턴스가 나열된 보고서가 제공됩니다.
  • 채택 편의성 :  CodeDeploy는 플랫폼과 관련된 제약이 없으므로 모든 애플리케이션과 작동합니다. 사용자는 설정 코드를 쉽게 재사용할 수 있습니다. 또한 CodeDeploy는 소프트웨어 릴리스 프로세스 또는 지속적 전달 도구 체인과 통합이 가능합니다.
  • 동시 배포 : EC2/온프레미스 컴퓨팅 플랫폼을 사용하는 1개 이상의 애플리케이션이 있는 경우에는 CodeDeploy를 통해 동일한 인스턴스 세트에 동시에 배포할 수 있습니다.

 

 

Code deploy의 구성

에이전트

ec2에 설치하는 프로그램으로, CodeDeploy에서 해당 ec2를 사용할 수 있도록 하는 프로그램입니다. ec2이외의 배포환경에는 필요하지 않습니다. 에이전트는 , 어플리케션 개정, 배포기록, 배포스크립트 등을 EC2의 루트 디렉토리에 저장합니다. Amazon Linux, Ubuntu server, RHEL 인 경우, /opt/codedeploy-agent/deployment-root 에 위치합니다.

 

 

 

 

CodeDeploy 주요 구성 요소

애플리케이션

애플리케이션은 배포할 애플리케이션을 식별할 수 있는 고유 이름입니다. CodeDeploy는 컨테이너 역할을 하는 이 이름을 사용하여 배포 중에 수정 버전, 배포 구성 및 배포 그룹의 올바른 조합을 참조하도록 합니다.

 

컴퓨팅 플랫폼

컴퓨팅 플랫폼은 CodeDeploy가 애플리케이션을 배포하는 플랫폼입니다. 다음과 같은 세 가지 컴퓨팅 플랫폼이 있습니다.

  • EC2/온프레미스: 물리적 서버의 인스턴스를 설명합니다. Amazon EC2 클라우드 인스턴스나 온프레미스 서버 또는 둘 다일 수 있습니다. EC2/온프레미스 컴퓨팅 플랫폼을 사용하여 만든 애플리케이션은 실행 파일과 구성 파일, 이미지 및 기타 항목으로 구성될 수 있습니다.
  • EC2/온프레미스 컴퓨팅 플랫폼을 사용하는 배포에서는 인 플레이스 또는 블루/그린 배포 유형을 사용하여 인스턴스로 트래픽이 전송되는 방식을 관리합니다. 자세한 내용은 CodeDeploy 배포 유형 개요 섹션을 참조하세요.
  • AWS Lambda: 업데이트 버전의 Lambda 함수로 구성된 애플리케이션을 배포하는 데 사용됩니다. AWS Lambda는 고가용성 컴퓨팅 구조의 서버리스 컴퓨팅 환경에서 Lambda 함수를 관리합니다. 컴퓨팅 리소스에 대한 모든 관리는 AWS Lambda를 통해 수행됩니다. 자세한 정보는 서버리스 컴퓨팅 및 애플리케이션을 참조하세요. AWS Lambda 및 Lambda 함수에 대한 자세한 내용은 AWS Lambda를 참조하세요.
  • 카나리(Canary), 선형(Linear) 또는 한 번에 모두(All-at-once) 구성을 선택하여 업데이트된 Lambda 함수 버전으로 트래픽을 전송하는 방식을 관리할 수 있습니다.
  • Amazon ECS: Amazon ECS 컨테이너화된 애플리케이션을 작업 세트로 배포하는 데 사용됩니다. CodeDeploy는 애플리케이션의 업데이트 버전을 새로운 대체 작업 세트로 설치하여 블루/그린 배포를 수행합니다. CodeDeploy는 프로덕션 트래픽을 원래 애플리케이션 작업 세트에서 대체 작업 세트로 다시 라우팅합니다. 배포가 성공하면 기존 작업 세트는 종료됩니다. Amazon ECS에 대한 자세한 내용은 Amazon Elastic Container Service를 참조하세요.
  • 카나리(Canary), 선형(Linear) 또는 한번에 모두(All-at-once) 구성을 선택하여 배포 중 업데이트된 작업 세트로 트래픽을 전송하는 방식을 관리할 수 있습니다.

 

배포 구성

배포 구성이란 배포 중 CodeDeploy에서 사용하는 배포 규칙과 배포 성공 및 실패 조건 집합입니다. EC2/온프레미스 컴퓨팅 플랫폼을 사용하는 배포의 경우, 해당 배포에 대해 정상 인스턴스의 최소 개수를 지정할 수 있습니다. 배포에서 AWS Lambda 또는 Amazon ECS 컴퓨팅 플랫폼을 사용하는 경우, 업데이트된 Lambda 함수 또는 ECS 태스크 집합으로 트래픽을 라우팅하는 방식을 지정할 수 있습니다.

EC2/온프레미스 컴퓨팅 플랫폼을 사용하는 배포에서 최소 정상 호스트 개수를 지정하는 방법은 최소 정상 인스턴스 및 배포 단원을 참조하세요.

다음은 Lambda 또는 ECS 컴퓨팅 플랫폼을 사용하는 배포에서 트래픽을 라우팅하는 방식을 지정하는 배포 구성입니다.

  • 카나리(Canary): 트래픽이 두 증분으로 나뉘어 이동합니다. 첫 번째 증분에서 업데이트된 Lambda 함수 또는 ECS 태스크로 이동할 트래픽의 백분율 및 두 번째 증분에서 나머지 트래픽의 이동을 시작하기 전까지 간격(분)을 지정하는 사전 정의된 카나리(Canary) 옵션 중에서 선택할 수 있습니다.
  • 리니어(Linear): 트래픽이 동일한 증분 이동하며 각 증분 간에 시간 간격(분)이 동일합니다. 각 증분에서 이동할 트래픽 비율(%)과 각 증분 간의 시간 간격(분)을 지정하는 사전 정의된 선형 옵션에서 선택할 수 있습니다.
  • 한 번에 모두(All-at-once): 모든 트래픽이 원본 Lambda 함수 또는 ECS 태스크 집합에서 업데이트된 함수 또는 태스크 집합으로 전부 한꺼번에 이동합니다.

 

배포 그룹

배포 그룹이란 개별 인스턴스 집합입니다. 배포 그룹에는 개별적으로 태그가 지정된 인스턴스, Amazon EC2 Auto Scaling 그룹의 Amazon EC2 인스턴스 또는 둘 다가 포함됩니다. Amazon EC2 인스턴스 태그에 대한 자세한 정보는 콘솔을 사용한 태그 작업을 참조하세요. 온프레미스 인스턴스에 대한 자세한 정보는 Working with On-Premises Instances 단원을 참조하세요. Amazon EC2 Auto Scaling에 대한 자세한 내용은 Amazon EC2 Auto Scaling과 CodeDeploy 통합 단원을 참조하세요.

 

 

배포 유형

배포 유형이란 배포 그룹의 인스턴스에서 최신 애플리케이션 수정 버전을 사용 가능하게 만드는 방법입니다. 배포 유형에는 두 가지가 있습니다.

  • 현재 위치 배포: 배포 그룹의 각 인스턴스에 있는 애플리케이션이 중지되고 최신 애플리케이션 개정 버전이 설치되며 애플리케이션의 새 버전이 시작되고 유효성이 검사됩니다. 로드 밸런서를 사용하면 배포가 진행될 때 각 인스턴스를 등록 취소한 후 배포가 완료된 후 서비스로 복원할 수 있습니다. EC2/온프레미스 컴퓨팅 플랫폼을 사용하는 배포만 인 플레이스 배포를 사용할 수 있습니다. 현재 위치 배포에 대한 자세한 내용은 인 플레이스 배포 개요 단원을 참조하세요.
  • Blue/Green 배포: 배포 동작은 사용하는 컴퓨팅 플랫폼에 따라 다릅니다.블루/그린 배포에 대한 자세한 내용은 블루/그린 배포 개요 단원을 참조하세요.
    • EC2/온프레미스 컴퓨팅 플랫폼에서의 블루/그린 배포: 배포 그룹(원래 환경)의 인스턴스가 다음 단계를 거쳐 인스턴스의 다른 집합(대체 환경)으로 대체됩니다.에서만 작동합니다.
      • 인스턴스는 대체 환경을 위해 프로비저닝됩니다.
      • 최신 애플리케이션 수정은 대체 인스턴스에 설치됩니다.
      • 애플리케이션 테스트 및 시스템 검증과 같은 활동에 선택적 대기 시간이 발생합니다.
      • 대체 환경의 인스턴스가 Elastic Load Balancing 로드 밸런서에 등록되고 트래픽이 이러한 인스턴스로 라우팅됩니다. 원래 환경의 인스턴스는 등록이 취소되고 종료되거나 다른 용도로 계속 실행될 수 있습니다.
    • AWS Lambda 또는 Amazon ECS 컴퓨팅 플랫폼에서의 블루/그린 배포: 트래픽이 Canary(카나리), Linear(리니어) 또는 All-at-once(한 번에 모두) 배포 구성에 따라 증분 이동합니다. 자세한 내용은 배포 구성 섹션을 참조하세요.
    • AWS CloudFormation을 통한 블루/그린 배포: AWS CloudFormation 스택 업데이트의 일부로 트래픽이 현재 리소스에서 업데이트된 리소스로 이동합니다. 현재는 ECS 블루/그린 배포만 지원됩니다.

 

IAM 인스턴스 프로파일

IAM 인스턴스 프로파일이란 Amazon EC2 인스턴스에 연결하는 IAM 역할입니다. 이 프로파일에는 애플리케이션이 저장되는 Amazon S3 버킷 또는 GitHub 리포지토리에 액세스할 때 필요한 권한이 포함됩니다. 자세한 내용은 4단계: Amazon EC2 인스턴스에 대한 IAM 인스턴스 프로파일 만들기 섹션을 참조하세요.

 

개정

수정 버전이란 애플리케이션의 버전입니다. AWS Lambda 배포 수정 버전은 배포할 Lambda 함수에 대한 정보를 지정하는 YAML 형식 또는 JSON 형식의 파일입니다. EC2/온프레미스 배포 수정 버전은 소스 코드, 웹 페이지, 실행 파일 및 배포 스크립트 등과 같은 소스 콘텐츠 및 애플리케이션 사양 파일(AppSpec 파일)을 포함하는 아카이브 파일입니다.AWS Amazon S3 버킷에 Lambda 수정 버전도 저장할 수 있습니다. EC2/온프레미스 수정 버전은 Amazon S3 버킷 또는 GitHub 리포지토리에 저장됩니다. Amazon S3의 경우 수정 버전은 Amazon S3 객체 키 및 해당 ETag, 버전 또는 둘 다에 의해 고유하게 식별됩니다. GitHub의 경우 수정은 커밋 ID에 의해 고유하게 식별됩니다.

 

서비스 역할

서비스 역할이란 AWS 리소스에 액세스할 수 있는 권한을 AWS 서비스에 부여하는 IAM 역할입니다. 서비스 역할에 연결하는 정책에 따라 서비스에 액세스할 수 있는 AWS 리소스와 서비스에서 이러한 리소스로 수행할 수 있는 작업이 결정됩니다. CodeDeploy의 경우 서비스 역할은 다음 작업에 사용됩니다.

  • 인스턴스에 적용된 태그 또는 인스턴스와 연결된 Amazon EC2 Auto Scaling 그룹 이름을 읽습니다. 이를 통해 CodeDeploy는 애플리케이션을 배포할 수 있는 인스턴스를 식별할 수 있습니다.
  • Amazon EC2 Auto Scaling 그룹 및 Elastic Load Balancing 로드 밸런서의 인스턴스에 대한 작업을 수행합니다.
  • 지정된 배포 또는 인스턴스 이벤트가 발생할 때 알림을 전송할 수 있도록 Amazon SNS 주제에 정보를 게시합니다.
  • CloudWatch 경보에 대한 정보를 검색하여 배포에 대한 경보 모니터링을 설정합니다.

 


code deploy에 대한 이론을 위주로 살펴보았습니다. 

이는 보통 인프라에 익숙하지 않거나 혹은

익숙하더라도 쉽고 간단하게

코드를 배포하는  cicd 서비스이므로 실습까지는 진행하지 않고

간단하게 어떤 서비스이고 어떤 구성이고

언제 쓰이는지에 대해 공부했습니다

그럼 담주에도 만나요

제에에에에바아아아알

'CSP (Cloud Service Provider) > AWS' 카테고리의 다른 글

[AWS] CloudFront 쿠키 기반의 콘텐츠 캐싱  (0) 2023.05.11
[AWS] EKS addon amazon ebs csi 드라이버 설치  (0) 2023.05.08
[AWS] CloudWatch  (0) 2023.04.29
[AWS] Cloudtrail  (0) 2023.04.17
[AWS] AWS Certificate Manager  (0) 2023.03.30

댓글