AWS

[AWS] aws 강의 섹션 24 - 2 (Code Deploy, Code Star, Code Artifact, code Guru)

대기업 가고 싶은 공돌이 2024. 11. 27. 22:47

CodeDeploy

  • 코드 디플로이는 애플리케이션 배포를 자동화해주는 서비스다. 
  • 만약 배포한 서비스에서 장애가 발생한다면, 클라우드 워치 알림을 통해 자동으로 롤백을 시킬 수도 있다.
  • 애플리케이션을 배포하는 속도도 조절할 수 있다.
  • 배포 방식을 정의하기 위한 appsepec.yml 파일이 존재한다.

CodeDeploy - EC2/On-Primises 플랫폼

  • 애플리케이션과 코드를 EC2 인스턴스와 온프레미스 서버에 배포할 수 있다.
  • 또한 두 종류의 배포를 할 수 있는데, 하나는 현재 위치 배포고, 다른 하나는 블루/그린 배포다.
    • 차이점은 조금 이따 알아보도록 하겠다.
  • 배포를 하려면 먼저 codeDeploy 에이전트를 타깃 인스턴스에서 실행시켜야한다.
    • 해당 에이전트를 통해 새로운 코드로의 업데이트가 진행된다.
  • 배포 속도를 정의할 수 있다. 
    • AllAtOnce: 한 번에 모든 인스턴스를 배포한다.
    • HalfAtATime: 절반을 바꾸고 나머지 절반을 바꾼다.
    • OneAtATime: 한 번에 인스턴스를 하나씩 다운 시키고 업데이트 한다.
    • 커스텀: 마음대로 가용 %를 정의할 수 있다. 
    • 블루/그린 방식: 새로운 서버를 모두 띄운 후 한 번에 오래된 서버를 전부 새로운 서버로 바꾸는 방법이다.

CodeDeploy - 에이전트

  • 전제조건으로 EC2 인스턴스에 설치돼 있어야한다.
  • 업데이트 된 애플리케이션 코드는 s3에 저장된다. 그럼 이를 가져오기위해, S3의 IAM권한을 다시 설정해줘야 한다.
  • 이제 코드 디플로이 에이전트는 S3에서 새로운 버전의 코드를 가져올 수 있다.

CodeDeploy - Lambda Platform

  • 코드 디플로이를 활용해 한 가지 별칭 내의 람다함수에서 버전 이동을 자동화 할 수 있다.
    • PROD라는 별칭을 가진 람다함수가 버전 1에서 버전2로 바뀌었다고 했을 때
      V2로 가는 X% 트래픽량을 점점 조절하여, 나중에 완전히 V2라 바뀌게 할 수 있다.
  • 트래픽량을 조절하는 방법
    • Linear: 분을 기준으로 향상시키는 트래픽양을 조절할 수 잇다.
      • LambdaLinear 10PercentEvery3Minutes - 3분마다 10 퍼센트 트래픽 전환
      • LambdaLinear 10PercentEvery10Minutes - 10분마다 10 퍼센트 트래픽 전환
    • Canary: 문제가 없다면 한 번에 모든 트래픽을 전환하는 방법
      • LambdaCnary 10Percent5Minutes - 5분동안 10퍼센트의 트래픽을 전송하다가 문제가 없다면, 한 번에 모든 트래픽을 전환한다.
      • AllAtOnce - 테스트 없이 한 번에 모든 트래픽을 전환한다.

CodeDeploy - ECS 플랫폼

  • 새로운 ECS Task Definition의 배포를 자동화 시켜줄 수 있다.
    • 이 배포에서는 블루/그린 방식만 사용할 수 있다.

  • 우선 코드 디플로이가 새로운 ECS Task Definition을 기반으로 버전2의 새로운 타깃그룹을 형성한다.
  • 이후 코드 디플로이가 애플리케이션 로드밸런서를 수정하여 타깃 그룹을 두 가지로 바꾸고
  • 이후 X% 만큼 트래픽을 조절하다 나중에 완전하게 버전2로 모든 트래픽을 전환한다.
    • 전환 방식은 위에서 설명한 것과 같다.

CodeDeploy - ASG

ASG에서 배포를 자동화 하는 방법은 두 가지가 있다.

  • In-Place 배포
    • 기존에 존재하는 EC2를 업데이트 하는 것이다.
    • ASG에 새로운 EC2가 생성되는 경우엔 코드 디플로이에서 코드를 받아와 생성하기 때문에,
      다른 설정을 해줄 필요가 없다.
  • 블루/그린 배포
    • 새 오토 스케일링 그룹이 생성되고, 이전 그룹의 설정이 복사된다.
    • 이전 그룹에 해당하는 EC2 인스턴스를 얼마나 유지할지 결정해야한다. 
    • 이 방식은 반드시 ELB를 사용해야한다.

  • 새로운 버전이 코드 디플로이에 의해, ASG에 만들어지고, 로드 밸런서에 헬스 체크가 성공하면 기존의 버전은 삭제된다. 

