AWS CodeCommit
- GitHub, GitLab, Bitbucket 등의 버전관리 툴과 달리 코드가 AWS 클라우드의 개인 VPC 내에 있음
- 비공개 Git Repo
- 사이즈 제한 없음 (코드를 GB 크기까지 확장가능)
- 완전관리형, 고가용성
- 코드는 AWS 클라우드 내에만 저장 -> 일관된 형식 / 높은 보안
- 보안 강화 (암호화, IAM을 통한 액세스 제어)
- 젠킨스, CodeBuild 등의 CI 툴과 통합 가능
- 보안
- 인증 (Authentication) : SSH Key / HTTPS
- 인가 (Authorization) : IAM 정책
- 암호화
- AWS KMS를 통해 암호화
- 코드 커밋 시 HTTPS or SSH를 통해서 암호화된 상태로만 전송됨
- 교차 계정 접근 : IAM 역할 생성 & AWS STS (AssumeRole API) 통해 코드커밋 repo 액세스
AWS CodePipeline
- AWS 안에서 CI/CD를 오케스트레이션 할 수 있는 시각적 워크플로 툴
- 소스 - CodeCommit, ECR, S3, Bitbucket, GitHub
- 빌드 - CodeBuild, Jenkins, CloudBees, TeamCity
- 테스트 - CodeBuild, AWS Device Farm, 3rd party tools
- 배포 - CodeDeploy, Elastic Beanstalk, CloudFormation, ECS, S3
- 호출 - Lambda, Step Functions
- 수동 승인 기능 제공
- 각 단계마다 artifacts가 S3 버킷에 저장되고 다음 스테이지로 이동
AWS CodeBuild
- CodeCommit 등의 소스코드 내에 설정 파일이 존재 (buildspec.yml, 코드의 루트에 존재해야함)
- 출력 로그는 S3 & CloudWatch Logs에 적재될 수 있음
- CloudWatch Metrics를 통해 빌드 통계를 모니터링 가능
- EventBridge로 빌드 실패 / 트리거 알림 감지 가능
- CloudWatch Alarm을 통해 다량의 실패에 대한 threshold 확인 가능
- Build Projects는 CodePipeline이나 CodeBuild에서 정의될 수 있음
- or 이미 존재하는 Build Projects 호출 가능
- 빌드 시 S3에 진행상황을 캐싱하여 재시도 지원 (최적화)
AWS CodeDeploy
- 애플리케이션 배포를 자동화해주는 배포 서비스
- EC2 Instance, 온프레미스 서버, 람다 함수, ECS 서비스에 배포
- CloudWatch Alarm 트리거 등의 이벤트에 대한 롤백도 가능
- 배포 조절 가능 (한번에, 하나씩, 절반씩, 블루/그린)
- AllAtOnce : 한번에 업데이트 (다운타임 높음)
- HalfAtTime : 절반씩 업데이트
- OneAtATime : 하나씩 업데이트 (가장 느림, 가용성 좋음)
- 커스텀하게 % 정의 가능
- 배포 방식을 통제하는 appspec.yml 파일
- EC2 인스턴스 / 온프레미스 서버 플랫폼
- in-place 배포 (현재 위치에 down / 배포)
- blue/green 배포 (새로운 ASG 생성해 배포)
- 타겟 인스턴스에 CodeDeploy Agent가 실행되어야 함
- 람다 플랫폼
- 람다 별칭에 대해 점진적으로 트래픽 신규 버전으로 이동 가능
- Linear : 100% 도달까지 N분마다 트래픽 이동
- Canary : X% 트래픽 이후 100% 트래픽 이동
- AllAtOnce
- 람다 별칭에 대해 점진적으로 트래픽 신규 버전으로 이동 가능
- ECS 플랫폼
- 자동으로 새로운 ECS 태스크 정의
- 블루/그린 배포에만 사용 가능
- Linear : 100% 도달까지 N분마다 트래픽 이동
- Canary : X% 트래픽 이후 100% 트래픽 이동
- AllAtOnce
Reference