gony-dev 님의 블로그

Section 24. AWS CICD: CodeCommit, CodePipeline, CodeBuild, CodeDeploy - 2 본문

AWS

Section 24. AWS CICD: CodeCommit, CodePipeline, CodeBuild, CodeDeploy - 2

minarinamu 2024. 11. 27. 21:35

AWS CodeDeploy

CodeDeploy는 어플리케이션 배포를 자동화해주는 배포 서비스이다.
온-프레미스 서버, 람다 함수, ECS 서비스, EC2 인스턴스에 새로운 어플리케이션 버전을 배포한다.
배포가 실패하거나, 알람이 트리거되면 자동으로 롤백을 시작할 수가 있다!
appspec.yml인 파일을 사용하여 배포 방식을 정의할 수가 있다.

CodeDeploy - EC2/On-preises Platform

  • 우리는 CodeDeploy를 사용하여 두 종류의 배포를 할 수 있다.
    하나는 in-place 배포, 다른 하나는 블루/그린 배포이다.
  • CodeDeploy를 할 때는 CodeDeploy 에이전트를 타깃 인스턴스에 배포해야만 한다.
    그 에이전트가 인스턴스 업데이트를 수행하기 때문이다.
  • 우리는 배포 속도도 정의할 수 있다.
    • AllAtOnce | 다운타임이 제일 길다.
    • HalfAtATime | 용량이 50% 감소한다.
    • OneAtATime | 가장 느리고, 가용성에 미치는 영향이 매우 낮다.
    • Custome | 맞춤형 배포 속도 정의

1. CodeDeploy - In-Place Deployment

2. CodeDeploy - Blue/Green Deployment

CodeDeploy Agent

  • CodeDeploy Agent는 EC2 인스턴스에서 실행되어야만 한다.
  • 만일 시스템 매니저를 사용하고 있을 경우, 자동으로 설치 및 업데이트되는 특징이 있으며,
    EC2 인스턴스는 배포 번들을 얻기 위해 S3에 접근하는 IAM 권한을 필요로 할 것이다.

CodeDeploy - Lambda Platform

  • CodeDeploy는 람다 별칭들을 위해 자동으로 트래픽을 이전하도록 할 수 있다.
  • 이것은 SAM 프레임워크 내에서 통합되는 특징이 있다.

  • 위의 사진은 V1에서 V2로 이전하기 위한 트래픽 이전 함수의 사용방식이다.
  • X가 100이 될 때까지 X를 변경해 나가는데 PROD 라는 별칭으로 된 모든 트래픽이 V2함수로 리디렉션되는 것을 보여준다.
  • X를 변화시키는 방법들을 알아보자.
    1. Linear | 100%가 될 때까지 N분마다 트래픽을 증가시킨다.
    2. Canary | 함수에 적은 양의 트래픽을 주다가 100%로 올린다.
    3. AllAtOnce | 즉시 v1에서 v2로 건너뛴다.

CodeDeploy - ECS Platform

  • CodeDeploy는 새로운 ECS 태스크 정의를 자동으로 배포할 수 있으며
    오로지 블루/그린 배포에만 사용된다.

  • X를 변화시키는 여러가지 방안들을 알아보자.
    1. Linear | 100%까지 매 N분마다 트래픽을 증가시킨다.
    2. Canary | 함수에 X%만큼의 트래픽을 줬다가 100%로 증가시킨다.

CodeDeploy - Deployment to EC2 & ASG

1. Deploy to EC2

  • EC2 인스턴스에 접근할 때, appspec.yml + 배포 전략을 사용하여 어플리케이션을 배포하는 방법이 있다.
    EC2 인스턴스 플릿을 인 플레이스 업데이트한 후, 후크를 사용할 수도 있다. appspec.yml에 심어서 각 단계의 마지막에 배포를 확인하는 방식으로 말이다.

