클라우드(AWS)/DVA-C02

[AWS] SAM vs. CloudFormation vs. CDK 비교하기 (언제 어떤 도구를 선택해야 할까?)

찌르비 2024. 11. 21. 18:28
반응형

 

 

AWS 리소스를 정의하고 배포하는 서비스 중에 비슷하면서 헷갈리는게 있다.

그건 바로 다음과 같은 리소스

  1. CloudFormation 
  2. CDK (Cloud Development Kit)
  3. SAM (Serverless Application Model)

 

AWS CloudFormation

AWS 리소스를 코드(YAML 또는 JSON 형식 템플릿)로 정의하고 배포하는 인프라 코드(IaC) 서비스이다.

 

자세한 내용: https://jibinary.tistory.com/442

 

[AWS] CloudFormation이란? 쉽게 정리 (IaC, Template, Stack, StackSets, Service Role, Service Catalog)

◇  공부 기록용으로 작성하였으니 틀린점, 피드백 주시면 감사하겠습니다 ◇ Infrastructure as Code, IaCCloudFormationCloudFormation은 AWS에서 인프라를 코드로 관리(IaC)할 수 있게 해주는 서비스이다.이

jibinary.tistory.com

 

AWS SAM (Serverless Application Model)

서버리스(Serverless) 애플리케이션 개발에 특화된 서비스 (CloudFormation과 100% 호환된다)
CloudFormation을 확장하여 서버리스 리소스(예:  Lambda, API Gateway, S3 등의)를 간소화한 템플릿으로 정의한다.

 

자세한 내용: https://jibinary.tistory.com/480

 

[AWS] SAM (Serverless Application Model)이란? 쉽게 정리 (SAM CLI, Template)

◇  공부 기록용으로 작성하였으니 틀린점, 피드백 주시면 감사하겠습니다 ◇ SAM (Serverless Application Model)SAM은 Serverless 애플리케이션을 배포하는 데 사용하는 오픈 소스 프레임워크이다.SAM은

jibinary.tistory.com

 

 

AWS CDK (Cloud Development Kit)

프로그래밍 언어(예: TypeScript, Python, Java, C#, Go 등)를 사용해 인프라를 정의한다. CloudFormation을 생성하는 고급 레벨의 추상화 도구.

 

자세한 내용: https://jibinary.tistory.com/494

 

[AWS] Cloud Development Kit (CDK) 이란? 쉽게 핵심 정리

◇  공부 기록용으로 작성하였으니 틀린점, 피드백 주시면 감사하겠습니다 ◇  Define your cloud application resources using familiar programming languagesAWS Cloud Development Kit (CDK)Cloud Development Kit(CDK)는

jibinary.tistory.com

 

 

언제 어떤 도구를 선택해야 할까?

서버리스 애플리케이션 개발 SAM Lambda, API Gateway 등에 최적화된 간단한 템플릿. 로컬 테스트 지원.
모든 AWS 리소스를 선언적으로 관리해야 하는 경우 CloudFormation 선언적 템플릿으로 안정적이고 표준화된 방식으로 모든 AWS 리소스를 지원.
프로그래밍 로직과 동적 리소스 정의가 필요한 경우 CDK 프로그래밍 언어를 사용해 동적으로 복잡한 인프라를 생성 및 관리.
기존 애플리케이션과 인프라를 하나의 언어로 통합 CDK 애플리케이션 로직과 인프라 코드를 동일한 언어로 정의 가능.
단순히 리소스 템플릿을 생성하고 배포하려는 경우 CloudFormation YAML/JSON 기반의 선언적 템플릿으로 빠르고 직관적인 설정 가능.
서버리스 애플리케이션을 개발하면서 CI/CD를 통합 SAM 서버리스 리소스에 최적화된 배포 및 테스트 도구 제공.

 

결론

SAM(Serverless Application Model)서버리스 애플리케이션 개발 및 로컬 테스트에 적합.
CloudFormation: 모든 AWS 리소스의 선언적 관리 및 배포에 적합.
CDK(Cloud Development Kit): 동적인 프로그래밍 언어를 활용한 리소스 정의와 코드 재사용이 필요한 경우 적합.

 

 


🤔 문제

AWS Cloud Development Kit(AWS CDK)를 사용해 서버리스 애플리케이션을 구현 중인 한 개발자가 있습니다. 이 개발자는 AWS Lambda 함수와 Amazon API Gateway API를 여러 개 프로비저닝하며, AWS CloudFormation 스택 생성 과정에서 이를 설정할 예정입니다.
개발자의 워크스테이션에는 AWS Serverless Application Model(AWS SAM)과 AWS CDK가 로컬에 설치되어 있습니다.
개발자가 특정 Lambda 함수를 로컬에서 테스트하려면 어떻게 해야 하나요?

 

  1. sam package와 sam deploy 명령을 실행합니다. AWS Management Console에서 Lambda 테스트 이벤트를 생성한 뒤, Lambda 함수를 테스트합니다.
  2. cdk synth와 cdk deploy 명령을 실행합니다. AWS Management Console에서 Lambda 테스트 이벤트를 생성한 뒤, Lambda 함수를 테스트합니다.
  3. cdk synth와 sam local invoke 명령을 실행하며, 함수 구성 식별자와 생성된 CloudFormation 템플릿 경로를 사용합니다.
  4. cdk synth와 sam local start-lambda 명령을 실행하며, 함수 구성 식별자와 생성된 CloudFormation 템플릿 경로를 사용합니다.

정답

더보기

정답. 3번

 

cdk synth

AWS CDK 애플리케이션에서 작성한 코드를 CloudFormation 템플릿(YAML 형식)으로 변환한다.

 

cdk deploy

cdk synth로 생성된 CloudFormation 템플릿을 AWS에 직접 배포한다.

 

sam package

로컬에서 작성된 AWS SAM 템플릿을 AWS에 배포할 수 있도록 패키징한다.
 

sam deploy

sam package 명령으로 생성된 패키지 템플릿을 사용해 리소스를 AWS에 배포한다.

 

sam local invoke

로컬에서 특정 Lambda 함수를 테스트한다.

예시: sam local invoke MyFunction --event event.json

 

 

1번, 2번. (오답) 로컬이 아니기 때문에 오답

 

 

728x90
반응형