AWS DVA CI/CD — CodePipeline·CodeBuild·CodeDeploy

2026-05-03확률과 통계 마스터 노트

AWS DVA-C02 마스터 노트 시리즈 8편. CodeCommit Git·CodeBuild buildspec·CodeDeploy appspec·CodePipeline 4단계 파이프라인, EC2·Lambda·ECS 배포 전략(In-Place·Blue/Green·Canary·Linear), 배포 훅과 자동 롤백까지 — 시험 비중 24% Domain 3 배포 영역의 핵심을 한 흐름으로.

이 글은 AWS DVA-C02 마스터 노트 시리즈의 여덟 번째 편입니다. 시험 도메인 3 "배포"가 24% — 두 번째로 큰 비중. 이 영역의 핵심 도구는 AWS Code* 4종 — CodeCommit·CodeBuild·CodeDeploy·CodePipeline.

4단계 파이프라인

CodeCommit (소스)
   ↓
CodeBuild (빌드·테스트)
   ↓
CodeDeploy (배포)
   ↓
CloudWatch (모니터링)

전체 오케스트레이션 = CodePipeline

CodeCommit — Git 저장소

비유 — AWS Managed GitHub.

특징:

  • AWS 매니지드 Git
  • IAM 통합 인증
  • 무제한 비공개 저장소
  • KMS 암호화

여기서 시험 함정이 하나 있어요. CodeCommit이 GitHub·GitLab보다 큰 장점은 IAM 통합 입니다. AWS 사용자가 그대로 Git 인증. 사용자 수 늘어나도 별도 계정 관리 X.

Branch 권한

특정 브랜치(main·prod)에 push 권한을 IAM 정책으로 제한.

{
  "Effect": "Deny",
  "Action": "codecommit:GitPush",
  "Resource": "arn:aws:codecommit:us-east-1:...",
  "Condition": {
    "StringEqualsIfExists": {
      "codecommit:References": ["refs/heads/main"]
    }
  }
}

CodeBuild — 빌드·테스트

비유 — 자동화된 빌드 룸. 코드 컴파일·테스트 실행·아티팩트 생성.

buildspec.yml

version: 0.2

phases:
  install:
    runtime-versions:
      nodejs: 18
  pre_build:
    commands:
      - npm install
  build:
    commands:
      - npm run build
      - npm test
  post_build:
    commands:
      - echo "Build complete"

artifacts:
  files:
    - "**/*"
  base-directory: dist

cache:
  paths:
    - node_modules/**/*

환경

종류 설명
Managed Image AWS 공식 (Amazon Linux·Ubuntu·Windows)
Custom Image ECR의 사용자 Docker 이미지

환경 변수와 Secrets

env:
  variables:
    NODE_ENV: production
  parameter-store:
    DB_HOST: /myapp/db_host  # SSM Parameter Store
  secrets-manager:
    DB_PASSWORD: db-password:password  # Secrets Manager

여기서 시험 함정이 하나 있어요. 환경 변수에 비밀번호 직접 박지 X. 항상 SSM Parameter Store 또는 Secrets Manager 참조.

CodeBuild VPC

기본 외부 실행. RDS·EC2 등 VPC 리소스 접근 시 VPC 설정.

CodeDeploy — 배포

비유 — 자동 배포 트럭. 빌드된 아티팩트를 EC2·Lambda·ECS에 배포.

appspec.yml

배포 대상별 다름.

EC2/On-Premise

version: 0.0
os: linux
files:
  - source: /
    destination: /var/www/html
hooks:
  BeforeInstall:
    - location: scripts/before_install.sh
  AfterInstall:
    - location: scripts/after_install.sh
  ApplicationStart:
    - location: scripts/start_app.sh
  ValidateService:
    - location: scripts/validate.sh

Lambda

version: 0.0
Resources:
  - MyFunction:
      Type: AWS::Lambda::Function
      Properties:
        Name: MyFunction
        Alias: live
        CurrentVersion: 1
        TargetVersion: 2
Hooks:
  - BeforeAllowTraffic: PreTrafficCheck
  - AfterAllowTraffic: PostTrafficCheck

ECS

version: 0.0
Resources:
  - TargetService:
      Type: AWS::ECS::Service
      Properties:
        TaskDefinition: <NEW_TASK_DEF_ARN>
        LoadBalancerInfo:
          ContainerName: my-container
          ContainerPort: 80

배포 전략

EC2/On-Premise

전략 설명
In-Place (Rolling) 기존 인스턴스 갱신 (다운타임 가능)
Blue/Green 새 인스턴스에 배포 → ELB 트래픽 전환

Lambda·ECS

전략 설명
Canary 트래픽 일부 (10%) → 시간 경과 후 100%
Linear 일정 비율씩 점진적 (10% / 5분마다)
All-at-once 즉시 100% (롤백 어려움)

여기서 정말 중요한 시험 함정 — Canary·Linear는 Lambda·ECS만. EC2는 In-Place 또는 Blue/Green. 시나리오 보고 어느 자리에 어느 전략인지 분기.

배포 훅 (Hooks)

EC2 훅:
ApplicationStop → BeforeInstall → AfterInstall →
ApplicationStart → ValidateService

