GiitHub Actions+AWS CodeBuild로 각 PR의 검증 환경을 만들었습니다.
개시하다
필요에 따라 검증 환경을 추가·삭제하는 등 관리가 까다롭기 때문에 PR을 제작할 때 검증 환경을 구축하고, PR 통합·폐쇄 시 검증 환경을 삭제할 수 있는지 고민했다.
이번에 제작된 지아이허브 액션 워크플로우, 테라폼 등은 여기. 창고에 있다.
개요도
어떻게 이루어졌는지
구현에 맞춰 컨테이너 이미지의 추진, ECS 서비스의 디버깅을 AWS CodeBuild에서 수행한다.
Terraform의 실행은CodeBuild를 이용해야 하는 이유는 무엇입니까? 왜냐하면 CodeBuild는 VPC 내의 자원을 접근할 수 있기 때문입니다. (이번에는 Aurora Serverless입니다.)
이렇게 하면 Terraform에서 응용 프로그램, DB 마이그레이션을 만들 때 사용하는 MySQL 사용자를 만들 수 있습니다.(검증 환경이지만 루트 사용자를 사용하고 싶지 않습니다.)
먼저 VPC, ALB 등이 함께 사용하는 리소스를 제작한다.
Route 53에서 ALB의 Alias 값을 확인하고 환경에 사용되는 도메인 와일드카드를 지정하며 모든 이름의 해결책이 ALB를 대상으로 합니다.
이후 PR을 열 때 GiitHub Actions와 AWS CodeBuild를 이용해 각 PR에 ECS, Aurora Serverless, SQS 등 개별 자원을 제작한다.
ECS 서비스의 Target Group은 공동 리소스로 작성된 ALB의 Listener Rule에 추가됩니다.
PR 병합/종료 시 GiitHub Action 및 AWS CodeBuild를 사용하여 열 때 작성된 개별 리소스를 삭제합니다.
작업흐름
PR 만들 때.
PR을 작성할 때 워크플로우는 다음과 같습니다.
GiitHub Actions의 CodeBuild는 다음과 같이 수행됩니다.
step
Import source credentials
에서 CodeBuild는 창고에 연결된 인증 정보를 업데이트했습니다.env:
ENV: pr${{ github.event.pull_request.number }}
TFSTATE_BUCKET: ${{ secrets.TFSTATE_BUCKET }}
IMAGE_TAG: ${{ github.sha }}
jobs:
CreateEnv:
runs-on: ubuntu-20.04
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-1
- name: Import source credentials
run: aws codebuild import-source-credentials --token ${{ secrets.PERSONAL_ACCESS_TOKEN }} --server-type GITHUB --auth-type PERSONAL_ACCESS_TOKEN
- name: Run CodeBuild
uses: aws-actions/aws-codebuild-run-build@v1
with:
project-name: qa-apply
env-vars-for-codebuild: |
ENV,
TFSTATE_BUCKET
PR을 제작할 때 수행되는 CodeBuild의 내용은 다음과 같습니다.이곳에서 tfenv 설치와workspace 제작이 진행되고 있습니다
terraform apply
.version: 0.2
phases:
install:
runtime-versions:
golang: 1.16
commands:
- git clone https://github.com/tfutils/tfenv.git ~/.tfenv
- ln -s ~/.tfenv/bin/* /usr/local/bin
- tfenv install 1.0.7
build:
commands:
- cd terraform/qa
- terraform init -backend-config="bucket=$TFSTATE_BUCKET"
- terraform workspace new $ENV
- terraform apply -var qa_common_tfstate_bucket=$TFSTATE_BUCKET -auto-approve
환경을 검증하는 개별 리소스가 성공적으로 제작되면 다음과 같이 검증 환경의 URL에 대해 설명합니다.URL을 클릭하면 응용 프로그램이 개발되고 있습니다.(이번에는 디자인이 완성되기 전까지 기다리지 않았기 때문에 반영하기 전에 시간이 지연될 수 있습니다.)
PR에 추가 제출 시
추가 제출 시 작업 절차는 다음과 같다.
이번 DB 이전 작업 수행은 ECS 서비스의 디자인이aws-actions를 사용하지 않고 재미있는 법인 카야쿠가 제공ecspresso했다.
ecspresso를 사용하는 이유는 작업 정의, 서비스 정의에서 tfstate의 값을 얻을 수 있기 때문입니다.
Terraform으로 구축할 때 정말 편리해요.
DbMigrate:
runs-on: ubuntu-20.04
timeout-minutes: 10
needs: [BuildWeb, BuildWorker, BuildMigrate]
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-1
- name: Setup ecspresso
uses: kayac/ecspresso@v1
with:
version: v1.6.2
- name: Run DB Migration
working-directory: ./ecspresso/migrate
run: ecspresso run --config config.yaml
DeployApp:
runs-on: ubuntu-20.04
timeout-minutes: 10
needs: DbMigrate
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-1
- name: Setup ecspresso
uses: kayac/ecspresso@v1
with:
version: v1.6.2
- name: Deploy ECS service
working-directory: ./ecspresso/app
run: ecspresso deploy --config config.yaml --no-wait
PR 결합/종료 시
PR 병합, 종료 작업 프로세스는 다음과 같습니다.
PR 병합, 종료 시 수행되는 CodeBuild 내용은 다음과 같습니다.
여기에서 tfenv 설치와workspace 삭제가 진행됩니다
terraform destroy
.version: 0.2
phases:
install:
runtime-versions:
golang: 1.16
commands:
- git clone https://github.com/tfutils/tfenv.git ~/.tfenv
- ln -s ~/.tfenv/bin/* /usr/local/bin
- tfenv install 1.0.7
build:
commands:
- cd terraform/qa
- terraform init -backend-config="bucket=$TFSTATE_BUCKET"
- terraform workspace select $ENV
- terraform destroy -var qa_common_tfstate_bucket=$TFSTATE_BUCKET -auto-approve
- terraform workspace select default
- terraform workspace delete $ENV
환경을 검증하는 개별 리소스가 성공적으로 삭제되면 다음과 같이 설명합니다.최후
이번에는 구성에서 생략됐지만 코드데플로이가 블루/그린 deproy로 변경됨에 따라 ECS 서비스의 자동 입찰이 추가되어 원가 절감을 위해 각 AWS 서비스 노드를 추가할 수 있다.
Reference
이 문제에 관하여(GiitHub Actions+AWS CodeBuild로 각 PR의 검증 환경을 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/takenokogohan/articles/574c16cd3aad03텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)