CodeDeploy - 재배포와 롤백

  • 롤백: 이전에 배포된 애플리케이션의 버전을 재배포하는 것이다.
    • 자동 방식: 배포에 실패했을 때 클라우드 워치 알림에서 배포에 실패했다고 알려주는 경우
    • 수동 방식
  • 롤백을 비활성화 하면 배포 실패에 대한 롤백이 이뤄지지 않는다.
  • 롤백을 하면 코드 디플로이는 마지막으로 성공했던 버전을 새로 배포하는데, 이전으로 돌아가진 않는다.
    한 마디로 예전으로 돌아가는 게 아니라, 예전 버전을 새롭게 배포할 뿐이라는 의미다.

AWS CodeStar

  • 지금까지 살펴봤던 모든 서비스를 그룹화하는 솔루션이다.
    • 코드 커밋, 코드 빌드, 코드 디플로이, 클라우드 포메이션, 코드 파이프라인, 클라우드 워치,,,,
  • 코드 스타에서 클릭 몇 번만 하면 EC2 프로젝트를 시작할 수 있다. 매우 편리한 도구로 제대로 실행되는지 확인만 하면 된다고 한다.

  • 문제 추척 도구도 존재한다. 자이라 깃허브와 통합 가능하다.
  • Cloud9을 사용하면 웹 IDE 형식으로 클라우드에서 바로 코딩할 수 있다.
  • 모든 구성 요소를 살펴볼 수 있는 대시보드가 있다.
  • 무료로 사용하고, 사용하는 서비스에 대해서만 값을 지불하면 된다.

AWS CodeArtifact

  • 소프트웨어를 빌드할 때 자체 소프트웨어가 다른 소프트웨어의 라이브러리를 사용한다는 것 그걸 코드 종속성이라 부른다.
  • 다른 소프트웨어를 사용하는 종속성을 전체적으로 효과적으로 관리해주는 것이 코드 아티팩트다.
  • 종속성 관리 도구인, Maven, Gradle, npm, yarn, twine, pip, NuGet 등과 통합되어 있다.
  • 코드 아티팩트를 사용하면 개발자와 코드 빌드가 모두 클라우드 내 코드 아티팩트에서 바로 종속성을 검색할 수 있다.
  • 결론은 코드 아티팩트에 여러가지 종속성을 저장시켜놓고, 서버에서 종속성을 받을 때 코드 아티팩트에서 받아 사용한다는 것이다.
  • 그럼 그냥 build.gradle 사용해서, 라이브러리 공유하면 되는 게 아니냐? 할 수도 있다.
    • 코드 아티팩트는 다음과 같은 경우에 유용하다. 사용하는 의존성의 버전을 알리고 싶지 않은 경우
    • 모든 개발자에게 동일한 버전을 강요하고 싶은 경우
    • spring boot를 예시로 들면 스프링 부트에 존재하지 않는 독점 라이브러리를 사용하고 싶은 경우
    • 가 있겠다.

CodeArtifact - 이벤트 브릿지와의 통합

  • 코드 아티팩트에서 종속성이 변경된 경우
  • 바로 이벤트 브릿지를 호출한다
  • 이벤트 브릿지에서 코드 파이프라인을 호출하여
  • 종속성 변경시마다 코드를 재배포할 수 있다.

CodeArtifact - 접근 권한

  • 다른 계정에서 코드 아티팩트에 접근하도록 할 수 있다.
  • 일부 패키지에만 접근하도록 설정할 수는 없다.
    • 모든 패키지에 접근하거나
    • 모든 패키지에 접근할 수 없거나 둘 중 하나다.

Amazon CodeGuru

  • 머신 러닝 기반의 서비스로 두 가지 기능이 있다.
    • 첫 번째는 자동 코드 리뷰
    • 두 번째는 성능 권장사항 추천이다.
  • 정적 코드 분석으로 자동으로 코드를 분석한다고 한다.
  • 버그나 메모리 누수가 나는 곳을 체크해준다.
  • 비용 개선사항도 파악하여 제안해준다.

Amazon CodeGuru - Reviewer

  • 좀 더 자세히 들어가면 코드 구루는 커밋을 보고 언제든지 코드를 푸시하면 잘못된 코드줄을 알려준다.
  • 보안 취약점과 찾기 어려운 버그를 찾을 수도 있다.
  • 자바와 파이썬을 지원한다.

Amazon CodeGuru - Profiler

  • 애플리케이션의 런타임을 분석한다.
  • CPU가 과도하게 사용되는 부분등을 파악한다.
    • 비효율적인 코드를 식별 및 삭제하고 애플리케이션 성능을 향상시킨다.
    • 어떤 오브젝트가 메모리 공간을 많이 차지하는지 식별할 수도 잇다.
    • 이상이 있을 때 이상 탐지도 가능하다.
  • 약간의 오베헤드가 서버에 발생하긴 한다.
  • 아래는 코드 구루를 실행하기 위한 agent에 설정하는 매개변수다.