Lambda 훅:
BeforeAllowTraffic → AfterAllowTraffic
(트래픽 전환 전후 검증)

ECS 훅:
BeforeInstall → AfterInstall →
AfterAllowTestTraffic → BeforeAllowTraffic →
AfterAllowTraffic

각 훅에서 검증 스크립트 실행. 실패 시 자동 롤백.

자동 롤백

배포 실패 또는 CloudWatch Alarm 트리거 시 이전 버전으로 자동 복구.

CodePipeline — 오케스트레이션

비유 — 공장 컨베이어 벨트. Source → Build → Test → Deploy 자동화.

스테이지 (Stage)

Pipeline:
  Source Stage:
    Action: Pull from CodeCommit
  Build Stage:
    Action: CodeBuild
  Test Stage:
    Action: 자동 테스트
  Manual Approval (선택):
    Action: 사람이 승인
  Deploy Stage:
    Action: CodeDeploy → Production

아티팩트

각 Stage 사이에 S3 버킷에 아티팩트 저장·전달.

Manual Approval

운영 배포 전 사람이 검토·승인. SNS 알림으로 담당자에게 통보.

Build → Approval (이메일 알림 → 수동 승인) → Deploy

CodeStar Connections

GitHub·Bitbucket 등 외부 Git 연결. CodeCommit 안 써도 OK.

트리거

  • 자동: CodeCommit push, S3 변경, ECR 이미지 push
  • 수동: 콘솔에서 Release change

CloudFormation 통합

CodePipeline의 Deploy Action에서 CloudFormation 템플릿 배포.

Source → Build (CFN 템플릿 패키징) → Deploy (CFN Stack 업데이트)

12편 CloudFormation에서 자세히.

EC2 배포 — In-Place vs Blue/Green

구분 In-Place Blue/Green
새 인스턴스 X (기존 사용)
다운타임 가능 없음
비용 낮음 임시 2배
롤백 재배포 즉시 (DNS 스위치)
적합 비프로덕션 프로덕션

Blue/Green 흐름

Blue (현재 v1) — 트래픽 100%
  ↓ 새 ASG 생성
Green (새 v2) — 헬스 체크
  ↓ ELB 트래픽 점진 또는 즉시 전환
Green — 트래픽 100% (Blue는 일정 시간 후 종료)

Lambda 배포 — Canary 예시

Lambda Alias 'PROD' = v1 (현재)
배포 시작:
  10분간 PROD: v1 (90%) + v2 (10%)
  CloudWatch 알람 정상 → PROD: v2 (100%)
  알람 발동 → 자동 롤백 → v1 (100%)

7편(서버리스)에서 본 별칭 + 트래픽 분할.

ECS 배포 — Blue/Green

Blue (TaskDef v1) — 100% 트래픽
새 TaskDef v2 → ECS 서비스 업데이트
Green (TaskDef v2) — 헬스 체크
ALB 리스너 트래픽 전환
검증 후 Blue 종료

시험 직전 한 번 더 — 자주 헷갈리는 함정 모음

여기까지가 8편의 핵심입니다. 시험 직전 또는 실무에서 헷갈릴 때 다시 펼쳐 볼 수 있게 압축 노트로 마무리할게요.

  • 시험 도메인 3 (배포) 24%
  • 4단계 — CodeCommit → CodeBuild → CodeDeploy → CodePipeline
  • CodeCommit 강점 = IAM 통합
  • Branch 권한 = IAM 정책 + Condition
  • CodeBuild = buildspec.yml (phases · artifacts · cache)
  • 환경 — Managed Image / Custom Image
  • 비밀번호는 SSM Parameter Store / Secrets Manager (직접 박기 X)
  • CodeBuild VPC 설정 = RDS·EC2 접근 시
  • CodeDeploy = appspec.yml (대상별 다름)
  • EC2 — In-Place / Blue/Green
  • Lambda·ECS — Canary / Linear / All-at-once
  • Canary·Linear는 Lambda·ECS만 (EC2 X)
  • EC2 훅 — Stop → BeforeInstall → AfterInstall → Start → Validate
  • Lambda 훅 — BeforeAllowTraffic / AfterAllowTraffic
  • 자동 롤백 — 배포 실패 또는 CloudWatch Alarm
  • CodePipeline = 오케스트레이션
  • 스테이지 — Source / Build / Test / Manual Approval / Deploy
  • 아티팩트 = S3 저장·전달
  • Manual Approval + SNS 알림
  • CodeStar Connections = GitHub·Bitbucket 외부 Git
  • 트리거 — Push·S3·ECR (자동), 콘솔 (수동)
  • In-Place = 기존 갱신 (비프로덕션) / Blue/Green = 새 환경 (프로덕션)
  • Blue/Green = 비용 2배 임시·즉시 롤백
  • Lambda Canary = Alias + 트래픽 분할
  • ECS Blue/Green = TaskDef 교체 + ALB 전환
  • CodePipeline + CloudFormation = IaC 배포

시리즈 다른 편

공식 문서: AWS CodePipeline User Guide에서 더 깊이.

다음 글(9편)에서는 모니터링 — CloudWatch 메트릭·로그·알람·대시보드, X-Ray 분산 추적, CloudTrail 감사 로그까지 풀어 갑니다.

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

답글 남기기

error: Content is protected !!