AWS CodeDeploy
- AWS CodeDeploy란?
- 애플리케이션 배포를 자동화하는 배포 서비스이다.
- 애플리케이션의 새로운 버전을 EC2 인스턴스, 온프레미스 서버, Lambda 함수, ECS 서비스에 배포할 수 있다.
- 주요 기능
- 자동 롤백: 배포 실패 시 자동으로 이전 버전으로 복원하거나 CloudWatch 알람에 따라 롤백을 실행한다.
- 점진적 배포: 배포 속도를 조절해 안전하고 효율적으로 배포를 진행한다.
- 배포 설정 파일: appspec.yml 파일을 사용해 배포 방식을 정의한다.
CodeDeploy - EC2/온프레미스 플랫폼
- 배포 가능 대상
- EC2 인스턴스와 온프레미스 서버에 배포 가능.
- 배포 방식
- In-place 배포: 기존 인스턴스를 중지 후 새로운 버전을 배포한다.
- 블루/그린 배포: 기존 환경(블루)과 새로운 환경(그린)을 병렬로 유지하며 전환한다.
- CodeDeploy Agent
- 배포하려면 타겟 인스턴스에 CodeDeploy Agent가 설치되어야 한다.
- 배포 속도 또한 정의 가능하다.
- AllAtOnce: 모든 인스턴스를 한 번에 업데이트 (다운타임이 가장 길다).
- HalfAtATime: 절반씩 업데이트 (용량 감소).
- OneAtATime: 하나씩 업데이트 (가장 느림, 가용성 최적화).
- Custom: 사용자 정의 배포 비율 설정 가능.
In-Place Deployment
- 배포 시나리오
- v1 실행 중인 4개의 EC2 인스턴스에서 HalfAtATime 배포 방식을 사용한다고 가정하면,
- 첫 번째 단계: 2개 인스턴스 중지 후 v2로 업데이트.
- 두 번째 단계: 나머지 2개 인스턴스도 같은 방식으로 v2로 업데이트.
- 4개의 v1 인스턴스에서 절반씩 업데이트하는 과정을 볼 수 있따.
Blue-Green Deployment (블루/그린 배포)
- 작동 원리
- 새로운 오토 스케일링 그룹 생성
- v1(기존 환경)과 병렬로 v2(새 환경) 실행.
- 애플리케이션 로드 밸런서를 통해 트래픽 전환.
- v1 환경은 트래픽이 차단되고 v2로 완전히 전환.
- 새로운 오토 스케일링 그룹 생성
- 특징
- 배포 실패 시 기존 환경으로 쉽게 롤백이 가능하다.
- 새로운 버전을 테스트 후 트래픽을 점진적으로 전환한다.
CodeDeploy Agent
- CodeDeploy Agent란?
- EC2 인스턴스에서 실행되어야 한다.
- EC2 인스턴스에 설치되어 S3에서 애플리케이션을 다운로드하고 배포하는 역할을 한다.
- 설치 방법
- 수동 설치(Linux 명령어).
- Systems Manager를 사용한 자동 설치.
- EC2 인스턴스에서 실행되어야 한다.
- IAM 권한
- EC2 인스턴스에는 S3에서 배포 파일을 가져올 수 있는 s3:GetObject 및 s3:ListBucket 권한이 필요하다.
Lambda 플랫폼에서의 CodeDeploy
- Lambda 트래픽 전환
- Lambda 별칭(PROD)을 사용해 v1에서 v2로 트래픽을 점진적으로 전환.
- 트래픽 이전 방식
- Linear: 일정 시간 간격으로 트래픽 증가.
- 예: 10% 증가/3분, 10% 증가/10분.
- Canary: 적은 양의 트래픽으로 테스트 후 전환.
- 예: 10% 트래픽/5분, 이후 100%.
- AllAtOnce: 즉시 트래픽 전환 (테스트 시간 없음)
- Linear: 일정 시간 간격으로 트래픽 증가.
ECS 플랫폼에서의 CodeDeploy
- 배포 특징
- 블루/그린 배포만 지원:
- 기존 Target Group(블루)에서 새 Target Group(그린)으로 트래픽을 전환.
- 블루/그린 배포만 지원:
- 트래픽 전환 방식
- Linear: 점진적 트래픽 증가.
- Canary: 일부 트래픽 테스트 후 전체 전환.
- AllAtOnce: 즉시 전환.
CodeDeploy는 다양한 배포 플랫폼과 방식을 지원해 안전하고 효율적인 배포를 가능하게 한다.
EC2, Lambda, ECS 각각의 특징과 작동 방식을 이해하고, 상황에 맞는 배포 방식을 선택해 활용할 수 있다.
CodeDeploy - Deployment to EC2
- 배포 정의
- appspec.yml 파일과 배포 전략을 사용해 애플리케이션 배포 방식을 정의한다.
- EC2 인스턴스 플릿에 현재 위치(In-place) 업데이트를 실행한다.
- 배포 단계마다 후크(Hooks)를 사용해 배포 상태를 확인할 수 있다.
- 현재 위치 배포의 예
- Half at a Time 설정
- 절반의 인스턴스를 중지하고 버전 2로 업데이트한다.
- 나머지 절반을 중지하고 동일하게 업데이트한다.
- Half at a Time 설정
CodeDeploy - Deploy to an ASG (Auto Scaling Group)
- ASG에서의 배포 방식
- 현재 위치(In-place) 배포
- 기존 EC2 인스턴스를 업데이트한다.
- 새로 생성된 EC2 인스턴스도 CodeDeploy로 자동 배포된다.
- 블루/그린 배포
- 새 오토 스케일링 그룹을 생성하며 기존 설정을 복사한다.
- 이전 ASG(Old ASG)를 얼마나 유지할지 결정해야 한다.
- 로드 밸런서를 통해 트래픽을 새로운 대상 그룹(Target Group)으로 전환한다.
- 현재 위치(In-place) 배포
- 블루/그린 배포 예시
- 기존 ASG에서 버전 1(v1) 애플리케이션 실행.
- 새 ASG에서 버전 2(v2) 애플리케이션 배포.
- 로드 밸런서가 트래픽을 v2로 리디렉션하고, v1 환경은 종료.
CodeDeploy - Redeploy & Rollbacks
- 롤백이란?
- 이전에 배포된 애플리케이션 리비전을 다시 배포하는 것을 의미한다.
- 실패한 배포를 복구하거나 특정 상황에서 이전 상태로 복원할 수 있다.
- 롤백 방식
- 자동 롤백: 배포 실패 또는 CloudWatch 알람이 트리거되었을 때 실행된다.
- 수동 롤백: 사용자가 직접 롤백을 실행한다.
- 롤백 비활성화: 특정 배포에 대해 롤백을 실행하지 않도록 설정할 수 있다.
- 중요사항
- 롤백 시 마지막으로 성공한 리비전이 새 배포로 다시 실행된다.
- 이는 단순 복원(restoration)이 아니라 새롭게 배포하는 방식이다.
CodeDeploy는 다양한 배포 방식을 제공해 EC2와 ASG 환경에서의 애플리케이션 배포를 간소화하고, 롤백과 배포 확인을 통해 안정성을 보장한다.
현재 위치(In-place)와 블루/그린 배포의 차이를 명확히 이해하고 상황에 맞게 배포 전략을 선택하는 것이 중요하다.
AWS CodeStar
- CodeStar란?
- AWS의 통합 솔루션으로, 다양한 서비스를 하나로 묶어 관리할 수 있다.
- 주요 통합 서비스
- CodeCommit (코드 저장소), CodeBuild (코드 빌드 및 테스트), CodeDeploy (코드 배포).
- CloudFormation (인프라 설정), CodePipeline (CI/CD 파이프라인 관리), CloudWatch (모니터링).
- 주요 기능
- 빠른 프로젝트 생성
- 클릭 몇 번으로 EC2, Lambda, Elastic Beanstalk 같은 환경에 CICD-ready 프로젝트를 시작 가능.
- 지원 언어
- C#, Go, HTML5, Java, Node.js, PHP, Python, Ruby를 지원.
- 문제 추적 도구
- JIRA, GitHub Issues와 통합해 문제 관리 가능.
- Cloud9 통합
- Cloud9을 통해 Web IDE에서 바로 코딩 가능(일부 리전 제외).
- 대시보드 제공
- 한곳에서 CI/CD 구성 요소를 관리 가능.
- 빠른 프로젝트 생성
- 비용
- CodeStar 자체는 무료.
- 하지만 CodeCommit, CodeBuild, CodeDeploy 같은 서비스의 사용량에 따라 비용이 발생.
- 제한사항
- 사용자 지정이 제한적이며, 세부 설정은 개별 서비스 콘솔에서 진행해야 함.
CodeArtifact 개요
- CodeArtifact란?
- 소프트웨어 개발 시 **코드 종속성(Artifact)**을 관리하는 AWS 서비스이다.
- 개발 과정에서 여러 패키지가 서로 종속되어 빌드되며, 이러한 패키지 관리 및 저장을 Artifact 관리라고 한다.
- 특징
- 기존에는 자체 아티팩트 관리 시스템을 설정해야 했지만, CodeArtifact는 AWS에서 제공하는 안전하고 확장 가능하며 비용 효율적인 시스템이다.
- Gradle, Maven, npm, Yarn, Twine, pip, NuGet 등 주요 종속성 관리 도구와 통합 가능.
- 개발자와 CodeBuild는 클라우드 내 CodeArtifact에서 직접 종속성을 검색 및 가져올 수 있다.
CodeArtifact 작동 방식
- CodeArtifact와 외부 아티팩트 리포지토리(npm, NuGet, Python Package Index 등)의 관계를 보여준다.
- 개발자가 CodeArtifact에 요청하면, 퍼블릭 아티팩트 리포지토리에 연결하여 필요한 패키지를 가져오고 캐싱한다.
- 장점
- 네트워크 보안 강화: 개발자가 퍼블릭 리포지토리에 직접 접근하지 않고, CodeArtifact를 통해 요청한다.
- 캐싱: 퍼블릭 리포지토리에서 사라진 패키지도 CodeArtifact에 캐싱되어 있어 언제든 빌드 가능.
- IT 리더나 개발자는 자체 패키지를 CodeArtifact에 게시 및 승인하여 내부적으로 활용 가능하다.
CodeArtifact와 EventBridge 통합
- 작동 원리
- 패키지가 생성, 수정, 삭제될 때 EventBridge를 통해 이벤트가 발생한다.
- EventBridge는 다양한 AWS 서비스(Lambda, Step Functions, SNS, SQS 등)를 트리거한다.
- CodePipeline과 통합 가능:
- 패키지 버전 업데이트 시 EventBridge가 CodePipeline을 트리거.
- CodePipeline은 CodeBuild를 통해 새 종속성으로 애플리케이션을 재빌드하고, CodeDeploy로 프로덕션 환경에 배포한다.
CodeArtifact 리소스 정책(Resource Policy)
- 크로스 계정 액세스
- CodeArtifact 리포지토리를 다른 계정에서 액세스하려면 리소스 정책이 필요하다.
- 리소스 정책을 통해 특정 계정이나 IAM 사용자/역할에 리포지토리의 모든 패키지 읽기 권한을 부여할 수 있다.
- 제한 사항:
- 리포지토리 내 일부 패키지만 접근 권한을 부여할 수는 없다. 전체 접근 또는 접근 불가만 가능.
- 계정 A의 CodeArtifact 리포지토리에 계정 B의 IAM 사용자(Bob)가 접근할 수 있는 시나리오를 보여줌.
- 오른쪽에는 리소스 정책 JSON 예제가 포함되어 있다.
AWS CodeArtifact는 종속성 관리와 패키지 저장을 간소화하며, 개발자와 팀이 보다 안전하고 효율적으로 코드를 관리할 수 있게 한다.
EventBridge 및 리소스 정책과의 통합을 통해 자동화된 배포 파이프라인 구축이나 크로스 계정 액세스도 지원한다.
CodeArtifact를 통해 종속성을 중앙에서 관리함으로써 네트워크 보안을 강화하고 캐싱을 통해 패키지 안정성을 보장할 수 있다.
Amazon CodeGuru 개요
- CodeGuru란?
- 머신 러닝 기반 서비스로, 자동 코드 리뷰와 애플리케이션 성능 권장 사항을 제공한다.
- 두 가지 주요 기능:
- CodeGuru Reviewer: 정적 코드 분석 및 자동화된 코드 리뷰.
- CodeGuru Profiler: 런타임 중 애플리케이션 성능 분석 및 최적화 권장.
- 작동 과정
- 코드 작성, 빌드 및 테스트, 배포, 측정의 각 단계에서 CodeGuru의 Reviewer와 Profiler가 작동한다.
- Reviewer는 개발 단계에서 문제를 감지하고, Profiler는 프로덕션 단계에서 성능 최적화를 지원한다.
- Reviewer와 Profiler의 전체 작동 과정을 시각적으로 나타낸 다이어그램:
- Reviewer: 작성된 코드를 분석해 문제점을 찾아낸다.
- Profiler: 배포 후 런타임 성능 및 비용 문제를 식별한다.
CodeGuru Reviewer
- 주요 기능
- 코드에서 중대한 문제, 보안 취약점, 찾기 어려운 버그를 자동으로 식별한다.
- 예:
- 코딩 모범 사례 감지.
- 리소스 누수 문제 탐지.
- 보안 감지 및 입력값 검증 지원.
- 특징
- 머신 러닝과 자동 추론을 사용해 분석한다.
- AWS와 오픈 소스 저장소에서 수백만 개의 코드 리뷰를 학습해 효과적인 권장 사항을 제공한다.
- 지원 언어: Java, Python.
- 지원 플랫폼: GitHub, Bitbucket, AWS CodeCommit과 통합.
- CodeGuru Reviewer가 코드의 특정 문제를 감지하고 권장 사항을 제공하는 화면 캡처 예시:
- 문제 위치와 해결 방법을 상세히 안내한다.
CodeGuru Profiler
- 주요 기능
- 애플리케이션의 런타임 동작을 분석한다.
- 예:
- CPU 사용량 과다 문제를 식별.
- 코드 비효율성을 찾아 제거.
- CPU 사용률을 줄이고 성능을 최적화.
- 히프(Heap) 개요를 제공해 메모리 과다 사용 객체를 식별.
- 이상 탐지를 통해 비정상적인 동작을 발견.
- 특징
- AWS와 온프레미스 애플리케이션 모두 지원.
- 애플리케이션에 최소한의 오버헤드만 발생.
- Profiler의 애플리케이션 성능 분석 그래프:
- CPU 사용량 추이와 메모리 사용량을 시각적으로 보여줌.
- 과도한 리소스 사용을 식별해 최적화 권장.
Amazon CodeGuru는 코드 품질 향상과 성능 최적화를 위한 강력한 도구이다.
Reviewer는 개발 초기 단계에서 코드 품질을 높이고, Profiler는 프로덕션 단계에서 성능 문제를 발견하고 비용 절감을 돕는다. GitHub, CodeCommit 등과 통합되며 Java와 Python을 지원해 다양한 환경에서 유용하게 활용할 수 있다.
CodeGuru는 머신 러닝 기반으로 지속적인 학습과 개선을 통해 정확한 권장 사항을 제공한다.
CodeGuru Profiler Agent란?
- CodeGuru Profiler는 애플리케이션의 런타임 동작을 분석하며, 이를 위한 핵심은 **에이전트(Agent)**이다.
- 에이전트의 다양한 설정을 조정해 프로파일링 정확도와 리소스 사용을 제어할 수 있다.
주요 에이전트 설정
- MaxStackDepth
- 코드 스택의 최대 깊이를 설정한다.
- 예:
- 메서드 A → B → C → D로 호출이 이어질 경우, 깊이는 4로 계산된다.
- MaxStackDepth를 2로 설정하면 A와 B만 평가된다.
- 의미: 깊이를 조절해 세부 분석 범위를 조정할 수 있다.
- 깊은 분석이 필요하면 값을 늘리고, 간단한 분석은 줄이는 것이 적합하다.
- MemoryUsageLimitPercent
- 프로파일러가 사용할 수 있는 메모리 비율(%)을 설정한다.
- 메모리 사용량 제한을 통해 애플리케이션의 다른 작업에 영향을 최소화할 수 있다.
- MinimumTimeForReportingInMilliseconds
- 보고서 전송 간 최소 시간을 설정한다.
- 밀리초 단위로 설정하며, 보고 빈도를 제한할 수 있다.
- ReportingIntervalInMilliseconds
- 프로파일링 완료 보고 빈도를 설정한다.
- 밀리초 단위로 보고 간격을 지정한다.
- SamplingIntervalInMilliseconds
- 샘플링 간격을 설정한다.
- 이 값을 줄이면 샘플링 비율이 증가한다.
- 더 자주 샘플링해 호출된 함수나 메서드를 더 많이 포착할 수 있다.
- 의미: 성능 최적화를 위해 분석 세부 정보를 증가시키거나, 리소스 사용량 감소를 위해 간격을 늘릴 수 있다.
설정의 실용적 활용
- 프로파일링 대상 애플리케이션의 복잡성과 리소스 상황에 따라 설정을 조정해야 한다.
- 예
- 간단한 애플리케이션: MaxStackDepth를 낮게, SamplingIntervalInMilliseconds를 높게 설정해 빠른 분석 가능.
- 복잡한 애플리케이션: MaxStackDepth를 높게, SamplingIntervalInMilliseconds를 낮게 설정해 더 많은 세부 정보 확보.
CodeGuru Profiler의 에이전트 설정은 프로파일링 깊이, 메모리 사용량, 보고 빈도 등 다양한 측면을 제어한다.
각 설정은 성능과 리소스 간의 균형을 맞추는 데 중요한 역할을 한다. 시험에서는 각 설정의 역할과 효과를 이해하는 것이 중요하다.
AWS Cloud9이란?
- Cloud9 정의
- 클라우드 기반의 통합 개발 환경(IDE)이다.
- 브라우저를 통해 코드 편집기, 디버거, 터미널에 접근할 수 있다.
Cloud9의 주요 특징
- 클라우드 기반
- 인터넷 연결만 있으면 어디서나 프로젝트 작업이 가능하다.
- 로컬 머신에 의존하지 않고 클라우드에서 개발 환경을 유지할 수 있다.
- 사전 구성된 도구
- JavaScript, Python, PHP 등 주요 프로그래밍 언어에 필요한 도구가 사전 패키징되어 제공된다.
- 로컬 환경 설정이 필요 없어 간편하다.
- 팀 작업 지원
- 개발 환경을 팀원과 공유할 수 있다.
- 페어 프로그래밍 지원:
- 한 명이 코드를 작성하는 동안 다른 팀원이 실시간으로 코드를 확인 및 편집 가능하다.
- AWS 서비스와 통합
- AWS SAM 및 Lambda와 통합되어 서버리스 애플리케이션을 쉽게 빌드할 수 있다.
Cloud9의 장점
- 웹 기반 IDE
- 로컬 IDE가 필요 없이 브라우저에서 바로 개발 가능.
- 유연한 접근성
- 클라우드에 저장된 개발 환경 덕분에 장소와 기기에 상관없이 동일한 환경에서 작업 가능.
- 효율적인 협업
- 실시간 코드 작성 및 공유로 팀 생산성 향상.
- Cloud9 인터페이스가 브라우저에서 코드 편집기, 터미널, 파일 구조를 표시하는 모습을 보여준다.
- 실제 브라우저에서 코드 작성 및 디버깅이 가능한 환경을 시각적으로 설명한다.
AWS Cloud9은 클라우드 기반 개발 환경으로, 브라우저만 있으면 언제 어디서나 프로젝트 작업이 가능하다.
페어 프로그래밍과 AWS SAM/Lambda 통합 기능은 개발자 간 협업과 서버리스 애플리케이션 빌드에 최적화되어 있다.
시험에서 클라우드 기반 IDE가 언급되면 Cloud9을 떠올리면 된다.
반응형
'AWS' 카테고리의 다른 글
AWS Section 23-2. AWS 서버리스 : API 게이트웨이 (1) | 2024.11.13 |
---|---|
AWS Section 23-1. AWS 서버리스 : API 게이트웨이 (0) | 2024.11.12 |
AWS Section 22-2. AWS 서버리스 : DynamoDB (0) | 2024.11.05 |
AWS Section 22-1. AWS 서버리스 : DynamoDB (0) | 2024.11.04 |
AWS Section 21-2. AWS 서버리스: Lambda (2) | 2024.11.04 |