[SAM] template.yaml 파일 작성하기

장선규·2022년 10월 26일
0

aws

목록 보기
1/1

YAML 구조

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

주석 친 애들은 꽤나 자주 쓰이고 중요하다고 생각함.
나머지는 그냥 그때그때 찾아보는 편이다.

Parameters


RdsDBName, RdsEndpoint, RdsProxyEndpoint 파라미터를 생성하였다.
나중에 sam deploy -g 명령어를 실행시키면 해당 파라미터의 값을 입력하는 순간이 온다.

이런식으로 입력 가능!
개인정보나 보안이 필요한 경우, 숨기고 싶은 값이 있을 때 파라미터를 사용하는 편이다.

Globals

전역 설정이다. 해당하는 리소스는 전부 아래와 같은 설정을 갖게 된다.
앞으로 나올 Function 리소스는 전부 기본 런타임이 파이썬 3.9이고, 핸들러는 app.lambda_handler로 설정되는 것이다. 그 외에도 VpcConfid, CodeUri 등 정말 많은 속성을 추가할 수 있다.

위에 Parameter에서 만든 파라미터들을 !Ref 파라미터명 로 사용할 수 있다.

Resources

HttpApi vs Api

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

가장 많이 쓴 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: 타임아웃

을 사용했다.

한 람다 함수가 되도록이면 한 가지 기능만 하도록 분할했는데, 이렇게 하니까 엄청 많은 람다함수가 만들어졌다. 이렇게 하는지 맞는지는 모르겠다만...

profile
코딩연습

0개의 댓글