AWS DVA-C02AWS 허브발행일 2025. 8. 27.원본 https://blog.naver.com/jword_/223985055603 ↗

AWS SAM + CodePipeline

AWS SAM + CodePipeline — #개발자의도구들 #AWSSAM #AWSCodePipeline 공부하다보니 서비스들이 너무 헷갈리고 그림으로 ...

#DVA-C02#Naver Blog

#개발자의도구들 #AWSSAM #AWSCodePipeline

​

​

공부하다보니 서비스들이 너무 헷갈리고 그림으로 그려지지 않아서 직접 흔적을 남기기로 했다. 진짜 AWS에 헷갈리는 서비스 너무 많고, 디테일한거 물으면 끝도 없이 공부해야 하는 듯

​

아키텍처 소개

출처: AWS Cloud Quest

이미지

aws cloud quest

S3 버킷에 새 code를 올리면 notification을 발행하여 AWS Codepipeline이 실행되어 최종적으로 CloudFormation Stack이 만들어진다.

​

yaml 코드 예제
                                    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 서비스에 애플리케이션을 배포하는 것을 목표로 함.

​

각각 사용 가능한 서비스들을 알아두면 좋다.

text 코드 예제
                                    ✅ = 자주 시험에 언급되는 서비스들
* 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를 등록해서 어떤식으로 빌드를 해야하는지 미리 정의한다.

​

text 코드 예제
                                    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을 재정의 하면 된다.

이미지

오류난 부분을 빨간색으로 표시해줘서 가시성이 좋다.

text 코드 예제
                                    [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에서 아래와 같이 설정을 변경하기

text 코드 예제
                                    [default.package.parameters]
resolve_s3 = false

CloudFormation

이미지

Deploy까지 완료되면 CloudFormation에 성공적으로 Stack이 생성된다.

​

Manual Approval

배포 전 단계에서 수동 승인을 설정해 둘 수 있다.

text 코드 예제
                                    📌
실수 배포 방지(4-eyes 원칙)
변경 검토(릴리즈 노트, 테스트 리포트, 변경요청 링크 확인)
환경 승격(Dev -> Staging -> 승인 -> Prod)

이미지

Deploy 스테이지에서 Add action group을 추가하면 된다. Provider를 Manual Approval로 설정하면 된다.

​

이미지

이미지

Deploy전에 Approve를 대기 하고 있다. 이후 승인을 해주면 아래와 같이 Deploy가 실행된다.

이미지

​