2. Deploy to an ASG

  • ASG에 배포하는 방식은 두 가지가 있다.
  1. In-place Deployment
    • 존재하는 EC2 인스턴스에 업데이트 하는 방식이다.
    • ASG에 새로 EC2 인스턴스를 생성했을 경우에는 CodeDeploy에서 자동으로 배포를 받아오기 때문에 편리하다!
  2. Blue/Green Deployment
    • 새 ASG가 생성되고, 설정이 복제가 된다.
    • 예전 ASG에 해당하는 EC2 인스턴스를 얼마나 유지할지 정해야 하며,
      하나의 대상 그룹에서 다른 대상 그룹으로 리디렉팅 하는 ELB는 장애 조치가 이루어 진다.
  • ReDeploy & Rollbacks
    • 롤백은 이전에 배포된 어플리케이션의 리비전을 재배포하는 것을 말한다.
    • 배포를 롤백하는 방법에는 두 가지가 존재한다.
      1. Automatically - 배포에 실패했을 때나 CloudWatch 알람이 트리거 되어 배포에 실패했다고 알려주는 경우
      2. Manually(수동)
    • "Disable Rollbacks"라는 롤백 비활성화 기능은 배포에 대해 롤백이 실행되지 않는다.
    • 롤백을 하면 CodeDeploy는 마지막으로 감지한 성공한 리비전을 새로 배포하는데 이전으로 돌아가진 않는다.
      그저 가장 나중에 배포에 성공한 것을 사용할 뿐이다.

AWS CodeStar

  • CodeStar는 모든 서비스를 그룹화하는 통합 솔루션이다.
  • CodeCommit, CodeBuild, CodeDeploy, CodePipeline, CloudWatch 같은 모든 도구를 한 번에 볼 수 있다.
  • CodeStart에는 문제 트래킹 도구가 있고, 이 도구를 문제 추적에 사용하면 JIRA 또는 Github의 문제와 통합되어 사용하기 편리하다.
  • Cloud9을 사용하면 코딩을 통합할 수 있다.
  • 커스터마이징하는 데에 한계가 있지만, 각 도구는 기본 도구이기에 자체 콘솔에서 사용자 지정이 가능하다!

AWS CodeArtifact

  • CodeArtifact는 소프트웨어를 빌드할 때 자체 소프트웨어가 종속되는 다른 소프트웨어를 사용한다는 개념이다.
    쉽게 말해 코드 종속성이라고 보면 된다.
  • 소프트웨어를 빌드할 때마다 리포지토리로 푸시하면 다른 소프트웨어가 그것을 기반으로 빌드된다.
  • 일반적으로 artifact를 사용할 때는 자체 아티팩트 관리 시스템을 설정한다.
    CodeArtifact를 사용하면 소프트웨어 개발을 위한 안전하고 확장 가능하며 비용 효율적인 아티팩트 관리 시스템을 얻을 수 있다!

작동 방식

CodeArtifact를 프록시 처리하여 요청을 처리할 수 있다!

요청이 프록시 처리되는 이유

 

1. 네트워크 보안

  • 개발자가 CodeArtifact와만 상호작용하고 CodeArtifact는 퍼블릭 아티팩트 리포지토리로 요청을 프록시 처리하는데,
    이때 종속성을 가져오므로 CodeArtifact 자체에 캐싱되어야 한다.
  • 따라서 퍼블릭 아티팩트 리포지토리에서 종속성이 사라져도 CodeArtifact 내에 자체 사본이 남아있기에
    향후 코드가 항상 빌드될 수 있도록 하는데에 좋다!

2. 자체 아티팩트를 푸시하는 방법

  • IT리더나 개발자가 패키지를 게시 및 승인하여 CodeArtifact 내 다른 리포지토리로 푸시되도록 할 수 있다.
    이 말은 모든 아티팩트가 VPC라는 한 곳에 있고, 모든 항목은 CodeArtifact 관리 시스템 내에 이미 있는
    모든 코드에 종속된다는 의미이다.

