람다 작업을 하면서 가장 번거로웠던 점을 뽑자면 개별 함수를 고칠 때마다 따로 Github을 업데이트하는 점이었습니다.. 엔드포인트마다 함수를 연결했더니 10개의 함수를 개별적으로 관리해야했고 코드 업데이트 과정에서 함수 코드와 깃헙 코드의 싱크를 놓치는 경우도 발생했습니다.
그래서 가장 편하게 자동화할 수 있는 방법을 찾아 마켓플레이스를 뒤져보았습니다. Github Actions Marketplace - AWS Lambda
그 중 스타가 어느정도 있는 액션을 발견하여 해당 액션을 활용했습니다. AWS Lambda Deploy
Young_Backend_Serverless Github의 폴더 구조는 다음과 같고 models와 utils가 아닌 .js파일들은 각각 람다 함수의 index.js입니다.
여기서 제가 해야했던 일은 .js 파일 또는 models와 utils가 바뀔 때 바뀐 js파일에 해당하는 람다 함수를 업데이트 하는 것이었습니다.
그래서 제가 작성한 파일은 다음과 같습니다.
name: deploy to lambda
on:
push:
paths:
- "파일명(ex.deploy-test).js", "models/**", "utils/**"
branches: [main]
jobs:
deploy_source:
name: deploy lambda from source
runs-on: ubuntu-latest
steps:
- name: checkout source code
uses: actions/checkout@v3
- name: deploy
uses: appleboy/lambda-action@v0.2.0
with:
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_region: ${{ secrets.AWS_REGION }}
function_name: 람다_함수명(ex.deploy-test)
source: 파일명.js, models, utils
함수의 index.js나 함수에서 활용하는 models 또는 utils가 바뀌었을 경우에 해당 코드로 람다를 업데이트 해주는 것입니다. 이 작업은 function_name에 해당하는 값을 가진 람다 함수가 기존재할 때만 유효합니다..!
Lambda 조작 권한을 가진 IAM 계정의 액세스 키값과 리전을 secret으로 등록하고 람다를 업데이트할 때 필요한 코드들을 source에 포함해주었습니다.
테스트를 통해 아래와 같이 업데이트된 점을 확인할 수 있었습니다.
저는 이미 함수의 index.js에 핸들러를 넣어뒀는데 위 방법을 활용하면 index.js가 아닌 Github의 파일명.js로 배포되어
index.handler
에서 파일명.handler
로 수정함수명/index.js
로 수정위 두가지 중 하나를 택하여 다시 바꾸는 작업을 해야했습니다. 원하는 파일을 선택하고 해당 파일을 원하는 구성으로 바꾸어서 람다에 업데이트하는 방법이나 다른 액션은 없는지 더 찾아봐도 좋을 것 같고 이 이유 때문에 일단 액션 활용을 보류했습니다!
그리고 dry_run으로 계정 권한을 확인하거나 debug로 업데이트 자체에 문제는 없는지 확인할 수는 있지만 업데이트 전후에 람다의 테스트를 돌릴 방법이 액션에 없는 것 같아 아쉬웠습니다.
다른 효율적인 방법을 찾으신다면 많이 알려주시면 감사하겠습니다 🙇🏻♀️