serverless framework 환경 설정 serverless.yml

이전편 : serverless framework 시작하기

목표

  • serverless.yml 파일 수정으로 AWS 배포 환경 설정을 한다.
  • 배포 리전, IAM Role부여, vpc 설정, lambda 함수 설정
  • 배포 리전 : 서울 리전
  • 사용 언어 : python3.8
  • 필요 IAM Role : ssm get, s3 put/get
  • project 이름 : sncr-data-collectors
  • lambda 함수 이름 : naverBand
  • 매일 아침 9시에 한번씩 이 함수가 동작해야한다.

프로젝트 디렉토리

image

코드

serverless.yml

service: sncr-data-collectors

frameworkVersion: "2"

provider:
  name: aws
  runtime: python3.8

  stage: dev
  region: ap-northeast-2

  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "ssm:GetParameter"
        - "ssm:GetParameters"
        - "ssm:GetParametersByPath"
      Resource:
        Fn::Join:
          - ":"
          - - "arn:aws:ssm"
            - Ref: AWS::Region
            - Ref: AWS::AccountId
            - "parameter/sncr/*"
    - Effect: "Allow"
      Action: "s3:PutObject"
      Resource:
        - "arn:aws:s3:::senior-creator/naver-band/*" # 버킷 이름/폴더이름/*

  vpc: # db접속을 위한 vpc 설정 
    securityGroupIds:
      - sg-********************
    subnetIds:
      - subnet-********************
      - subnet-********************
      - subnet-********************

package:
  individually: true

functions:
  naverBand: # 함수명 
    handler: naver_band.handler.collect #실제 동작하는 함수는 naver_band폴더의 handler.py의 함수 collect()이다.
    memorySize: 1024
    timeout: 300
    environment:
      API_TOKEN_PATH: /sncr/api/naver-band/token # 환경변수 경로는 AWS AppConfig의 ParameterStore에 저장한 경로를 사용한다. 다음편에 설명.
      CONN_CONFIG_PATH: /sncr/db/data/connection
      BUCKET_NAME: senior-creator
    package:
      include:
        - "commons/**"
        - "naver_band/**"
      exclude:
        - "**"
    layers:
      - Ref: PythonRequirementsLambdaLayer
    events:
      - schedule:
          name: sncr-naver-band-coll-event
          rate: cron(0 16 * * ? *) # every 01:00+09:00에 이 함수가 작동할 수 있도록 cloudwatch event를 작성한다. 

다음편 : serverless framework에서 python 쓰기