Transform: AWS::Serverless-2016-10-31
Globals: # 전역 설정, 리소스 공통으로 들어가는 설정
set of globals
Description: # 설명
String
Metadata:
template metadata
Parameters: # 파라미터들 설정할 수 있음, 숨기고싶은 것 여기에
set of parameters
Mappings:
set of mappings
Conditions:
set of conditions
Resources: # 필수, lambda, apigateway, s3 등 다양한 리소스 정의 가능
set of resources
Outputs: # 나중에 출력됨, 스택 속성 볼 때 여기서 설정
set of outputs
주석 친 애들은 꽤나 자주 쓰이고 중요하다고 생각함.
나머지는 그냥 그때그때 찾아보는 편이다.
RdsDBName, RdsEndpoint, RdsProxyEndpoint 파라미터를 생성하였다.
나중에 sam deploy -g
명령어를 실행시키면 해당 파라미터의 값을 입력하는 순간이 온다.
이런식으로 입력 가능!
개인정보나 보안이 필요한 경우, 숨기고 싶은 값이 있을 때 파라미터를 사용하는 편이다.
전역 설정이다. 해당하는 리소스는 전부 아래와 같은 설정을 갖게 된다.
앞으로 나올 Function 리소스는 전부 기본 런타임이 파이썬 3.9이고, 핸들러는 app.lambda_handler로 설정되는 것이다. 그 외에도 VpcConfid, CodeUri 등 정말 많은 속성을 추가할 수 있다.
위에 Parameter에서 만든 파라미터들을 !Ref 파라미터명
로 사용할 수 있다.
aws에는 api gateway 종류가 4개정도 있는 것으로 안다. 그 중 가장 많이 쓰이는 것 두가지는 HTTP API와 REST API 일 것이다.
더 최근에 나온 것이 HTTP API이며 가격이 조금 더 저렴하고 빠르다. 반면 REST API는 더 많은 기능을 설정할 수 있다.
사용하고자 하는 목적에 맞게 쓰면 될 것 같다.
어쨋든, 두 api gateway가 있어서 sam에서도 이를 다르게 취급하고, 설정할 수 있는 값들도 다르다.
HTTP API: https://docs.aws.amazon.com/ko_kr/serverless-application-model/latest/developerguide/sam-resource-httpapi.html
REST API: https://docs.aws.amazon.com/ko_kr/serverless-application-model/latest/developerguide/sam-resource-api.html
속성 값 중 Auth는 권한 부여를 위한 것이다.
Resources:
# HttpApi
AuthGatewayHttpApi:
Type: AWS::Serverless::HttpApi
Properties:
Auth:
Authorizers:
FirebaseAuthorizer:
IdentitySource: $request.header.Authorization
JwtConfiguration:
audience:
- !Ref FirebaseProjectId
issuer: !Sub https://securetoken.google.com/${FirebaseProjectId}
이런식으로 사용하였다.
가장 많이 쓴 Function 리소스다.
람다 함수를 다룰 때 사용한다.
https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html
링크에서 처럼 굉장히 많은 속성이 있는데 주로
CodeUri
: 코드가 있는 파일의 주소Environment
: 환경변수 설정 (위에 파라미터에서 가져올 수 있음)Events
: 트리거 설정, 주로 api를 달 때 사용Auth
: api에 권한부여 가능VpcConfig
: vpc를 설정할 수 있음 VpcConfig: # vpc를 설정 안 하겠다! 그럼 이렇게
SecurityGroupIds: !Ref AWS::NoValue
SubnetIds: !Ref AWS::NoValue
Role
: aws role 을 부여할 수 있음Timeout
: 타임아웃을 사용했다.
한 람다 함수가 되도록이면 한 가지 기능만 하도록 분할했는데, 이렇게 하니까 엄청 많은 람다함수가 만들어졌다. 이렇게 하는지 맞는지는 모르겠다만...