AWS SAM(Serverless Application Model)은 코드형 인프라(from1) 도구 클라우드포메이션(AWS Cloud Formation)(from2)에 애플리케이션을 뭉친 덩어리이다. 즉, 서버리스 애플리케이션을 찍어내는 뼈대다(from4). 클라우드포메이션을 사용하면 template.yaml 파일을 이용해 인프라를 구성하게 되는데 SAM 템플릿에도 이 파일이 포함되어 있다. 그 예시는 아래와 같다.
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function # More info about Function Resource: <https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction>
Properties:
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.9
Architectures:
- arm64
파일을 보면 애플리케이션의 일부가 AWS::Serverless::Function
즉 AWS Lambda(from3)로 구성되어 있음을 알 수 있다. aws sam build
과 aws sam deploy --guided
명령으로 배포된 애플리케이션에 요청을 보내기 위해서는 URL을 알아야 하는데, 튜토리얼을 따라하는 경우 URL은 다음과 같은 규칙으로 구성된다.
https://<restapiid>.execute-api.us-east-1.amazonaws.com/<기타등등>
이때 필요한 <restapiid>는 AWS API Gateway 홈에서 확인할 수 있다.
내 로컬 환경이 arm64이기 때문에, 로컬 환경과 배포 환경을 동일하게 만들기 위해 template.yaml
파일의 Architectures
를 arm64
로 설정했다(참고1:AWS Lambda는 arm64를 지원한다)는 점에 주의하자. 도커 기반의 SAM을 이용하는 경우도 마찬가지다. arm64아키텍처에서 빌드된 도커 이미지는 보통 도커 이미지의 태그에 arm64
가 명시되어 있다. 예를 들어 내가 사용하는 도커 이미지의 이름과 태그는 public.ecr.aws/lambda/python:3.8-arm64
이다. 이미지의 목록은 ECR 갤러리(참고2)에서 찾을 수 있다.
<aside>
💡 다만 이 때, 모든 리전에서 arm64 컴퓨팅 자원을 지원하지 않으므로 SAM을 사용하는 계정의 configure
설정이 필요하다. aws configure 명령어를 사용하며 us-east-1 등 arm64 컴퓨팅을 지원하는 리전인지 확인해 보자.
~/dev/PracticalMLOps/aws-sam/sam-app » aws configure janghoo@Janghoo-MacBookPro
AWS Access Key ID [****************WRFA]:
AWS Secret Access Key [****************3RL2]:
Default region name [**us-east-1**]:
Default output format [None]:
</aside>
AWS API Gateway 가 무엇을 하는 것이고, 그것이 왜 필요한가? SAM, Lambda 와 어떤 관련이 있는가?
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료들.
None
from : 과거의 어떤 생각이 이 생각을 만들었는가?