AWS DOP - SDLC Automation 파트 개념 정리

2025. 4. 15. 16:12·Web

CodePipeline

워크플로우를 구성할 수 있음

 

AWS의 시각적 CI/CD 오케스트레이션 도구
코드의 소스부터 빌드, 테스트, 배포까지 자동화된 워크플로우를 구성할 수 있음.

  • 소스 단계: 코드 커밋 등에서 소스를 받아 시작함.
  • 빌드 단계: CodeBuild, Jenkins, TeamCity 등을 사용해 코드 빌드 가능.
  • 테스트 단계: 유닛 테스트, UI 테스트, AWS Device Farm 등을 활용해 코드 품질 검증.
  • 배포 단계: CodeDeploy, Lambda, CloudFormation 등을 이용해 애플리케이션 배포 가능.

각 단계에서 아티팩트(산출물)를 S3에 저장하고 전달함.
예시

1. 개발자가 CodeCommit에 코드 푸시
2. CodePipeline이 이를 감지하고 아티팩트를 생성해 S3에 저장
3. CodeBuild가 S3에서 아티팩트를 받아 빌드
4. 빌드된 결과물을 다시 S3에 저장
5. CloudFormation이 테스트 스택에 배포
6. CodeBuild가 테스트 환경에서 기능/부하 테스트 수행
7. 테스트 성공 시, 테스트 스택 삭제
8. CloudFormation이 운영 스택에 업데이트 배포
단계 아티팩트 이름 포함 내용
Source (CodeCommit) SourceOutput 전체 소스 코드 (예: index.js, template.yaml, Dockerfile, buildspec.yml 등)
Build (CodeBuild) BuildOutput 빌드된 결과물
(예: 번들된 JS/CSS, CloudFormation 템플릿, 실행 스크립트, 배포 아카이브 등)
Deploy (CloudFormation 또는 CodeDeploy) 없음 (보통 Input만 사용) BuildOutput을 받아서 배포 수행

 

모니터링

  • CloudWatch Events / EventBridge를 활용해 실패/취소 등 이벤트 감지 및 알림 설정 가능
  • 권한 문제 발생 시 CodePipeline의 IAM 역할과 CloudTrail 로그 확인 필요

이벤트 트리거

 

이벤트 기반 (추천)

  • AWS 내부 이벤트 (예: CodeCommit 커밋 등) 발생 시 EventBridge 규칙으로 파이프라인 자동 트리거.
  • 가장 빠르고 효율적인 방식.

외부 소스 이벤트 기반 (GitHub 등)

  • CodeStar 연결을 통해 GitHub 등의 소스에서 이벤트를 수신하고 파이프라인 트리거.

Webhook 사용 (구식 방식)

  • CodePipeline이 공개 HTTP endpoint를 제공하고, 외부에서 스크립트로 해당 endpoint 호출.

폴링 방식 (비추천)

  • 주기적으로 GitHub 등을 확인해 변경사항이 있으면 파이프라인 시작. 비효율적.

수동승인 절차
요청 - SNS로 알림 전송 - AWS Console에 접속해 승인
필요 권한

GetPipeline, PutApprovalResult


 

- 하나의 CodePipeline에서 다중 배포 그룹으로 병렬 배포 가능. 여러 환경에 동시에 배포할 때 유용.
- Lambda 연동 및 API 호출 CodePipeline 내 Lambda 사용으로 다양한 외부 API 호출 가능.
(직접 API 호출은 불가하므로 Lambda 통해 간접 실행.)
- Step Functions를 통해 복잡한 워크플로(예: DynamoDB 조작, ECS 작업 시작 등) 구현 가능.
- 다중 리전 배포 - 리전별 S3 아티팩트 저장소 필수
- 크로스 리전 아티팩트 복사 - 복잡한 리전 간 배포가 자동화되어 구성 간소화.

다중 리전 (Multi-Region)
WS에서 서울 리전과 도쿄 리전에 동일한 서비스 배포

크로스 리전 (Cross-Region)
리전 간에 데이터 또는 트래픽을 주고받는 행위나 기능을 의미.
예시 : S3 버킷의 크로스 리전 복제(CRR): 서울 리전 버킷의 데이터를 미국 리전으로 자동 복제


