안녕하세요, 최신 Flask 마이크로서비스 구축 – Zappa를 사용하여 AWS Lambda에서 Flask Docker를 시작한 후 오늘 우리는 GitHub에 푸시하여 이러한 지루한 작업을 해결할 수 있습니다. GitHub Actions로 CI/CD 시스템 구축시도해 봅시다.
일체 포함? CD? GitHub 작업?
지속적 통합/지속적 배포(CI/CD), 한국어에서는 지속적인 통합과 지속적인 배포가 하나의 몸입니다. 코드를 수정하여 업로드하면 성공적으로 생성되고 자동으로 테스트된 코드를 모든 개발자가 공유할 수 있으며, 코드의 적용 결과는 자동으로 사용자에게 배포되므로 개발자와 사용자 모두 편리하고 빠르게 개발할 수 있습니다. 과정.
CI/CD를 수행하는 데 도움이 되는 인기 있는 도구는 다음과 같습니다. 젠킨스그리고 지구 CI(서클 CI) 있긴 한데 요즘은 오픈소스를 사용하는 회사들이 깃허브(GitHub)로 구동된다. GitHub 작업 많은 도구가 사용됩니다. 팀 구성원(CI) 간에 코드를 공유하고 원할 때마다 빌드/테스트/병합할 수 있도록 GitHub에서 (비) 공개 Git 리포지토리를 만듭니다. . 별도로 설치할 필요 없이 GitHub 리포지토리에서 바로 설정 및 실행이 가능하며, YAML 파일 하나로 풀셋팅이 가능한 장점이 있습니다.
YAML 파일을 설정하기만 하면 완료됩니다.
Github Actions로 CI/CD를 만드는 것은 정말 쉽습니다. Git 저장소 .github/workflows/ 폴더를 만들고 그 안에 단일 YAML 파일을 만드세요. 지금까지 구축한 Flask 애플리케이션은 아직 테스트 논리를 작성하지 않았으므로 Docker 빌드 및 배포 작업만 있는 YAML 파일 형식을 소개합니다. 내가 쓰면 Github 액션 공식 문서그리고 이 한국 블로그많이 참조됨.
# .github/workflows/zappa-docker-lambda.yml # 워크플로 단위로 설정합니다
name: Zappa Docker Lambda Deploy # 워크플로의 이름을 정해줍니다
run-name: Deployment of ${{ github.repository }} through Zappa-Docker-Lambda # 워크플로의 상세 설명입니다
on: # 어떤 경우에 이 워크플로가 실행되는지 정해줍니다
push: # 푸시하면 실행합니다
branches: ( "main" ) # "main" 브랜치에 푸시하면 실행
pull_request: # 풀 리퀘스트가 생기면 실행합니다
branches: ( "main" ) # "main" 브랜치로 풀 리퀘스트가 생기면 실행
jobs: # 한 워크플로는 여러 병렬 실행 가능한 잡을 가질 수 있습니다
deploy: # 잡 이름을 정해줍니다
runs-on: ubuntu-latest # 깃허브 서버 내 가상환경의 최신 우분투 환경을 세팅해 진행
env: # 환경변수를 정해줄 수 있습니다
ECR_IMAGE_URI: ${{ secrets.ECR_IMAGE_URI }} # 저장소의 비밀 환경변수를 정해주었습니다
steps: # 잡의 각 단계입니다
- name: Checkout # 잡의 이름으로, 깃허브 서버로 이 저장소를 내려받습니다
uses: actions/checkout@v3 # https://github.com/actions/checkout에서 액션을 공유받아 쓸 수 있습니다
- name: Setup Python # 파이썬을 설치합니다
uses: actions/setup-python@v4
with: # 공유받은 액션을 위한 매개변수를 지정해야 합니다
python-version: 3.8 # 액션에서 파이썬 3.8 버전을 사용하도록 합니다
- name: Activate a virtual environment # 자파를 위한 가상환경 설치
run: | # 커맨드라인 명령어를 사용할 수 있습니다
python3 -m venv venv
source venv/bin/activate
- name: Install Python libraries with pip # pip로 파이썬 라이브러리 설치
run: |
pip3 install --upgrade pip
pip3 install -r requirements.txt
- name: Build Docker image # 도커 이미지 빌드
run: docker build -t flask .
- name: Tag Docker image # 도커 이미지를 ECR 경로로 태그
run: docker tag flask $ECR_IMAGE_URI # 위에서 설정한 환경변수를 사용합니다
- name: Configure AWS credentials # AWS 계정 로그인
uses: aws-actions/configure-aws-credentials@v1
with:
aws-region: ap-northeast-2
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: Transfers authority from AWS ECR to Docker # AWS 계정 정보를 도커로 전달
run: >
aws ecr get-login-password |
docker login --username AWS --password-stdin $ECR_IMAGE_URI
- name: Push Docker image to AWS ECR # 도커 이미지를 ECR에 업로드
run: docker push $ECR_IMAGE_URI
- name: Save python settings for production with Zappa # 자파에 필요한 파일 세팅
run: zappa save-python-settings-file prod
- name: Deploy application from AWS ECR to Lambda with Zappa # 자파로 람다에 배포 완료
run: zappa update prod -d $ECR_IMAGE_URI
댓글 외에도 알아두면 유용한 포인트를 정리해 보도록 하겠습니다.
- Github 액션은
.github/workflows/폴더에서 YAML 파일 찾아보기 및 각 파일 설명 작업 흐름사양을 읽고 이에 따라 GitHub 서버에서 Docker와 같은 가상 환경을 설정하여 모든 작업을 수행합니다. 워크플로우 내에서 일자리여러 개가 설정되면 각 작업이 병렬로 실행됩니다. 여러 애플리케이션을 동시에 구축하거나 여러 위치에 배포할 수 있습니다. - 워크플로를 실행할 시기를 결정할 수 있습니다. 일반적으로
main브랜치로 푸시하거나 풀 리퀘스트를 열 때마다, 즉 배포해야 할 때 실행하는 것이 일반적입니다. 이전에 기여한 scikit-learn 리포지토리도 모든 푸시에서 실행되는 정책을 만들었습니다. - 가상 환경을 통해 Windows/Mac/Linux와 같은 운영 체제를 결정하고 사용할 환경 변수를 설정할 수 있습니다. 환경 변수는 GitHub 리포지토리 – 설정 탭 – 비밀 및 변수 – 작업으로 이동하여 설정할 수 있습니다. 보안상의 이유로 비밀 환경 변수, 즉 비밀설정된 경우 작업을 실행할 때의 출력 환경 변수가 암호화됨및 출력. AWS KEY 또는 URL을 저장하는 것이 좋습니다.
나머지는 지난 포스팅에서 Zappa – Docker – AWS ECR, Lambda를 통해 Flask 애플리케이션을 배포한 순서를 따릅니다. 두 가지 차이점이 있습니다. 첫째, 개발용이 아닌 배포용이므로 무대 이름이 Zafar에서 변경되었습니다. prod설정되었다
botocore.exceptions.ProfileNotFound: The config profile (default) could not be found
japa action에서 이러한 오류가 발생했기 때문에, 자파 github 문제인용하다 zappa_settings.json 파일 "profile_name": "default", 선, 즉 Jaffa 수준 프로필 이름 삭제했다.
이제 당신은 github에 있습니다 main 가지에 원터치로 Flask 애플리케이션을 AWS Lambda에 배포하세요! 자랑스러운 마이크로소프트로서 남의 서버에 가상환경을 만들어도 Github Actions는 월 500MB, 2,000분까지 무료입니다.보지마! 깃헙 프로 계정이 있으니 1GB에 3000분… 역시 윈도우와 오피스를 팔고 오픈소스로 만드는 대단한 회사다. 이제 빠르고 쉽게 배포할 수 있으므로 나머지 Flask 마이크로서비스 개발로 넘어갈 수 있습니다.

