AWS

[AWS] aws 강의 섹션 25 (AWS SAM)

대기업 가고 싶은 공돌이 2024. 11. 28. 16:56

AWS SAM

  • SAM = ServerLess Application Model
  • 서버리스 애플리케이션을 개발하고 배포하기 위한 프레임워크이다.
  • 코드를 작성하고 나서 SAM과 호환되는 Yaml 형식의 구성 파일을 사용하게 된다.
  • 아주 간단한 Sam.yml 파일로 아주 복잡한 클라우드 포메이션을 만들 수 있다.
  • 클라우드 포메이션의 모든 항목을 지원한다
  • 샘 내부적으로 코드 디플로이를 사용하여, 람다 함수를 배포할 수 있으며 
    람다, api 게이트웨이, 다이나모 DB를 로컬에서 실행하는 데 도움을 줄 수 있다.
  • 샘은 서버리스 애플리케이션을 기반으로 이를 로컬에서 디버깅하고 클라우드 포메이션을 사용해서
    신속하게 배포할 수 있도록 설계됐다.

AWS SAM - Recipe

  • SAM은 레시피로 구성되며, 템플릿 맨 위에 SAM 템플릿임을 나타내는 변환헤더를 추가하게 된다.
    • Transform: 'AWS::Serverless-2016-10-31' 이런 변환 헤더를 추가하면 샘 템플릿임을 인식한다.
    • 이 변환 헤더는 클라우드 포메이션 템플릿으로 변환되어, 배포하는데 이용된다.
  • 코드 작성
    • AWS::Serverless::Function
    • AWS::Serverless::Api
    • AWS::Serverless::simpleTable
    • 이러한 구성으로 자원을 예약한다.
  • 이후 이 애플리케이션을 aws에 패키지화하여 배포하려면, 동일한 배포명령을 사용해야 한다.
    • Package & Deploy:sam deploy (Optionally preceded by "sam package")
    • 이 명령 말고도 sam Acclerate를 활용해서 람다에 변경사항을 매우 빠르게 반영하는 방법도 있다.

SAM Deployment

  • 애플리케이션 코드와 yaml 형식으로 된 Sam.yml 파일이 있다.
  • 이후 sam build를 사용해서 로컬로 애플리케이션을 구축한다.
  • 샘 파일은 클라우드 포메이션 템플릿으로 변환된다.
  • 이후 sam deploy를 사용해서 배포할 수 있다.
  • 모든 것을 압축하여 S3 버킷에 업로드한 다음
  • 클라우드 포메이션에서 자동으로 세트 변경을 실행한다.
  • 이후 클라우드 포메이션의 스택은 람다, api 게이트웨이, 다이나모 디비 등으로 구성된다.

SAM Accelerate

  • AWS에 리소스를 배포하는 동안 지연 시간을 줄이는 데 사용되는 일련의 기능이다.
  • 명령어는 sam sync로
    sam 탬플릿으로 선언한 프로젝트를 aws에 배포하는 데 사용될 것이다.
  • 그리고 실제로 클라우드 포메이션을 우회하게 된다.
  • 서비스 api를 사용하여 인프라를 업데이트하지 않고 코드 변경만 하면 된다.
  • 이미 모든 것이 배포된 상황에서
  • sam sync를 사용하면 람다 함수에 올라가있는 코드만 자동으로 변경되는 것이다.

여러 옵션

  • sam sync (no option)
    • 코드와 인프라 모두를 업데이트한다.
  • sam sync --code
    • 코드만 변경한다.
  • sam sync --code --resource AWS::Serverless::Function
    • 오직 람다 함수의 의존성과 코드만 변경한다.
  • sam sync --code --resource-id 23y912y3899
    • 특정 아이디를 가진 리소스만 변경한다.
  • sam sync --watch
    • 파일 변경 사항을 자동으로 모니터링한다.
    • 이후 변경 사항이 감지되면 자동으로 변경한다.

SAM Policy Templates

  • 람다 함수에 권한을 설정할 수 있는 템플릿의 목록이다.
  • 이들은 아주 간단한 템플릿으로
    람다함수를 통해 할 수 있는 작업을 알려준다. 
  • 권한 템플릿 예시
    • S3ReadPolicy: S3 객체에 대하여 읽기 권한만 부여하는 정책 템플릿이다.
    • SQSPollerPolicy: 람다 함수가 SQS 대기열을 폴링할 수 있게 한다.
    • DynamoDBCrudPolicy: 다이나모 디비에 대한 CRUD를 허용한다.

  • 이렇게 설정하면 자동으로 샘 템플릿에서 람다함수에 IAM 권한을 연결한다.

SAM 과 CodeDeploy의 통합

  • sam은 코드 디플로이를 활용해서 람다 함수를 업데이트 할 수 있다.

  • 여러 가지 명령어가 존재한다.
  • AutoPublishAlias: 새로운 코드가 배포되면 sam이 그걸 탐지하도록 돕는 것이다.
    • 새 버전으로 바뀐다면 별칭이 자동으로 업데이트 된다.
  • 트래픽 전환을 조절하는 것은
  • DeploymentPreference에 의해 통제된다.
    • Canary, Linear, AllAtOnce 등의 유형이 존재한다.
  • 이 예시는 카나리 10분 10 프로로 돼있다.
  • Alarm: 배포의 롤백을 트리거 할 수 있다.
  • Hooks: 트래픽 변경 이전 또는 이후에 실행될 함수를 정의한다.
    • 배포물을 테스트하는 데 도움이 된다.

SAM - Local Capabilities

  • sam 프레임워크를 사용하면 로컬에서 람다 함수를 시작할 수 있다.
    • sam local start-lambda를 입력하면 컴퓨터에서 람다 함수를 모방하는
      로컬 엔드포인트를 사용할 수 있게 된다.
  • 이 로컬 엔드 포인트로 람다함수를 호출해서 테스트를 해볼 수 있다.

SAM - Multiple Environments

  • sam을 사용하면 개발 스택 내의 여러 환경을 쉽게 관리할 수 있다.
  • 샘 템플릿을 때로는 개발 환경 때로는 운영환경에 배포한다고 생각해보자
  • 개발 파라미터와 운영 파라미터를 각각 다르게 설정하여 두 환경을 다르게 설정할 수 있다.
  • 하나의 파일을 가지고 두 리소스로 배포가 가능한데
  • sam deploy --config-env dev로 하면 개발 리소스에
  • sam deploy --config-env pord로 하면 운영 리소스에 배포가 가능하다.