[AWS] sam을 이용한 serverless 배포
👉 serverless?
개발자가 서버를 관리할 필요 없이 app을 빌드하고 실행할 수 있도록하는 클라우드 네이티브 개발 모델이다.
serverless(= 서버가 없음)이지만 실제로 서버가 존재하지 않는 것은 아니다.
다만 serverless의 경우에는 application이 구동될 때에만 활성화가 된다.
즉, 이벤트가 발생될 때에만 resource가 할당되며 실행이 종료되면 resource가 비활성화되기 때문에 비용적인 측면에서도 효율성을 가질 수 있다.
👉 SAM
SAM
은 Serverless 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 명령어를 통해 간단하게 삭제를 할 수 있다.
Author And Source
이 문제에 관하여([AWS] sam을 이용한 serverless 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@___pepper/AWS-sam을-이용한-serverless-배포저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)