CodeBuild vs GitHub Action 비용 비교

이민석's avatar
Sep 03, 2024
CodeBuild vs GitHub Action 비용 비교

결론

본 문서는 CodePipeline/Build를 사용하는 법인에서 GitHub Action을 추가로 도입하는 과정에서의 비용 추정액을 다루고 있습니다.

vCPU 2개 기준인 경우 GitHub Action이 CodeBuild보다 2배 이상 비쌉니다.

Type

Spec

분당 $

시간당 $

일별 $

월별 $

월별 ₩

GitHub Action

Ubuntu-2-core

vCPU 2

0.008

0.48

11.52

345.6

476,928

CodeBuild

arm1.small

vCPU 2

RAM 3GB

0.00385

0.231

5.544

166.32

229,521.6

vCPU 2개 기준인 경우 GitHub Action이 CodeBuild보다 2배 이상 비싼 요금이 발생합니다

  • GitHub Action - Ubuntu-2-core - 0.008$/min , 11.52$/day, 345.6$/mon, 476,928₩/mon

  • CodeBuild - arm1.small - 0.00385$/min , 5.544$/mon, 166.32$/mon, 229521.6

따라서 일반적인 코드 빌드 및 테스트는 CodeBuild에서 사용하되
GitHub과 높은 수준의 Integration이 필요한 일부 작업은 GitHub Action을 사용하는 것이 편해보입니다.

EC2에 Jenkins를 운영하는 경우 유사 Spec으로 5~10배 이상 저렵합니다.
이 금액 차이는 Resreved Instance을 사용할 시 20% 이상 더 벌어지기도 합니다.
하지만 본 문서에서는 관련한 내용을 다루지 않고 있습니다.

Type

Spec

분당 $

시간당 $

일별 $

월별 $

월별 ₩

t3.small

vCPU 2
RAM 2

0.026

0.624

18.72

25,833.6

t3.medium

vCPU 2
RAM 4

0.052

1.248

37.44

51,667.2

해당 의견에 대한 상세한 내용 및 접근 방법은 아래 순서에 따라서 서술되어 있습니다.

  1. 전제 조건

  2. 가격 정책

  3. GitHub Action 가정하기

  4. GitHub Action Trigger와 이에 따른 호출 횟수 추정하기

  5. 최종 비용 추정

전제 조건

원활한 비용 추정을 위해서 Plan 및 OS를 다음과 같이 제한하겠습니다.

  • Plan : GitHub Free Plan

  • O/S : Ubuntu 2-core

  • Target : GitHub Organization with Private Repository

원활한 비용 추산을 위해서 GitHub Free Plan을 사용하는 GitHub Organization을 가정으로 하였습니다.

가격 정책

GitHub Free Plan에서는 월 2,000분의 GitHub Action을 무료로 사용 가능합니다.

Ubuntu-2-core에서 2,000분을 초과하는 경우 1분당 0.008$가 청구됩니다.

GitHub Action 가정하기

GitHub Action으로 인한 비용을 추정하기 전에
어떤 종류의 GitHub Action을 사용할 것인지 가정해야 합니다.

여기서는 PR 자동 생성기를 가정으로 하겠습니다.

매번 수동으로 만드는 PR은 일관성이 없으며,
규칙에 따른 reveiwer, label 등을 할당하기 위해서 PR 생성기 도입을 검토 중입니다.

월간-CS에서 만든 PR 자동 생성기는 평균 20초 대의 실행 시간을 가집니다.
이후 Golang에서 만든 빌드 모듈로는 평균 10초 대의 실행 시간을 가집니다.

GitHub Action Trigger와 이에 따른 호출 횟수 추정하기

PR 자동 생성기는 기본적으로 commit push event를 트리거합니다.

name: PR 생성 자동화

on:
  push:
    branches-ignore: ["main", "dev"]

즉, 일일 커밋양을 연산할 필요가 있으며
작업 중인 GitHub Repo에 최초 작업일 기준 커밋 숫자를 조회할 필요가 있습니다.

vi aggregate_git_commit_logs.sh

aggregate_git_commit_logs() {
    root_path=$(pwd)
    org=$1
    repo=$2
    output=$3

    rm -rf $root_path/$org/$repo

    mkdir $root_path/$org
    cd $root_path/$org

    git clone --branch dev https://github.com/$org/$repo
    cd $root_path/$org/$repo

    COMMIT_COUNT=$(git log --oneline | wc -l | awk '{$1=$1;print}')
    LATEST_TIMESTAMP=$(git log --format=%aI -n 1 | head -n 1)
    OLDEST_TIMESTAMP=$(git log --reverse --format=%aI | head -n 1)

    cd $root_path

    # echo $COMMIT_COUNT
    # echo $LATEST_TIMESTAMP
    # echo $OLDEST_TIMESTAMP

    diff_days $LATEST_TIMESTAMP $OLDEST_TIMESTAMP

    QUERY=".items += [{ \"org\": \"$org\", \"repo\": \"$repo\", \"count\": \"$COMMIT_COUNT\", \"latest_timestamp\": \"$LATEST_TIMESTAMP\", \"oldest_timestamp\": \"$OLDEST_TIMESTAMP\" }]"
    touch $output
    yq eval "$QUERY" -i $output
}


output="output.yaml"
rm $output
aggregate_git_commit_logs <GitOrg> <GitRepo> $output

실행 권한을 할당하고 위 쉘 스크립트를 실행합니다.

chmod +x ./aggregate_git_commit_logs.sh

해당 파일을 실행한 경로에서 ./output.yaml 파일이 생성됩니다.
해당 파일 내용을 YAML to JSON 사이트 이용해서 형태를 변환합니다.
사실 애초부터 json으로 만들었으면 됐지만, 이미 만들고 사용했으므로 그냥 넘어갔습니다.

생성된 JSON파일을 JSON to Excel에 넣은 후 엑셀함수 조정하여 예상비용 추정하였습니다. 일 평균 56.49개의 커밋이 이루어지는 것을 알 수 있었습니다.

최종 비용 추정

PR 자동 생성기는 평균 10~20초의 실행 시간을 가집니다.
따라서 한달 기준으로 ₩2,494 ~ ₩4,989의 비용 지출이 예상됩니다.

Share article

Unchaptered