어제에 이어 오늘도 DevOps Engineering on AWS 공인교육이 진행됐다. 어제가 CloudFormation 중심이었다면, 오늘은 본격적인 CI/CD 도구들인 CodeBuild, CodeDeploy, CodePipeline을 배우고, AWS SAM으로 서버리스 앱을 직접 배포해봤다.
AWS에서 CI/CD를 구성할 때 핵심이 되는 서비스 3개다.
| 서비스 | 역할 |
|---|---|
| CodeBuild | 소스 코드 컴파일, 테스트 실행, 빌드 아티팩트 생성 |
| CodeDeploy | EC2, Lambda, Fargate 등에 자동 배포 |
| CodePipeline | 소스 → 빌드 → 배포 전체 흐름 조율 |
전체 파이프라인 흐름은 이렇다.
소스(CodeCommit/GitHub) → CodePipeline → CodeBuild → CloudFormation/CodeDeploy → 배포
buildspec.yml 파일 하나로 빌드 과정을 정의한다. 빌드 환경(OS, 런타임)을 직접 고를 수 있고, 빌드 결과물(아티팩트)은 S3에 자동으로 올라간다.
배포 그룹에 태그로 대상 EC2를 지정하면, 에이전트가 설치된 인스턴스에 자동으로 배포된다. 인플레이스(In-place)와 블루/그린(Blue/Green) 방식 모두 지원한다.
SAM은 Lambda + API Gateway + DynamoDB 같은 서버리스 리소스를 template.yaml 하나로 정의하고 배포하는 프레임워크다. CloudFormation의 서버리스 특화 버전이라고 보면 된다.
로컬에서 Lambda 함수를 직접 테스트할 수 있다는 게 특히 편하다.
# SAM 프로젝트 초기화
sam init --runtime python3.12
# 빌드
sam build
# 로컬에서 함수 직접 호출
sam local invoke HelloWorldFunction --event events/event.json
# 로컬 API 서버 띄우기
sam local start-api -p 8000
오늘 실습의 핵심이었다. template.yaml에 배포 전략을 추가하면 CodeDeploy가 트래픽을 자동으로 전환해준다.
# template.yaml
Resources:
MyFunction:
Type: AWS::Serverless::Function
Properties:
AutoPublishAlias: live
DeploymentPreference:
Type: Linear10PercentEvery1Minute # 1분마다 10%씩 전환
CodeCommit에 git push 하나만 하면 파이프라인이 자동으로 트리거되고, 블루(기존) → 그린(신규)으로 트래픽이 서서히 전환되는 걸 직접 눈으로 확인했다. 배포 중에 웹 페이지를 새로고침하면 블루↔그린이 번갈아 보이다가 결국 그린으로 완전히 넘어간다.
오후에는 마이크로서비스 개념도 간단히 다뤘다.
서비스가 커질수록 모놀리스의 한계가 명확해진다는 걸 느꼈다.
오늘은 CI/CD 파이프라인을 직접 구성하고, SAM으로 서버리스 앱을 배포하는 실습까지 해봤다.
git push 하나로 블루/그린 배포가 자동으로 돌아가는 걸 보니까 왜 DevOps가 중요한지 체감이 됐다.
이번 velog는 AWS Kiro를 통해 작성하였다.