이전 몇몇 프로젝트를 하면서 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을 클릭하시면 다음과 같은 화면이 나올 겁니다.
처음 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 파일을 조금 쉽게 설명드리자면 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의 코드를 확인하는 작업입니다.
- uses - actions/checkout@v3는 GitHub actions의 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에서 설정할 수 있습니다.
- 첫 번째 하이폰(checkout sourece code)은 해당 workflow와 연결해 둔 Repo의 코드를 확인하는 작업입니다.
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 |