AWS SAM + CodePipeline
AWS SAM + CodePipeline — #개발자의도구들 #AWSSAM #AWSCodePipeline 공부하다보니 서비스들이 너무 헷갈리고 그림으로 ...
#개발자의도구들 #AWSSAM #AWSCodePipeline
공부하다보니 서비스들이 너무 헷갈리고 그림으로 그려지지 않아서 직접 흔적을 남기기로 했다. 진짜 AWS에 헷갈리는 서비스 너무 많고, 디테일한거 물으면 끝도 없이 공부해야 하는 듯
아키텍처 소개
출처: AWS Cloud Quest
aws cloud quest
S3 버킷에 새 code를 올리면 notification을 발행하여 AWS Codepipeline이 실행되어 최종적으로 CloudFormation Stack이 만들어진다.
Source: S3
Build: CodeBuild
Test: skip
Deploy: CloudFormation
SAM
SAM은 Serverless Application Model로 IaC를 사용하여 서버리스 애플리케이션 빌드를 위한 오픈 소스 프레임워크이다. 약간 Terraform과 비슷한 느낌이다(AWS 전용 Terraform?).
SAM 명령어로 손 쉽게 SAM 프로젝트를 만들 수 있다.
serverless 애플리케이션이 완성되었다. SAM 명령어 사용시 이렇게 기본적인 템플릿을 제공해준다고 보면 된다.
기본적으로 생성되는 template.yaml에는 serverless 애플리케이션 전용 리소스들이 명시되어 있다. Terraform처럼 AWS 리소스 자원을 관리한다고 보면된다.
이제 해당 코드를 압축하여 S3로 옮기는 작업을 진행한다. (codePipelin 소스를 S3로 할 것이기 때문)
S3에 업로드
my-repository 디렉터리를 zip형태로 압축 후 aws 명령어를 사용해서 특정 bucket에 업로드할 수 잇다.
CodePipeline에서는 해당 버킷이 업데이트 되면 자동으로 build, test, deploy가 실행되도록 할 것이다. S3 버킷이 업데이트 되면 S3는 자동으로 noti를 발행한다.
CodePipeline 기본
애플리케이션 build, test, deploy를 설정하여 최종적으로 AWS 서비스에 애플리케이션을 배포하는 것을 목표로 함.
각각 사용 가능한 서비스들을 알아두면 좋다.
✅ = 자주 시험에 언급되는 서비스들
* V2기준으로 설명
📦 Source
- Amazon S3 ✅
- Amazon ECR
- AWS CodeCommit ✅
- CodeStarSourceConnection(3rd-party Git) ✅
ex) Bitbucket Cloud, GitHub / GitLab)
🏗️ Build
- AWS CodeBuild ✅
- Amazon ECR Build & Publish
- Commands action ✅
- 3rd-party: Jenkins, TeamCity, CloudBees
🧪 Test
- AWS CodeBuild
- AWS Device Farm
- 3rd-party
🚀 Deploy
- Amazon S3
- AWS CloudFormation ✅
- AWS CodeDeploy ✅
- Amazon ECS / Amazon EKS
- AWS Elastic Beanstalk ✅
- AWS AppConfig
- AWS OpsWorks
- WAS Service Catalog
- Amazon Alexa
추가 동작
- Approval
- Invoke(Lambda, Step Function, InspectorScan, Commands)
🚀 (Hands-on) CodeBuild 생성
🏗️ CodeBuild
Build는 AWS CodeBuild를 사용하여 진행한다. Code Build를 만들자.
S3를 source로 선택하고, 빌드 환경을 설정한다. 빌드 환경은 어떤 OS를 사용할 것인지, 어떤 이미지를 사용할 것인지를 선택하면 된다.
Build Spec을 커스텀 할 수 있다. Jenkins의 파이프라인 처럼 사용한다고 보면 된다. 직접 command를 등록해서 어떤식으로 빌드를 해야하는지 미리 정의한다.
1. sam 설치
2. s3 버킷에서 zip 파일 다운로드
3. unzip
4. my-repository로 이동 후 sam build 실행
5. 결과물은 my-repository/outputtemplate.yaml 파일로 저장
🚀 (Hands-on) CodePipeline 생성
이제 본격적으로 CodePipeline을 생성해보자.
📦 Source
소스는 S3 버킷, object까지 정확하게 설정
🏗️ Build
build는 Other build Provider-AWS CodeBuild로 설정 후 위에서 만든 AWS CodeBuild를 선택하면 된다.
🚀 Deploy
Test는 생략해주고 Deploy를 설정한다.
Deploy는 CloudFormation으로 설정한다. Action Mode를 Create or Update Stack으로 해두면 초기에는 생성하고 이후 매번 빌드마다 생성된 Stack이 업데이트 된다.
Deploy의 경우 inputArtifact가 BuildArtifact이며, 이를 정확하게 추적하기 위해 정확한 경로를 입력해준다.
이후 진행 경과를 Console에서 확인이 가능하다. Deploy가 완료되면 CloudFormation에서 Stack을 확인할 수 있다.
빌드오류 확인
빌드하다가 오류가 나오면 위 화면 처럼 retry 했다고 표시가 나온다.
들어가서 확인해보면 retry 횟수를 알 수 있다. 몇 번의 retry 후 계속 실패하면 전체 pipeline을 멈춘다.
콘솔에서 쉽게 build 환경을 추적할 수 있다. 오류가 나오면 오류메세지를 분석해서 build spec을 재정의 하면 된다.
오류난 부분을 빨간색으로 표시해줘서 가시성이 좋다.
[Container] 2025/08/27 01:52:14.699458 Phase complete: BUILD State: FAILED
[Container] 2025/08/27 01:52:14.699474 Phase context status code: COMMAND_EXECUTION_ERROR
Message: Error while executing command:
sam package --template-file sam-app/template.yaml --output-template-file outputtemplate.yaml --s3-bucket sam-bucket-4bf09020.
Reason: exit status 1
[Container] 2025/08/27 01:52:14.747685 Entering phase POST_BUILD
해당 명령어 실행 중 오류가 발생했다.
samconfig.toml에서 아래와 같이 설정을 변경하기
[default.package.parameters]
resolve_s3 = false
CloudFormation
Deploy까지 완료되면 CloudFormation에 성공적으로 Stack이 생성된다.
Manual Approval
배포 전 단계에서 수동 승인을 설정해 둘 수 있다.
📌
실수 배포 방지(4-eyes 원칙)
변경 검토(릴리즈 노트, 테스트 리포트, 변경요청 링크 확인)
환경 승격(Dev -> Staging -> 승인 -> Prod)
Deploy 스테이지에서 Add action group을 추가하면 된다. Provider를 Manual Approval로 설정하면 된다.
Deploy전에 Approve를 대기 하고 있다. 이후 승인을 해주면 아래와 같이 Deploy가 실행된다.
























