Code Commit, Code Build, Code Deploy에 Lambda와 관련된 repository 및 pipeline을 설정한다. Code pipeline 구성 방법은 많은 포스트가 존재하여 아래 링크를 참고하여 구성하면된다.
URL : https://joobly.tistory.com/5
1) 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 ]
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) 신규 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 버튼을 클릭하면 정상적으로 동작할 것이다.