Code pipeline을 통한 Lambda CI/CD 배포

Simon Kim·2022년 9월 7일
0

1. Code pipeline 구성

Code Commit, Code Build, Code Deploy에 Lambda와 관련된 repository 및 pipeline을 설정한다. Code pipeline 구성 방법은 많은 포스트가 존재하여 아래 링크를 참고하여 구성하면된다.
URL : https://joobly.tistory.com/5

2. Lambda내 template.yml 작성

1) template.yml을 아래 내용을 참고로 작성한다.

  • template.yml
AWSTemplateFormatVersion: "2010-09-09"
Transform: "AWS::Serverless-2016-10-31"
Description: [ your description ]
Resources:
  AlpsFunction:
    Type: "AWS::Serverless::Function"
    Properties:
      AutoPublishAlias: dev
      Handler: app.lambda_handler
      Runtime: python3.8
      FunctionName: [ your lambda funciton name ]
      CodeUri: [app.py의 상위 폴더 ex) src/]
      Description: [ your description ]
      MemorySize: 128
      Timeout: 30
      Role: "arn:aws:iam::711159021539:role/<your role>"
      Tracing: Active
      VpcConfig:
        SecurityGroupIds:
          - :
        SubnetIds:
          - :
      Tags:
        ServiceType: service
        Stage: ops
        ResourceType: Lambda
        Name: [ your lambda funciton name ]
  • Provisioned Councurrency 설정이 필요할 경우 아래 내용 추가 할 것
AlpsFunctionOpsScalableTarget:   # scale out 정책 여부에 따라서 설정하면 됨(option)
    Type: AWS::ApplicationAutoScaling::ScalableTarget
    Properties:
      MaxCapacity: 10
      MinCapacity: 5
      ResourceId: function:[ your lambda funciton name ]:ops
      RoleARN: !Sub arn:aws:iam::${AWS::AccountId}:role/aws-service-role/lambda.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_LambdaConcurrency
      ScalableDimension: lambda:function:ProvisionedConcurrency
      ServiceNamespace: lambda
      ScheduledActions:
        - ScalableTargetAction:
            MinCapacity: 10
            MaxCapacity: 10
          Schedule: 'cron(0 0 * * ? *)'
          ScheduledActionName: [ your lambda funciton name ]-scale-out
        - ScalableTargetAction:
            MinCapacity: 5
            MaxCapacity: 5
          Schedule: 'cron(0 13 * * ? *)'
          ScheduledActionName:[ your lambda funciton name ]-scale-in
    DependsOn: AlpsFunctionAliasops

2) buildspec.yml파일 추가

version: 0.2
phases:
  install:
    runtime-versions:
      python: 3.8
  build:
    commands:
      - sam package --template template.yml --s3-bucket alps-code-build-artifacts --output-template-file output-template.yml
artifacts:
  type: zip
  files:
    - output-template.yml

3)git push를 통한 lambda CI/CD 구성

  • 1), 2) 내용을 작성 후 code commit으로 git push를 하게 되면 code pipeline을 통해 자동으로 CI/CD가 진행된다.

3. 결과


Trouble Shooting

1) 신규 Lambda 의 CI/CD  설정에서 Code build 또는 Deploy에서 작업 실패 시 수정 작업 진행 후 git을 통해 push해도 반영이 안되는 케이스가 있다.
이 경우, AWS 콘솔에서 code pipeline 검색 후 신규로 만든 code pipeline의 상세로 들어가 Release Change 버튼을 클릭하면 CI/CD가 동작할 것이다. 

2) 1)의 연장선상인데, 신규 Lambda 의 CI/CD 를 최초 반영할 때 작업 실패가 발생한 경우, 문제가 되는 CI/CD  부분을 수정 후 git push를 해도 반영이 되지 않는 현상이 있다.
AWS 콘솔에서 code deploy 시 적용된 template을 보면 캐싱이 되었는지, 이전 소스로 반영된 내용으로 배포를 하다 실패한 케이스가 발생하였다.
이는 AWS의 버그로 생각되어 지며, 당황하지 말고 cloudformation에서 해당 stack을 삭제 후 code pipeline에서 Release Change 버튼을 클릭하면 정상적으로 동작할 것이다.

profile
다양한 주제를 심플하고 명확하게 정리해 보려는 연차만 많은 IT 잡부입니다. 사람들과의 소통을 사랑합니다.~^^

0개의 댓글