EventBridge Integration

  • EventBridge 통합은 CodeArtifact 변경사항이 AWS의 다운스트림에서 일부 항목을 트리거하는 방식이다.
  • CodeArtifact에서 이벤트는 패키지 생성, 삭제, 수정될 때 발생하고 이를 EventBridge로 보낸다.
    • EventBridge에서는 lambda, Step Funtions, SQS, SNS, CodePipeline과 통합하고 트리거할 수 있다.
  • CodePipeline이 있는 이유는 안에 CodeCommit이 있을 수 있고, 종속성이 업데이트되었으니 CodeBuild를 트리거하여 업데이트된 종속성으로 어플리케이션을 다시 빌드하는데, 최종적으로는 CodeDeploy를 사용하여 프로덕션 환경으로 새 어플리케이션을 배포하기 위함이다.

 


Amazon CodeGuru

  • CodeGuru는 머신러닝 기반 서비스로 두 가지 기능을 제공한다.
  1.  CodeGuru Reviewer | 정적 코드 분석으로 자동 코드 분석을 실시한다.
                                          버그를 감지할 때 유용하다.
  2. CodeGuru Profiler | 실행하는 동안 어플리케이션 성능을 분석하여 가시성이나 권장 사항을 제공한다.
                                      또한 비용이 높은 사전 프로덕션의 코드 줄을 감지하고 최적화하며 어플리케이션 배포 시 실시간으로 어플리케                                    이션을 측정하고, 프로덕션에서 성능과 비용 개선 사항을 식별하여 코드에 직접 권장 사항을 제공한다.

  • CodeGuru Reviewer
    • 자동화 추론과 머신 러닝을 사용한다.
    • 수천 개의 오픈 소스 저장소와 CodeGuru로 분석한 코드 분석이 있고, Amazon 저장소에도 코드 분석이 있어 머신 러닝을 통해
      Code reviewer가 학습한다.
  • CodeGuru Profiler
    • 코드 비효율성을 식별하고 삭제한다.
    • 어플리케이션 성능을 향상시키는데 사용량을 감소시키거나, 어떤 오브젝트가 메모리 공간을 많이 차지하는지 식별한다.
    • 어플리케이션에 이상이 있을 시 이를 탐지할 수 있다.

1. CodeGuru - Agent Configuration

  • CodeGuru 프로파일러는 에이전트 덕분에 작동한다.
    그리고 이 에이전트를 구성하여 프로파일러를 미세 조정할 수 있다. 각 구성요소들을 알아보자.
  1. MaxStackDepth - 프로필에서 표시될 코드의 양을 의미
  2. MemoryUsageLimitPercent - 프로파일러가 사용할 수 있는 메모리 양
  3. MinimumTimeForReportingInMiliseconds - 보고서 전송 간 최소 시간으로 보고 간격을 밀리초 단위로 늘릴 수 있고 최솟값으로 제한된다.
  4. ReportingInternallnMiliseconds - 에이전트에 프로파일링 완료에 관한 빈도를 지시한다.
  5. SamplingIntervalInMiliseconds - 샘플들을 프로필하는데 사용되는 샘플링 간격으로 샘플링 비율이 높아지는 것을 감소시킨다.

AWS Cloud9

  • Cloud9은 IDE를 제공하는 서비스이다.
    (IDE는 클라우드 기반의 통합 개발 환경을 의미한다.)
  • IDE가 클라우드에 있는 경우에 인터넷으로 Cloud9에 연결할 수만 있다면 세계 어디든 프로젝트를 작업할 수 있다!
    따라서 로컬 머신에서 설정을 삭제하고 모든 작업을 클라우드에서 해도 된다.
  • 우리는 Cloud9을 AWS SAM 및 Lambda와 완전히 통합하여 서버리스 어플리케이션을 쉽게 빌드할 수 있다!