AWS

[AWS] Compute: SAM, Batch (2)

graph-dev 2024. 9. 19. 21:19
728x90

AWS Compute: SAM, Batch

 

 

 

SAM(Serverless Application Model)

SAM 캐릭터

 

쌤, 줄임말입니다. 서버리스 애플리케이션 모델이라고 합니다. 서버리스 애플리케이션을 개발하고 배포하는 프레임워크입니다.

 

모든 configuration은 YAML 코드를 사용합니다. 

단순한 SAM YAML 파일에서 복잡한 CloudFormation 생성합니다. 이 클라우드 포메이션(outputs, mappings, parameters, resources 등)에서 무엇이든 지원합니다.

SAM은 람다 함수를 배포하는 CodeDeploy 사용할 수 있습니다. 그 외에도, 람다, API GW, DynamoDB를 로컬(localloy) 실행하도록 돕습니다.

 

원래 목적은 서버리스 애플리케이션을 사용하고 이를 통해 디버그하고 빠르게 배포하는 AWS 클라우드 서비스입니다.

 

 

AWS SAM 레시피?

SAM 템플릿이 있습니다. 가령, 변환 헤더를 가리킬 때, 아래와 같이 표기합니다.

Transform: 'AWS::Serverless-2016-10-31'

 

특이한 점은 이 콜론(:) 표기를 두번 붙이는 경우(::)가 있다는 것이죠. 코드로 확장할 때는 아래처럼 작성할 수 있습니다. 

람다 함수, API GW, DynamoDB를 아래처럼 표기할 수 있습니다.

AWS::Serverless::Function
AWS::Serverless::Api
AWS::Serverless::SimpleTable

 

패키지와 배포를 할 때에는 아래 명령어를 사용합니다.

sam package #과거에는 이걸 적음.
sam deploy

 

SAM accelerate로, 빠르게 로컬에서 변화를 AWS Lambda로 동기화합니다. 빠르게 동기화하려면 이걸 씁니다.

sam sync --watch

 

 

SAM 배포 파이프라인

SAM 배포 파이프라인 예시

 

 

위와 같은 예시를 사용할 수 있습니다. 여기서 하나씩 나누어 살펴보겠습니다.

SAM Template에서 sam build를 통해 Cloudformation Template + 코드로 변환하고, sam deploy를 통해 자동으로 S3에 압축 후 업로드하고, 클라우드 포메이션에서 생성, 실행하고, 스택으로 전달합니다. 스택은 서버리스 구성 서비스로 갑니다.(람다, API GW, DynamoDB)

 

 

 

1. SAM Accelerate (sam sync)

잘 안보이는 이미지 sam sync

 

SAM Accerlerate는 리소스를 AWS로 배포하는 동안, 지연시간을 줄이는 피처들의 집합입니다. 관련 명령어로는 sam sync라는 것이 있습니다. 가능한 빠르게 배포되어야 겠습니다.

 

sam sync

 

  • SAM 템플릿으로 선언된 프로젝트를 AWS와 동기화합니다.
  • 인프라 업데이트 없이, AWS로 코드 변화를 동기화합니다. (서비스 API와 bypass CloudFormation을 사용합니다.)
    • 즉, 아주 빠른 배포가 가능하겠죠?
  • 코드를 바꾸면 sam이 이를 알아차리고 람다로 전달할 때 동기화합니다.

 

각 옵션별로 확인해보겠습니다.

 

1. sam sync

별도 옵션이 없다면, 코드와 인프라를 동기화합니다.

 

2. sam sync --code

인프라는 업데이트 없이 코드 변화를 동기화합니다. (CloudFormation 우회, 수초 내 업데이트)

 

3. sam sync --code --resource AWS::Serverless::Function

모든 람다 함수들과 관련 의존성만을 동기화합니다.

 

4. sam sync --code --resource-id HelloWorldLambdaFunction

사용자 지정 함수 ID에 해당하는 특정 리소스만을 동기화합니다.

 

5. sam sync --watch

1) 파일 변화를 모니터링하고, 자동으로 변화가 감지될 때 동기화합니다. 백그라운드에서 돌아가서 감지할 수도 있죠.

2) 만일 변경사항에 환경설정(configuration)이 포함되면, sam sync 사용합니다.

3) 만일 코드만 변경되면, sam sync --code 사용합니다.

 

 

SAM CLI 디버깅

  • AWS SAM 템플릿을 사용하여 정의된 서버리스 애플리케이션을 로컬에서 빌드, 테스트, 디버깅할 수 있습니다.
  • 람다와 유사한 execution 실행 환경을 로컬에서 제공합니다.
  • SAM CLI + AWS 툴킷으로, 단계별로 당신의 코드를 디버깅합니다.
  • 지원 IDE: AWS Cloud9(종료), VS Code, 제트프레인, 파이참, 인텔리제이 등
  • AWS 툴킷: AWS SAM을 사용해서 빌드된 Lambda 함수를 빌드, 테스트, 디버그, 배포, 호출하도록 돕는 IDE 플러그인을 말합니다.

SAM CLI 디버깅

 

 

AWS Batch 배치

AWS Batch

 

  • 도커 이미지로 batch job을 실행합니다.
  • 인스턴스의 동적 프로비저닝(dynamic provisioning)이 가능합니다. EC2, Spot Instances
  • 볼륨과 요구사항에 기반하여, 최적의 quantity와 타입을 결정합니다.
  • 완전 serverless: 클러스터를 관리할 필요 없어요! 오직 EC2 인스턴스 비용만 내면 됩니다.
  • CloudWatch Events를 사용해서 배치 잡을 스케줄합니다.
  • AWS Step Functions를 사용해서 배치 잡을 Orchestrate 합니다.

 

AWS Batch와 Glue 비교하기

간단히 표로 정리해보았습니다. 크게 보면 ETL=GLUE, Non-ETL=Batch 이렇게 구분하면 되겠네요!

AWS Batch와 AWS Glue 비교

 

서비스 AWS Glue AWS Batch
주요 목적 ETL(추출, 변환, 적재) 작업에 중점 모든 종류의 컴퓨팅 작업 처리 가능하나, non-ETL 권장
실행 방법 Apache Spark (Scala 또는 Python) 코드 실행 Docker 이미지 필요
리소스 관리 리소스를 구성하거나 관리할 필요 없음 리소스는 사용자의 계정에서 생성되며 Batch가 관리
추가 기능 Data Catalog 를 통해 데이터를 Athena 혹은
Redshift Spectrum 에서 사용 가능
ETL 작업이 아닌 모든 작업에 적합