일상에 치여 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
공식 독스를 참고하니 람다 펑션의 코드를 업데이트하는 공식 방법인 것 같다.
다양한 파라미터가 있다. 한번 읽어보자.