본문 바로가기

Date Enginnering/Git & GitHub

GitHub Actions로 AWS Lambda Deploy (1)

이전 몇몇 프로젝트를 하면서 GitHub Actions와 Jenkins는 조금 다뤄보았는데 이번 조코딩 해커톤을 진행하면서 AWS 서비스와 GitHub Actions를 연동은 처음 해봤기 때문인지 꽤 많이 헤매서 한 번 정리해보려고 합니다.

먼저 GitHub Actions란?

GitHub Docs에 나와있는 설명은 다음과 같이 나와있습니다.

레포지토리에서 바로 소프트웨어 개발 워크플로를 자동화, 사용자 지정 및 실행합니다. CI/CD를 포함하여 원하는 작업을 수행하기 위한 작업을 검색, 생성 및 공유하고 완전히 사용자 정의된 워크플로에서 작업을 결합할 수 있습니다.

 

조금 쉽게 말하면 Repo에서 Push, Fork처럼 특정 동작을 수행했을 때 미리 설정해 둔 작업을 자동으로 실행시켜 주는 기능입니다. 

 

아래 이미지는 GitHub Actions를 사용해서 EC2(or Lambda)에 코드를 배포하는 예시 이미지입니다.

GitHub Actions 시작하기

GitHub Repo 중 아무거나 들어가시면 상단의 Actions을 클릭하시면 다음과 같은 화면이 나올 겁니다.

초기 Actions 화면

처음 Suggested for this repository에는 해당 Repo에 적절하다고 생각되는 것들을 추천해 주고, Deployment, Contionous intergration, Automation, Page 총 4개의 카테고리 안에 94개의 workflows가 존재합니다.

 

그런데 94개의 workflows에서는 Lambda를 찾을 수 없을 것 입니다. 왜냐하면 GitHub에서 제공해 주는 Actions Template이 없기 때문입니다.

 

이럴 때는 set up a workflow yourself을 눌러 직접 세팅해줄 수 있습니다!

set up a workflow yourself으로 들어오시면 아래 이미지처럼 아무것도 적혀있지 않은 yml 파일이 보이실 겁니다. 

아마 yml 파일을 처음 접하시는 분들도 계실텐데 구글에 검색해보시면 잘 설명해주는 글이 많으니 한 번 읽어 보시는 것을 추천드립니다!

yml 파일을 조금 쉽게 설명드리자면 xml, json처럼 데이터를 전송할 때 사용하는 파일이고 xml, json의 문제점을 해소하기 위해서 등장한 것이다.라고만 일단 이해하시면 좋을 것 같습니다.

그렇지만 제가 Actions의 yml을 사용하면서 느낀 점은 데이터 전송 파일보다는 물건을 만들기 위한 도면이라는 생각이 들었습니다.🤔
예를 들어, 제가 3D 프린터에 휴대폰 케이스 도면을 넣어주면 도면에 적힌 규격에 따라 휴대폰 케이스가 만들어지는 것처럼 말이죠.(비유가 잘 이해되셨는지 모르겠지만...)

yml 파일 작성하기

아래 파일은 제가 작성한 yml 파일입니다. 해당 파일의 항목을 하나하나 뜯어보겠습니다.

name: Deploy soure code lambda

on:
  push:
    branches:
      - main
  
jobs:
  deploy_source:
    name: deploy lambda from source
    runs-on: ubuntu-latest
    steps:
      - name: checkout source code
        uses: actions/checkout@v3
      - name: default deploy
        uses: appleboy/lambda-action@v0.1.9
        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: 여기에는 {{ AWS Lambda Name }}을 넣어주시면 됩니다.
          source: 여기에는 AWS Lambda에 {{ 사용할 함수가 들어가 있는 파일이름 }}을 넣어주시면 됩니다.

name: Deploy soure code lambda

1. name - 단어 뜻 그대로 해당 yml의 이름을 적어주면 됩니다. name을 보고 어떤 workflow을 수행하는지 알 수 있도록 작성하면 더 좋습니다.

on:
  push:
    branches:
      - main

2. on - 해당 workflow가 자동으로 실행될 수 있도록 trigger를 설정해주는 곳입니다.

  • 해석해 보자면 main branch에 push가 발생했을 경우 workflow가 실행해 줘!입니다.
jobs:
  deploy_source:
    name: deploy lambda from source
    runs-on: ubuntu-latest
    steps:
      - name: checkout source code
        uses: actions/checkout@v3
      - name: default deploy
        uses: appleboy/lambda-action@v0.1.9
        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: arima
          source: lambda_function.py

 

3. jobs - workflow가 어떤 작업을 실행할지를 설정해 주는 곳입니다.

  • deploy_source - 소스 코드를 배포할 때 사용합니다.
    • name - workflow가 실행될 때 표시되는 이름이니까 잘 알아볼 수 있게 명시적으로 지어주세요.
    • runs-on - workflow가 실행될 os를 선택해 줍니다. Git Actions Docs에서 사용할 수 있는 os image를 확인할 수 있습니다.
      주의해야 할 점은 무제한 무료가 아니라서 일정 사용량을 넘기면 사용하지 못할 수도 있습니다. Actions의 경우 월에 총 2,000분(대략 33시간 20분)을 무료로 사용할 수 있다고 합니다.
    • steps - workflow가 실행됐을 때 어떤 작업을 할 것인지를 순차적으로 작성해 주면 됩니다. 작업의 구분은 하이폰(-)으로 해주면 됩니다.
      • 첫 번째 하이폰(checkout sourece code)은 해당 workflow와 연결해 둔 Repo의 코드를 확인하는 작업입니다.
      • 두 번째 하이폰(default deploy)은 AWS Lambda와 연결하여 코드를 배포하는 작업입니다.
        • 첫 번째 uses와 마찬가지로 appleboy/lambda-action@v0.1.9는 appleboy의 Repo입니다.
        • with 부분은 여러분이 배포할 AWS Lambda의 정보(AWS Access Key, Secret Key, Region)와 소스코드를 입력합니다.
          • function_name - 배포에 사용할 AWS Lambda의 이름
          • source -  AWS Lambda에 적용할 함수가 담긴 파일
          • AWS Access, Secret Key나 Region은 Public로 공개하기에는 적절치 않기 때문에 GitHub Repo 내에서 환경 변수처럼 따로 관리해 주는 것이 좋습니다.
            - Repo의 Setting Tab에 들어가서 Security - secrets and variables에서 설정할 수 있습니다.

Review

해당 포스팅에서는 GitHub Actions의 개념을 간단하게 알아보고 GitHub에서 yml 파일을 만드는 것까지 살펴보았습니다. 👏

 

GitHub Actions나 yml파일은 CI/CD나 AWS 서비스, DockerFile 등을 사용할 때 꽤나 유용한 도구가 될 수 있으니 자주 다뤄보아서 익숙해지면 좋을 것 같습니다. 👍

 

다음에는 Lambda를 만들고 vsCode에서 작성한 코드를 GitHub Actions로 lambda에 배포하는 것까지 작성하겠습니다.

Thank you for Reading!

'Date Enginnering > Git & GitHub' 카테고리의 다른 글

GitHub Actions로 AWS Lambda Deploy (2)  (0) 2023.08.24
[Git] VCS? CVCS? DVCS?  (0) 2022.05.27