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라 바뀌게 할 수 있다.
- PROD라는 별칭을 가진 람다함수가 버전 1에서 버전2로 바뀌었다고 했을 때
- 트래픽량을 조절하는 방법
- Linear: 분을 기준으로 향상시키는 트래픽양을 조절할 수 잇다.
- LambdaLinear 10PercentEvery3Minutes - 3분마다 10 퍼센트 트래픽 전환
- LambdaLinear 10PercentEvery10Minutes - 10분마다 10 퍼센트 트래픽 전환
- Canary: 문제가 없다면 한 번에 모든 트래픽을 전환하는 방법
- LambdaCnary 10Percent5Minutes - 5분동안 10퍼센트의 트래픽을 전송하다가 문제가 없다면, 한 번에 모든 트래픽을 전환한다.
- AllAtOnce - 테스트 없이 한 번에 모든 트래픽을 전환한다.
- Linear: 분을 기준으로 향상시키는 트래픽양을 조절할 수 잇다.
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에 설정하는 매개변수다.
'AWS' 카테고리의 다른 글
[AWS] aws 강의 섹션 26 (AWS Cloud Development Kit) (0) | 2024.12.04 |
---|---|
[AWS] aws 강의 섹션 25 (AWS SAM) (0) | 2024.11.28 |
[AWS] aws 강의 섹션 24 - 1 (CI/CD, Code Commit, Code Build, Code Deploy) (0) | 2024.11.20 |
[AWS] aws 강의 섹션 22 (Dynamo DB) (0) | 2024.11.05 |
[AWS] aws 강의 섹션 21-2 (람다함수, X-Ray, TMP, ECR, LIMIT) (3) | 2024.10.24 |