CloudFormation

CloudFormation(CFN)

필요한 모든 AWS 리소스(예: Amazon EC2 인스턴스 또는 Amazon RDS DB 인스턴스)를 설명하는 템플릿을 생성하면 CloudFormation이 해당 리소스의 프로비저닝과 구성을 담당. AWS 리소스를 개별적으로 생성하고 구성할 필요가 없으며 어떤 것이 무엇에 의존하는지 파악할 필요도 없음

 

yaml예제

더보기
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  MyPipeline:
    Type: AWS::CodePipeline::Pipeline
    Properties:
      RoleArn: arn:aws:iam::123456789012:role/CodePipelineServiceRole
      ArtifactStore:
        Type: S3
        Location: my-artifact-bucket
      Stages:
        - Name: Source
          Actions:
            - Name: SourceAction
              ActionTypeId:
                Category: Source
                Owner: AWS
                Provider: CodeCommit
                Version: 1
              OutputArtifacts:
                - Name: SourceOutput
              Configuration:
                RepositoryName: my-repo
                BranchName: main
        - Name: Build
          Actions:
            - Name: BuildAction
              ActionTypeId:
                Category: Build
                Owner: AWS
                Provider: CodeBuild
                Version: 1
              InputArtifacts:
                - Name: SourceOutput
              OutputArtifacts:
                - Name: BuildOutput
              Configuration:
                ProjectName: my-codebuild-project
        - Name: Deploy
          Actions:
            - Name: DeployAction
              ActionTypeId:
                Category: Deploy
                Owner: AWS
                Provider: CloudFormation
                Version: 1
              InputArtifacts:
                - Name: BuildOutput
              Configuration:
                ActionMode: CREATE_UPDATE
                StackName: MyAppStack
                Capabilities: CAPABILITY_NAMED_IAM
                TemplatePath: BuildOutput::template.yaml

 

CFN 템플릿은 직접 코드처럼 커밋하거나, CDK 또는 SAM을 통해 생성 가능.

AWS Cloud Development Kit (AWS CDK) 는 코드에서 클라우드 인프라를 정의하고 이를 프로비저닝하기 위한 오픈 소스 소프트웨어 개발 프레임워크입니다 AWS CloudFormation.

 

가능한 동작 모드

  • Change Set 생성/실행
  • Stack 생성/업데이트/삭제
  • 실패한 스택 대체

AWS CodeBuild

소스 코드(예: CodeCommit, S3, Bitbucket, GitHub)를 기반으로 빌드 및 테스트 자동화를 수행

  • 비밀번호 등의 민감한 정보는 SSM Parameter Store나 Secrets Manager로 관리
  • CodeBuild는 서비스 역할(IAM Role)을 사용하여 S3, SSM, Secrets Manager, CodeCommit 등의 리소스 접근
  • 사전 구축 이미지 외에도, 커스텀 Docker 이미지를 사용하여 원하는 환경으로 확장 가능.
  • 문제 해결을 위해 로컬에서도 Docker 기반으로 CodeBuild 에이전트를 실행 가능
  • 기본적으로는 VPC 외부에서 실행되나, 설정을 통해 VPC 내부에서 실행 가능 (RDS, EC2, ElastiCache 등 내부 리소스 접근 가능).

buildspec.yml

CodeBuild의 핵심은 buildspec.yml이며, 이 파일에 설치, pre빌드, 빌드, post빌드 단계 정의
CloudWatch Logs와 Metrics를 통해 로그 및 실패 감지 가능

Build Badge는 빌드 성공/실패 상태를 보여주는 이미지

