[AWS] sam을 이용한 serverless 배포

👉 serverless?

개발자가 서버를 관리할 필요 없이 app을 빌드하고 실행할 수 있도록하는 클라우드 네이티브 개발 모델이다.
serverless(= 서버가 없음)이지만 실제로 서버가 존재하지 않는 것은 아니다.
다만 serverless의 경우에는 application이 구동될 때에만 활성화가 된다.
즉, 이벤트가 발생될 때에만 resource가 할당되며 실행이 종료되면 resource가 비활성화되기 때문에 비용적인 측면에서도 효율성을 가질 수 있다.

👉 SAM

SAMServerless Application Model의 줄임말로 aws에서 제공하는 serverless application 생성를 위한 resource 중 하나이다.
lambda를 이용하여 배포를 진행할 때 CloudFormation을 사용하게 된다면 배포를 할 서비스에 비해 CloudFormation은 방대한데 SAM은 이런 CloudFormation을 간단하게, web 개발에 쓰이는 것들만 사용할 수 있도록 해준다.
간편하게 생성할 수 있으나 제약 사항이 많다는 단점이 존재한다.

Api gateway 와 lambda를 따로 생성한 뒤 연결하여 같은 기능을 하도록 구현할 수 있으나, SAM을 사용하면 생성 및 연결 작업을 모두 진행해주기 때문에 훨씬 간편하게 구현이 가능하다.

SAM을 터미널에서 사용하기 위해서는 aws-sam-cli를 설치해야 사용할 수 있다.

$> brew tap aws/tap
$> brew install aws-sam-cli

✏️ 생성하기

$> sam init

명령어를 통해 SAM 프로젝트 생성을 시도하면, 먼저 생성을 위한 template를 선택하도록 한다.

AWS에서 제공하는 template을 사용하고자 하면 어떤 template을 사용할 것인지 선택을 해주고,

어떤 언어를 사용할 것인지 선택한 후,

어떤 패키지 타입을 사용할 것인지 선택과

프로젝트의 이름을 작성해주면 sam project가 생성된다.

생성이 완료되면 다음과 같은 구조로 파일들이 생성이 된다.

이 중 중요한 파일은 template.yaml 파일인데, template.yaml에는 프로젝트에 대한 정보들이 작성되어있다.
Resources 하위에는 사용자가 접근할 enpoint와 접근 시 실행될 lambda 함수(handler) 에 대해 적혀있다.

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello_world/
      # 실행되는 lambda handler 함수 지정
      Handler: app.lambda_handler
      Runtime: python3.9
      Architectures:
        - x86_64
      Events:
        HelloWorld:
          # AWS Gateway의 REST API를 생성
          Type: Api
          Properties:
            Path: /hello
            Method: get

실행되는 lambda 함수(handler)CodeUri에 작성된 dir > app.py 파일에 lambda_handler라는 이름의 함수로 되어있다.
함수가 위치하는 디렉토리CodeUri에 작성해주고 Handler파일명.함수명으로 handler 함수를 작성해준다.

lambda_hanlder method 👇

def lambda_handler(event, context):

    return {
        "statusCode": 200,
        "body": json.dumps({
            "message": "hello world",
            # "location": ip.text.replace("\n", "")
        }),
    }

✏️ 배포하기

$> sam build

우선 위와 같은 명령어를 통해 template.yaml에 적혀진 명세대로 프로젝트를 build한 후,

# 최초 수행 시
$> sam deploy --guided

# 이후 수행 시
$> sam deploy

deploy 명령을 통해 배포를 진행한다.
최초 배포를 진행할 때에는 꼭 --guided 옵션을 사용해주어야한다.
해당 옵션을 사용하면, 프로젝트의 argument들을 설정시켜준 뒤 배포가 진행된다.

배포가 완료된 후 설정한 endpoint로 접근하면, handler 함수에 작성해놓은 대로 동작하는 것을 확인할 수 있다.

배포가 완료된 SAM의 stack은 aws console > CloudFormation > stack에서 확인할 수 있으며,.
lambda 함수aws console > Lambda > Functions에서 확인할 수 있다.

✏️ 삭제하기

$> sam delete

생성했던 SAM은 delete 명령어를 통해 간단하게 삭제를 할 수 있다.

좋은 웹페이지 즐겨찾기