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 : 언젠가 이 글에 쓰이면 좋을 것 같은 재료들.
Nonefrom : 과거의 어떤 생각이 이 생각을 만들었는가?