CodeBuild UI에서 테스트 리포트 시각화 가능
지원 포맷: JUnit XML, Cucumber JSON, TestNG XML, `Visual Studio Test


AWS CodeDeploy

app-spec.yaml 파일
appspec.yaml 파일을 통해 배포 단계를 정의 (배포를 정의하는 파일로, S3 버킷에 저장됨)
예:
설치 전/후 스크립트, 서비스 재시작 등
배포 구성 제어: 동시 배포 인스턴스 수를 제어 (예: 1개씩, 50%씩 등).
SNS 연동: 배포 성공, 실패, 인스턴스 실패 등을 SNS 알림으로 전달.

대상:

  • EC2 인스턴스
  • 온-프레미스 서버
  • Lambda 함수
  • ECS 서비스

배포 전략 (Deployment Strategies)

  • In-place (Rolling) 배포
    • 기존 인스턴스를 중지하고 새 버전을 설치
    • 배포 속도 조절 가능: 한 번에 전체/절반/하나씩 또는 사용자 지정 속도
  • Blue/Green 배포
    • 새 인스턴스/그룹에 새 버전을 배포하고 트래픽 전환
    • 예전 인스턴스를 유지하면서 전환 여부를 확인 가능 (무중단 배포 가능)

EC2/온-프레미스 배포

  • EC2 인스턴스에 CodeDeploy 에이전트 설치 필요
  • IAM 역할 필요: S3에서 앱 버전을 가져오기 때문
  • 배포 속도/방식 지정 가능 (예: 한 번에 50% 인스턴스만 업그레이드)

Lambda 배포

  • Alias(별칭) 를 활용해 트래픽을 새 버전(V2)으로 점진적으로 전환
  • 트래픽 전환 전략:
    • Linear: 일정 시간마다 트래픽 비율을 조금씩 증가
    • Canary: 일부만 먼저 전환해 테스트 후 전면 적용
    • All-at-once: 한 번에 전부 전환

ECS 배포

  • ECS 서비스에서 새 작업 정의(Task Definition) 을 등록
  • Target Group과 Application Load Balancer를 통해 트래픽 전환
  • Lambda와 유사한 Linear, Canary, All-at-once 전략 적용 가능

EC2 온프레미스 배포

  • EC2 인스턴스 선택 방식: 태그나 Auto Scaling Group(ASG)을 이용해 배포 대상 인스턴스를 식별.
  • ASG 사용 시 장점: 새로운 인스턴스도 자동으로 최신 버전이 배포됨.

트래픽 차단 후 앱 배포 → 정상 작동 확인 → 트래픽 전환 → 종료 정책 적용이라는 흐름

부하 분산기(ALB)와 연계한 배포 흐름
  • 배포 시 트래픽 제어:
    1. BeforeBlockTraffic – 인스턴스로 가는 트래픽 차단 전 실행할 수 있는 후크.
    2. BlockTraffic – ALB에서 실제 트래픽을 차단.
    3. AfterBlockTraffic – 트래픽 차단 직후 실행 가능한 후크.
애플리케이션 배포 단계와 후크(Hook)

각 단계는 appspec.yml에서 후크로 정의됨.

  1. ApplicationStop – 기존 앱 종료 스크립트 실행.
  2. DownloadBundle – S3 등에서 배포 파일 다운로드.
  3. BeforeInstall – 설치 전 사전 작업 수행.
  4. Install – 실제 배포 파일 설치.
  5. AfterInstall – 설치 후 정리 작업 수행.
  6. ApplicationStart – 새 앱 실행.
  7. ValidateService – 서비스 정상 동작 여부 확인.
블루/그린(Blue/Green) 배포 전략
  • 수동 모드: V1(블루), V2(그린) 인스턴스를 수동으로 구성.
  • 자동 모드: Auto Scaling Group으로 자동 생성.
  • 트래픽 전환: ALB가 점진적으로 V1 → V2로 트래픽 이동.
  • V1 인스턴스 종료 정책:
    • 일정 시간 후 자동 종료
    • 수동으로 종료 결정
    • 종료 안 하고 유지 (비용 ↑, 안정성 ↑)

ECS 배포

📦 배포를 위한 준비 사항 (개발자의 책임)
  • 새 Docker 이미지를 빌드하여 ECR에 푸시
  • 이를 참조하는 새 ECS 작업 정의(Task Definition) 개정본 생성
  • 이 정보를 포함한 appspec.yaml 파일 작성
    • 이 파일은 S3 버킷에 있어야 하며, CodeDeploy가 이 파일을 기준으로 배포를 수행
    • 필수 정보: 새 작업 정의 ARN, 컨테이너 이름/포트, 로드 밸런서 및 타깃 그룹 정보 등

ECR(Amazon Elastic Container Registry)은 AWS에서 제공하는 완전관리형 Docker 컨테이너 이미지 저장소

🚀 자동화된 배포 파이프라인 (CodePipeline 활용)
  1. CodeCommit에 코드 push
  2. CodeBuild 단계에서
    • Docker 이미지 빌드 → ECR 푸시
    • 새 ECS 작업 정의 등록
    • appspec.yaml 생성
  3. CodeDeploy 단계에서
    • appspec.yaml 기반으로 ECS 클러스터에 새 작업 배포
    • 이전 작업 중지 및 트래픽 전환
🎯 트래픽 전환 전략 (블루/그린)
  • 트래픽 전환 방식 예:
    • 선형(Linear): 예) 1분마다 10%씩 트래픽 이동
    • 카나리(Canary): 예) 처음 10% 트래픽 이동 후 15분간 관찰, 문제 없으면 나머지 전체 이동
  • 테스트 리스너를 구성해 실제 서비스 트래픽 이동 전, 사전 검증도 가능
🧩 배포 후크 (Lifecycle Hooks)
  • 람다 함수를 사용해 배포 단계별 유효성 검사를 자동 수행 가능
  • 주요 단계:
    • BeforeInstall: 사전 준비 작업
    • Install: 새 ECS 작업 시작
    • AfterInstall: 예를 들어 유효성 검사 수행 (e.g., 헬스체크, 기능 테스트)
    • AllowTraffic: 테스트 통과 시 트래픽 전환 허용
    • AfterAllowTraffic: 전체 트래픽 이동 후 최종 확인

💡 Lambda 함수의 코드 배포

배포 흐름 개요

  • 람다 버전 생성 → 별칭(alias) 업데이트 → 트래픽 전환
  • 이 과정을 AWS CodeDeploy를 통해 자동화함.Lambda 함수의 코드 배포
배포 자동화 파이프라인
  • CodePipeline 활용:
    • CodeCommit → 소스 코드 저장
    • CodeBuild → 코드 빌드 및 람다 새 버전 배포
    • CodeDeploy → app-spec.yaml을 사용해 별칭 업데이트 및 트래픽 전환
트래픽 전환 전략
  • 선형(linear): 예) 3분마다 10%씩 점진적 전환
  • 카나리(canary): 예) 10분간 10% 전환 후 전체 전환
  • All-at-once: 한 번에 전체 트래픽 전환
후크(Hook) 함수
  • BeforeAllowTraffic, AfterAllowTraffic 등 세 단계가 존재
  • 람다 함수로 정의되며, 트래픽 전/후에 유효성 검사를 자동화 가능

배포 실패시 디버깅 체크리스트

  • CodeDeploy 에이전트 설치 및 실행 여부
  • IAM 역할(서비스 역할, 인스턴스 프로필) 권한 확인
  • 프록시 사용 시: 프록시 URI 설정 확인
  • 시간 동기화 확인

CodeArtifact란?

AWS CodeArtifact는 패키지(아티팩트)를 저장하고 공유할 수 있는 완전관리형 아티팩트 저장소
Maven, Gradle, npm, pip, NuGet 같은 종속성 관리 도구와 통합됨

저장소는 하나 이상의 업스트림 리포지토리를 가질 수 있어, 종속성을 찾을 때 다른 저장소에서도 검색 가능하게 합니다.

업스트림 리포지토리의 장점

  • 개발자는 하나의 저장소만 설정하면, 해당 저장소가 업스트림을 통해 여러 저장소의 패키지를 검색하게 됩니다.
  • 종속성 검색 트리를 설정해 패키지를 자동으로 찾고 캐싱할 수 있습니다.

외부 연결 (External Connection)

  • 저장소 1개당 1개의 외부 연결을 가질 수 있으며, 퍼블릭 리포지토리와 연결됩니다. (예: npmjs, Maven Central, PyPI 등)
  • 패키지가 로컬 저장소에 없으면 외부 연결을 통해 퍼블릭 저장소에서 패치 후 캐시됩니다.
  • 다른 저장소(B, C, D)는 이 외부 연결을 가진 A를 업스트림으로 설정하여 간접적으로 퍼블릭 리포지토리와 연결됩니다.

Amazon CodeGuru

두 가지 주요 기능을 제공:

  1. CodeGuru Reviewer (코드 리뷰어)
    • 개발자가 코드를 GitHub, Bitbucket 등에 푸시할 때, 자동으로 코드 리뷰를 수행.
    • 정적 분석(static analysis) 기반으로 작동하며, 다음을 자동으로 감지:
      • 버그
      • 보안 취약점 (자격 증명, SSH 키 등 비밀이 발견되면 자동 보호 조치 제안)
      • 리소스 누수
      • 모범 사례 위반 등
    • 머신 러닝 모델은 수천 개의 오픈소스 및 Amazon 내부 코드로 학습되어 있으며, Java와 Python을 지원.
  2. CodeGuru Profiler (성능 프로파일러)
    • 애플리케이션이 실행 중일 때(runtime) 성능을 분석.
    • CPU 사용량, 메모리 사용량, 힙 요약 등을 추적해 고비용·비효율 코드 감지
    • 애플리케이션이 클라우드 또는 온프레미스에서 실행되더라도 사용 가능
    • 성능 병목 현상, 과도한 리소스 소비, 이상 징후 등을 분석하고 개선 권고 제공
    • 최소한의 오버헤드로 성능 모니터링 가능

EC2 이미지 빌더 (EC2 Image Builder) 개요

EC2 AMI나 컨테이너 이미지를 자동 생성, 테스트, 배포하는 서비스.


AWS Amplify

AWS Amplify는 웹 및 모바일 애플리케이션의 프런트엔드와 백엔드를 쉽고 빠르게 개발 및 배포할 수 있도록 지원하는 전체 스택 개발 플랫폼

  • 백엔드 구축: Amplify CLI 또는 Amplify Studio를 통해 다양한 AWS 서비스 기반의 백엔드를 설정 가능.
    • 인증 → Amazon Cognito
    • 파일 저장소 → Amazon S3 (정적 파일 호스팅 및 사용자 파일 업로드)
    • REST API → API Gateway + AWS Lambda
    • GraphQL API → AWS AppSync
    • 데이터베이스 → Amazon DynamoDB
    • 서버리스 함수 → AWS Lambda
    • ML/AI 서비스 연결 → 예: Amazon Rekognition, Polly 등
  • 프런트엔드 연동: React, Next.js, Angular, Vue, iOS, Android 등 다양한 플랫폼과 쉽게 통합할 수 있는 라이브러리 및 코드 생성 기능 제공.
  • 배포: GitHub, GitLab, Bitbucket 등의 리포지토리를 연결하여 자동 CI/CD 배포 가능.
    배포된 앱은 내부적으로 Amazon CloudFront를 통해 전 세계에 배포.

'Web' 카테고리의 다른 글

AWS DOP - CloudFormation (2)  (0) 2025.04.17
AWS DOP - CloudFormation (1)  (0) 2025.04.16
k8s 간략히 따라해보기  (0) 2025.04.13
AWS EC2 -> 온프레미스 전환 (4) - 절전 모드 방지  (0) 2025.04.11
AWS EC2 -> 온프레미스 전환 (3) - ssh 설치  (0) 2025.04.11
'Web' 카테고리의 다른 글
  • AWS DOP - CloudFormation (2)
  • AWS DOP - CloudFormation (1)
  • k8s 간략히 따라해보기
  • AWS EC2 -> 온프레미스 전환 (4) - 절전 모드 방지
마술사의 수습생
마술사의 수습생
언젠간 당신처럼 되고 싶어요.
  • 마술사의 수습생
    개발 기록 블로그
    마술사의 수습생
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • Web (50)
      • 일기 (2)
      • 잡담 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
마술사의 수습생
AWS DOP - SDLC Automation 파트 개념 정리
상단으로

티스토리툴바