Git action yml 파일 예시, AWS Lambda Handler를 git action으로 자동화하기

All We Need is Data, itself !·2022년 2월 16일
0

일상에 치여 github 관리를 안한지도 꽤 오래된 것 같아서 간만에 들어가봤다
풀 열심히 심었었는데.. 이제 듬성듬성해졌다.. 탈..

https://github.com/Jee-9/AWS_lambda_handler/blob/main/.github/workflows/python-publish.yml

재밌는 걸 발견했다. (재밌나? 나만 재밌나? ㅎ)
옛날에 git action을 이용해서 프로젝트에서 lambda를 자동화한 적이 있다.
그때 사용했던 git action용 yml파일

git action을 통해 commit과 동시에 lambda위에 numpy zip 파일을 올려서 lambda handler를 사용할 수 있게 설계하였다.

오래돼서 기억이 잘 안나긴 하지만.. 여튼 복습도 할 겸 들고와봤다 🐶


on:
	push:
    	branches:
        	- main

어디에 푸쉬할건지에 대해서..
위의 코드는 메인에 올리면 git action이 작동하게 만들겠다는 것

jobs:
	build_and_deploy: 
    	name: lambda-runtime
        runs-on: ubuntu-latest
        

build_and_deploy에는 job name을 기재해주면 된다.
runs-on에는 어디서 실행할건지.. git action의 경우 무제한 무료가 아니라 일정 사용량을 사용하고 나면 과금이 된다. 하루에 1000번이었나?
따라서 self-hosted도 지원을 한다.

        steps:
        	- name: Checkout
              uses: actions/checkout@v2
              

이제 steps인데, 여기서부터 이제 하나 하나 무엇을 할 것인지 정해주면 된다.

가장 먼저 Checkout을 넣어준다.
checkout 을 하지 않으면 올리는 소스를 사용해서 build할 수 없기 대문에 github action을 통해 무엇인가를 하고 싶다면 필수 사항이다

        	- name: Configure AWS credentials from Test account
              uses: aws-actions/configure-aws-credentials@v1
              with:
                aws-access-key-id: [ACCESS Key ID]
                aws-secret-access-key: [Secret ACCESS Key]
                aws-region: ap-northeast-2

boto3 쓰듯이 하나 하나 넣어주면 되는 것 같다.
여기서는 AWS account에 접속하는 부분이다.

uses에서 로그인을 해주고, 액세스 키와 시크릿 키, 리전을 파라미터로 추가해준다.

        	- name: Set up Python
              uses: actions/setup-python@v2
              with:
                python-version: '3.9'

여기 처음에 python-version: '3' 줬다가 망함. '3.9'라고 정확하게 명시하기!

        	- name: Install dependencies
              run: |
                python -m pip install --upgrade pip
                pip install build
                mkdir ./packages
                cp ./lambda_defs.py ./packages
                pip install -r requirements.txt -t ./packages/

말 그대로 컨테이너에서 dockerfile 작성하듯이 스텝 바이 스텝으로 작성해주면 좋다.

        	- name: Zipping binary
              uses: papeloto/action-zip@v1
              with: 
                files: .
                dest: test.zip

저 papeloto는 open source를 이용했다.
zip을 이용해 받아온 requirements를 모두 다운해서 묶어준다.
lambda에는 zip 파일만 올릴 수 있기 때문...

굳이 굳이 이렇게 만드는 이유는 lambda handler에 올라가는 numpy가 manylinux os 용 numpy여야 해서.. macOS 나 windows에서 받으니까 OS가 달라서 zip해서 올려도 람다에서 돌아가질 않았다.

        	- name: Deploy function
              run: >
                aws lambda update-function-code
                --function-name download_video
                --zip-file fileb://test.zip

솔직히 이게뭔가 싶었다

https://awscli.amazonaws.com/v2/documentation/api/2.0.33/reference/lambda/update-function-code.html

공식 독스를 참고하니 람다 펑션의 코드를 업데이트하는 공식 방법인 것 같다.

다양한 파라미터가 있다. 한번 읽어보자.

profile
분명히 처음엔 데린이었는데,, 이제 개린이인가..

0개의 댓글