본문 바로가기

GitHub

Github Action 으로 AWS Lambda 자동 배포하기(3)

반응형
 

Github Action 으로 AWS Lambda 자동 배포하기(2)

Github Action 으로 AWS Lambda function 자동 배포하기회사 업무로인해 CTO님이 Node로 작성하신 AWS Lambda 함수를 수정하는 역할을 맡게 되었다.(난 java spring이긴한데....) 이후 수정내역을 CTO님께 보고 드리

xddsr123.tistory.com

 

이전 작성한 Github Action을 조금더 간결하게 동작하도록 수정하였다.

다만 완벽하게 모든 프로젝트에 동일하게 적용할 수준이 아니며, 관리 포인트의 감소가 다이나믹하게 이루지지 않았다.


 

우선 기존의 하나의 yml 파일에서 dev, main 브랜치에 PUSH 이벤트를 감지하고 있었는데 이를 쪼개어 두개의 파일로 나누었다.

즉 .github/workflows 디렉토리 내부에 dev.yml, main.yml 파일 2개가 존재한다.

 

분리되고 수정된 dev.yml은 다음과 같다.

name: Deploy lambda function - DEV
on:
  push:
    branches:
      - dev

env:
  AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
  AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
  AWS_REGION: ${{ secrets.AWS_REGION }}
  DEV_FUNC_NM: ${{ secrets.DEV_FUNC_NM }}
  DEV_ALIAS_NM: ${{ secrets.DEV_ALIAS_NM }}

jobs:
  deploy_source:
    name: Deploy lambda by github push dev branch
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Compress Code To Zip File
        run: zip -r9 code.zip *

      - name: Upload Code To Dev
        run: aws lambda update-function-code --function-name $DEV_FUNC_NM --zip-file fileb://code.zip

  publish_version:
    needs: deploy_source
    name: Publish version Lambda Function
    runs-on: ubuntu-latest
    outputs:
      dnv: ${{ steps.dev_new_version.outputs.DEV_NEW_VERSION }}
    steps:
      - name: Publish Version At Dev
        id: dev_new_version
        run: |
          DEV_NEW_VERSION=$(aws lambda publish-version --function-name $DEV_FUNC_NM --description V2 --query Version --output text)
          echo "DEV_NEW_VERSION=$DEV_NEW_VERSION" >> "$GITHUB_OUTPUT"

  update_configuration:
    needs: publish_version
    name: Update Environment Variables
    runs-on: ubuntu-latest
    steps:
      - name: Update Dev Lambda Environment Variables
        run: aws lambda update-function-configuration --function-name $DEV_FUNC_NM --environment "Variables={TZ=America/Los_Angeles}"

 


dev.yml을 기준으로 크게 변경 부분은 다음과 같다.

더보기

# 1. 불필요한 브랜치 기입부분 제거에 따른 연관된 환경변수 선언 부분 제거

on:
  push:
    branches:
      - main
      - dev
      - 'feature/test'
      - 'feature/test2'

env:
  PROD_FUNC_NM: ${{ secrets.PROD_FUNC_NM }}

 

# 2. 새로운 방식에 도입으로 인한 모듈 설치 액션 제거

jobs:
  ~~~
    steps:
      - name: Install Node Module
        if: github.ref != 'refs/heads/feature/test2'
        run: npm install

 

  1. 불필요한 브랜치 기입부분 제거에 따른 연관된 환경변수 선언 부분 제거
    위에서 작성하였듯 브랜치별 yml 파일 분리에 따라 하나의 파일에서 모든 브랜치 PUSH 이벤트를 감지할 필요가 없으므로 제거
  2. 새로운 방식에 도입으로 인한 모듈 설치 액션 제거
    해당 부분이 이번 글을 작성하는 주된 이유로 AWS Lambda에는 "Layer"(= 계층)이라는 기능이 존재하는데

    Layer는 추가 코드 또는 데이터를 포함하는 .zip 파일 아카이브입니다. 계층에는 일반적으로 라이브러리 종속 항목, 사용자 지정 런타
     또는 구성 파일이 포함된다.

    Layer를 생성하는 법은 매우 간단하며 필자는 node_modules 디렉토리를 업로드 하였다. - 사용방법
반응형