Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- orm
- 티스토리챌린지
- Spring Boot
- QueryDSL
- 자격증
- DynamoDB
- kakao
- Docker
- 오블완
- backenddeveloper
- rds
- mapping
- MSA
- 백엔드
- CodeCommit
- 개발자
- codedeploy
- serverless
- backend
- s3
- CICD
- codebuild
- spring
- ec2
- aws
- jpa
- goorm
- Redis
- 스터디
- sqs
Archives
- Today
- Total
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:35AWS 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를 변화시키는 방법들을 알아보자.
- Linear | 100%가 될 때까지 N분마다 트래픽을 증가시킨다.
- Canary | 함수에 적은 양의 트래픽을 주다가 100%로 올린다.
- AllAtOnce | 즉시 v1에서 v2로 건너뛴다.
CodeDeploy - ECS Platform
- CodeDeploy는 새로운 ECS 태스크 정의를 자동으로 배포할 수 있으며
오로지 블루/그린 배포에만 사용된다.
- X를 변화시키는 여러가지 방안들을 알아보자.
- Linear | 100%까지 매 N분마다 트래픽을 증가시킨다.
- Canary | 함수에 X%만큼의 트래픽을 줬다가 100%로 증가시킨다.
CodeDeploy - Deployment to EC2 & ASG
1. Deploy to EC2
- EC2 인스턴스에 접근할 때, appspec.yml + 배포 전략을 사용하여 어플리케이션을 배포하는 방법이 있다.
EC2 인스턴스 플릿을 인 플레이스 업데이트한 후, 후크를 사용할 수도 있다. appspec.yml에 심어서 각 단계의 마지막에 배포를 확인하는 방식으로 말이다.
2. Deploy to an ASG
- ASG에 배포하는 방식은 두 가지가 있다.
- In-place Deployment
- 존재하는 EC2 인스턴스에 업데이트 하는 방식이다.
- ASG에 새로 EC2 인스턴스를 생성했을 경우에는 CodeDeploy에서 자동으로 배포를 받아오기 때문에 편리하다!
- Blue/Green Deployment
- 새 ASG가 생성되고, 설정이 복제가 된다.
- 예전 ASG에 해당하는 EC2 인스턴스를 얼마나 유지할지 정해야 하며,
하나의 대상 그룹에서 다른 대상 그룹으로 리디렉팅 하는 ELB는 장애 조치가 이루어 진다.
- ReDeploy & Rollbacks
- 롤백은 이전에 배포된 어플리케이션의 리비전을 재배포하는 것을 말한다.
- 배포를 롤백하는 방법에는 두 가지가 존재한다.
- Automatically - 배포에 실패했을 때나 CloudWatch 알람이 트리거 되어 배포에 실패했다고 알려주는 경우
- Manually(수동)
- "Disable Rollbacks"라는 롤백 비활성화 기능은 배포에 대해 롤백이 실행되지 않는다.
- 롤백을 하면 CodeDeploy는 마지막으로 감지한 성공한 리비전을 새로 배포하는데 이전으로 돌아가진 않는다.
그저 가장 나중에 배포에 성공한 것을 사용할 뿐이다.
AWS CodeStar
- CodeStar는 모든 서비스를 그룹화하는 통합 솔루션이다.
- CodeCommit, CodeBuild, CodeDeploy, CodePipeline, CloudWatch 같은 모든 도구를 한 번에 볼 수 있다.
- CodeStart에는 문제 트래킹 도구가 있고, 이 도구를 문제 추적에 사용하면 JIRA 또는 Github의 문제와 통합되어 사용하기 편리하다.
- Cloud9을 사용하면 코딩을 통합할 수 있다.
- 커스터마이징하는 데에 한계가 있지만, 각 도구는 기본 도구이기에 자체 콘솔에서 사용자 지정이 가능하다!
AWS CodeArtifact
- CodeArtifact는 소프트웨어를 빌드할 때 자체 소프트웨어가 종속되는 다른 소프트웨어를 사용한다는 개념이다.
쉽게 말해 코드 종속성이라고 보면 된다. - 소프트웨어를 빌드할 때마다 리포지토리로 푸시하면 다른 소프트웨어가 그것을 기반으로 빌드된다.
- 일반적으로 artifact를 사용할 때는 자체 아티팩트 관리 시스템을 설정한다.
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는 머신러닝 기반 서비스로 두 가지 기능을 제공한다.
- CodeGuru Reviewer | 정적 코드 분석으로 자동 코드 분석을 실시한다.
버그를 감지할 때 유용하다. - CodeGuru Profiler | 실행하는 동안 어플리케이션 성능을 분석하여 가시성이나 권장 사항을 제공한다.
또한 비용이 높은 사전 프로덕션의 코드 줄을 감지하고 최적화하며 어플리케이션 배포 시 실시간으로 어플리케 이션을 측정하고, 프로덕션에서 성능과 비용 개선 사항을 식별하여 코드에 직접 권장 사항을 제공한다.
- CodeGuru Reviewer
- 자동화 추론과 머신 러닝을 사용한다.
- 수천 개의 오픈 소스 저장소와 CodeGuru로 분석한 코드 분석이 있고, Amazon 저장소에도 코드 분석이 있어 머신 러닝을 통해
Code reviewer가 학습한다.
- CodeGuru Profiler
- 코드 비효율성을 식별하고 삭제한다.
- 어플리케이션 성능을 향상시키는데 사용량을 감소시키거나, 어떤 오브젝트가 메모리 공간을 많이 차지하는지 식별한다.
- 어플리케이션에 이상이 있을 시 이를 탐지할 수 있다.
1. CodeGuru - Agent Configuration
- CodeGuru 프로파일러는 에이전트 덕분에 작동한다.
그리고 이 에이전트를 구성하여 프로파일러를 미세 조정할 수 있다. 각 구성요소들을 알아보자.
- MaxStackDepth - 프로필에서 표시될 코드의 양을 의미
- MemoryUsageLimitPercent - 프로파일러가 사용할 수 있는 메모리 양
- MinimumTimeForReportingInMiliseconds - 보고서 전송 간 최소 시간으로 보고 간격을 밀리초 단위로 늘릴 수 있고 최솟값으로 제한된다.
- ReportingInternallnMiliseconds - 에이전트에 프로파일링 완료에 관한 빈도를 지시한다.
- SamplingIntervalInMiliseconds - 샘플들을 프로필하는데 사용되는 샘플링 간격으로 샘플링 비율이 높아지는 것을 감소시킨다.
AWS Cloud9
- Cloud9은 IDE를 제공하는 서비스이다.
(IDE는 클라우드 기반의 통합 개발 환경을 의미한다.) - IDE가 클라우드에 있는 경우에 인터넷으로 Cloud9에 연결할 수만 있다면 세계 어디든 프로젝트를 작업할 수 있다!
따라서 로컬 머신에서 설정을 삭제하고 모든 작업을 클라우드에서 해도 된다. - 우리는 Cloud9을 AWS SAM 및 Lambda와 완전히 통합하여 서버리스 어플리케이션을 쉽게 빌드할 수 있다!
'AWS' 카테고리의 다른 글
Section 26. Cloud Development Kit(CDK) (1) | 2024.12.04 |
---|---|
Section 25. AWS Serverless: SAM - Serverless Application Model (0) | 2024.11.28 |
Section 24. AWS CICD: CodeCommit, CodePipeline, CodeBuild, CodeDeploy - 1 (1) | 2024.11.21 |
Section 23. AWS Serverless: API Gateway (0) | 2024.11.15 |
Section 22. AWS Serverless: DynamoDB - 2 (1) | 2024.11.08 |