たゆたふ。

定まる所なく揺れ動き、いろいろやってみたメモ。など

Github actions のコスパについて考えた

Github actions はとても便利だ。テストやビルドを自動化するのに活用している。
パブリックリポジトリだと無料で実行環境が利用できるのがありがたい。
その無料の実行環境 Github-hosted runner では重すぎる処理を実行したくて Github actions の Self-hosted runner 環境を作った話は前回のエントリで書いた。

hero.hatenablog.jp

環境構築の動機となった目的は果たしたものの、作った環境はコスト性能比的にも良い選択だったのだろうか?
と思ってちょっと調べてみた。

今回はそれについて記す。

レイヤ数の多い大きな Docker イメージのビルドをギリギリ Github-hosted runner で実行していたのだけど、マルチアーキテクチャビルドをしようとして遂に処理できなくなった。仕方がないので、Self-hosted runner 環境を作ってビルドできるようにした。
イメージのビルドにはプログラムのコンパイルなど計算量の多い処理が含まれているのでメモリよりも CPU の速度が全体の処理速度を律速すると思われる。
目的のビルドを行うためには Github-hosted runner 環境より高性能な Self-hosted runner 環境にしないといけない。
かといってオーバースペックにして余計なコストもかけたくない。

ということで、Github-hosted runner の環境と同じ 2 コア CPU を利用できるいくつかのサービスを比較してみた。 同様の構成で最も安く高性能な CPU を利用できるのはどれなんだろうか? と。
ターゲットとしている Docker イメージのビルドではそれほど巨大なメモリが必要というわけではなさそうだったので比較対象構成のメモリ量の差は気にしないこととした。

なお、本エントリでの AWS ついての記述については 2022 年 5 月初旬のバージニアリージョンにおけるスペックや料金である。 Github についても 2022 年 5 月初旬時点でのスペック及び料金である。

Github-hosted runner の CPU と料金

まず Github-hosted runner の CPU と料金について確認した。

Linux の環境のスペックについてドキュメントには次の様に記載されている。

  • 2-core CPU
  • 7 GB of RAM memory
  • 14 GB of SSD disk space

数量はわかるがどのような CPU の 2-core なのかがわからない。
そこで次の様な Github workflow で lscpu を実行してみた。

name: lscpu
on:
  push:
    branches:
      - test-workflow
jobs:
  lscpu:
    runs-on: ubuntu-latest
    steps:
      - run: lscpu

その結果、次の型式の CPU であることがわかった。

  • Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz

パブリックリポジトリなら無料で使えるが、プライベートリポジトリなら有料で $0.008/min かかる。 時間あたりに換算すると $0.48/hour になる1

コスト意識高く AWS EC2 インスタンスを利用している人なら、意外と高いと思う額だと思う。
まあ、結構な無料枠があるので個人利用なら実質無料で使っている人が多いと思う。

lscpu の詳しい結果を見る

Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   46 bits physical, 48 bits virtual
CPU(s):                          2
On-line CPU(s) list:             0,1
Thread(s) per core:              1
Core(s) per socket:              2
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       GenuineIntel
CPU family:                      6
Model:                           85
Model name:                      Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz
Stepping:                        7
CPU MHz:                         2593.907
BogoMIPS:                        5187.81
Hypervisor vendor:               Microsoft
Virtualization type:             full
L1d cache:                       64 KiB
L1i cache:                       64 KiB
L2 cache:                        2 MiB
L3 cache:                        35.8 MiB
NUMA node0 CPU(s):               0,1
Vulnerability Itlb multihit:     KVM: Mitigation: VMX unsupported
Vulnerability L1tf:              Mitigation; PTE Inversion
Vulnerability Mds:               Mitigation; Clear CPU buffers; SMT Host state unknown
Vulnerability Meltdown:          Mitigation; PTI
Vulnerability Spec store bypass: Vulnerable
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:        Mitigation; Retpolines, STIBP disabled, RSB filling
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Mitigation; Clear CPU buffers; SMT Host state unknown
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt avx512cd avx512bw avx512vl xsaveopt xsavec xsaves md_clear


余談だけど、Geekbench BrowserIntel(R) Xeon(R) Platinum 8272CL の測定結果を探すと Azure 上で測定されたものばかりだった。この CPU はひょっとして Azule 専用?と思った。そうなら Github というのはやはり Microsoft 傘下なんだなと2

Fargate の CPU と料金

続いて Fargate について調べてみた。
次のスペックで Github runner を実行して、workflow 内で lscpu を実行してみた。

  • Runtime version: 1.40
  • cpu: 2048 core (= 2vCPU)
  • mem: 8192 MB (= 8GB)

メモリについては選択できる値が決まっているので Github に近い値を選択した。

試してみると Fargate はいくつかの CPU の型式が混在しているらしい。起動のたびにランダムに割り当てられる様子。
数回の試行で次の2種類の CPU を確認した。

  • Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
  • Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz

lscpu の詳しい結果を見る

Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz だった場合の結果

Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   46 bits physical, 48 bits virtual
CPU(s):                          2
On-line CPU(s) list:             0,1
Thread(s) per core:              2
Core(s) per socket:              1
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       GenuineIntel
CPU family:                      6
Model:                           85
Model name:                      Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
Stepping:                        7
CPU MHz:                         3099.801
BogoMIPS:                        4999.98
Hypervisor vendor:               KVM
Virtualization type:             full
L1d cache:                       32 KiB
L1i cache:                       32 KiB
L2 cache:                        1 MiB
L3 cache:                        35.8 MiB
NUMA node0 CPU(s):               0,1
Vulnerability Itlb multihit:     KVM: Vulnerable
Vulnerability L1tf:              Mitigation; PTE Inversion
Vulnerability Mds:               Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown
Vulnerability Meltdown:          Mitigation; PTI
Vulnerability Spec store bypass: Vulnerable
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:        Mitigation; Retpolines, STIBP disabled, RSB filling
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Not affected
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves ida arat pku ospke

Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz だった場合の結果

Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   46 bits physical, 48 bits virtual
CPU(s):                          2
On-line CPU(s) list:             0,1
Thread(s) per core:              2
Core(s) per socket:              1
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       GenuineIntel
CPU family:                      6
Model:                           85
Model name:                      Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz
Stepping:                        4
CPU MHz:                         3106.294
BogoMIPS:                        4999.99
Hypervisor vendor:               KVM
Virtualization type:             full
L1d cache:                       32 KiB
L1i cache:                       32 KiB
L2 cache:                        1 MiB
L3 cache:                        33 MiB
NUMA node0 CPU(s):               0,1
Vulnerability Itlb multihit:     KVM: Vulnerable
Vulnerability L1tf:              Mitigation; PTE Inversion
Vulnerability Mds:               Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown
Vulnerability Meltdown:          Mitigation; PTI
Vulnerability Spec store bypass: Vulnerable
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:        Mitigation; Retpolines, STIBP disabled, RSB filling
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves ida arat pku ospke


このスペックのバージニアリージョン(us-east-1)での料金は次の通り。

  • cpu: $0.04048/core・hour x 2core = $0.08096/hour
  • mem: $0.004445/GB・hour x 8GB = $0.03556/hour
  • strage: $0.000111/GB・hour x 14GB = $0.001554/hour
  • total: 0.08096 + 0.03556 + 0.001554 = $0.118074/hour ≒ $0.118/hour

Fargate Spot だと単価が下がるので次の値段になる。

  • cpu: $0.0128568/hour x 2 = $0.0257136/hour
  • mem: $0.00141177/GB・hour x 8 = $0.01129416/hour
  • strage: $0.000111/GB・hour x 14GB = $0.001554/hour
  • total: 0.0257136 + 0.01129416 + 0.001554 = $0.03856176/hour ≒ $0.039/hour

最大 70% 割引とのことだが、計算してみると約 68.24% OFF となっている。
ちなみに現状 Spot が使えるのは x86_64 のみで、Arm64 では提供されていない。

Codebuild の CPU と料金

比較対象として Github actions と同様 CI/CD に特化したサービスと位置づけられる CodeBuild も調べてみる。
CodeBuild には CPU、メモリともに Github-hosted runner とほぼ一致スペックのものが提供されないので、CPU コア数の一致する次のコンピューティングインスタンスタイプで確認した。

  • general1.small (2 vCPU, 3 GB メモリ)

イメージは aws/codebuild/standard:5.0 (Ubuntu 20.04) を利用した。

CodeBuild も1種類の CPU で統一されているわけではなかった。 数回試行した結果、次の CPU のいずれかであった。

  • Intel(R) Xeon(R) Platinum 8275CL CPU @ 3.00GHz
  • Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz

lscpu の詳しい結果を見る

Intel(R) Xeon(R) Platinum 8275CL CPU @ 3.00GHz の結果

Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   46 bits physical, 48 bits virtual
CPU(s):                          2
On-line CPU(s) list:             0,1
Thread(s) per core:              2
Core(s) per socket:              1
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       GenuineIntel
CPU family:                      6
Model:                           85
Model name:                      Intel(R) Xeon(R) Platinum 8275CL CPU @ 3.00GHz
Stepping:                        7
CPU MHz:                         3614.580
BogoMIPS:                        5999.99
Hypervisor vendor:               KVM
Virtualization type:             full
L1d cache:                       32 KiB
L1i cache:                       32 KiB
L2 cache:                        1 MiB
L3 cache:                        35.8 MiB
NUMA node0 CPU(s):               0,1
Vulnerability Itlb multihit:     KVM: Vulnerable
Vulnerability L1tf:              Mitigation; PTE Inversion
Vulnerability Mds:               Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown
Vulnerability Meltdown:          Mitigation; PTI
Vulnerability Spec store bypass: Vulnerable
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:        Mitigation; Full generic retpoline, STIBP disabled, RSB filling
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Not affected
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves ida arat pku ospke

Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz の結果

Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   46 bits physical, 48 bits virtual
CPU(s):                          2
On-line CPU(s) list:             0,1
Thread(s) per core:              2
Core(s) per socket:              1
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       GenuineIntel
CPU family:                      6
Model:                           85
Model name:                      Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz
Stepping:                        4
CPU MHz:                         3412.932
BogoMIPS:                        5999.99
Hypervisor vendor:               KVM
Virtualization type:             full
L1d cache:                       32 KiB
L1i cache:                       32 KiB
L2 cache:                        1 MiB
L3 cache:                        24.8 MiB
NUMA node0 CPU(s):               0,1
Vulnerability Itlb multihit:     KVM: Vulnerable
Vulnerability L1tf:              Mitigation; PTE Inversion
Vulnerability Mds:               Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown
Vulnerability Meltdown:          Mitigation; PTI
Vulnerability Spec store bypass: Vulnerable
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:        Mitigation; Full generic retpoline, STIBP disabled, RSB filling
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves ida arat pku ospke


1時間あたりの料金は次のとおり。

  • general1.small: $0.005/min x 60min = $0.3/hour

なお、general1.small には 100min/月(= 1.67 hour/月)の無料枠が設定されており、この範囲内では無料。

Self-hosted runner (c6i.large) の CPU と料金

先日構築した Docker イメージのビルド用の Self-hosted runner 環境で利用している AWS EC2 についても確認した。
インスタンスタイプはコンピューティング最適化の c6i.large(2vCPU, 4GiB メモリ)を利用している。

次の CPU を使っていることがわかった。

  • Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz

lscpu の詳しい結果を見る

Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   46 bits physical, 48 bits virtual
CPU(s):                          2
On-line CPU(s) list:             0,1
Thread(s) per core:              2
Core(s) per socket:              1
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       GenuineIntel
CPU family:                      6
Model:                           106
Model name:                      Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz
Stepping:                        6
CPU MHz:                         3502.020
BogoMIPS:                        5799.96
Hypervisor vendor:               KVM
Virtualization type:             full
L1d cache:                       48 KiB
L1i cache:                       32 KiB
L2 cache:                        1.3 MiB
L3 cache:                        54 MiB
NUMA node0 CPU(s):               0,1
Vulnerability Itlb multihit:     Not affected
Vulnerability L1tf:              Not affected
Vulnerability Mds:               Not affected
Vulnerability Meltdown:          Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:        Mitigation; Enhanced IBRS, IBPB conditional, RSB filling
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Not affected
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves ida arat avx512vbmi pku ospke avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq rdpid md_clear flush_l1d arch_capabilities


このインスタンスタイプの1時間あたりのオンデマンド料金は $0.085/hour。 スポットインスタンスだと大体 50〜60% OFF 程度の割引率なのでざっくり半額になると期待していいと思う3

比較

Github-hosted runner の実行環境とそのスペックに相当する実行環境を作れる AWS サービスのそれぞれの CPU と1時間あたりの料金は下記の表の通り。
いずれも CPU のブランドは Intel(R) Xeon(R) Platinum。
AWS の料金はバージニアリージョン(us-east-1)のもの。
Geekbench の値は Geekbench Browser から取ってきた値で、同じ型式の CPU の結果でメモリ等近しい構成の Multi-Core Score。CPU の性能はクロック数のみで決まるものでもないので比較の指標として追加した。あくまで参考値として。

環境 料金
($/hour)
CPU クロック数 コア数 Memory Geekbench
(参考値)
Github-hosted runner 0.480 8272CL 2.60GHz 2 7GB 1608
Fargete 0.117 8259CL
8175M
2.50GHz
2.50GHz
2 8GB 1900
--
Fargete Spot 0.039 8259CL
8175M
2.50GHz
2.50GHz
2 8GB 1900
--
CodeBuild (general1.small) 0.300 8275CL
8124M
3.00GHz
3.00GHz
2 3GB 2329
2256
EC2 c6i.large(オンデマンド) 0.085 8375C 2.90GHz 2 4GB 2872
EC2 c6i.large(SPOT) 0.043 8375C 2.90GHz 2 4GB 2872

やはり Github-hosted runner 環境が最も料金が高い。CPU 性能的にはほぼ同等と思われる Fargate の 4 倍以上となっている。比較的高価と思っていた CodeBuild よりも高い。

単純に時間あたりの料金を比べるとそうなのだが、ちゃんとコスパを比較するなら無料枠を考慮する必要がある。
無料枠を考慮して時間と利用料の関係をグラフ化すると次の様になる。

利用料比較グラフ

パブリックリポジトリでの利用や無料枠に収まる範囲での利用しかないなら Github-hosted runner は最安で最も手間も少ないのは言うまでもない。

無料枠を超えている場合、目安として Github の Free アカウントなら総利用時間が 45 時間/月、Pro アカウントやオーガニゼーション(Team アカウント)なら 60 時間/月を超えていると Self-hosted runner の利用を検討してもいいかと思う。 Fargate は Github-hosted runner よりちょっと性能が良さそうってところだが、ほぼ同じ性能を安く調達したいだけなら魅力的だ(EC2 より起動が速いので)。
コストを抑えるには workflow の実行毎に Self-hosted runner のインスタンスを起動し、終わったら止めることが前提になるが、自動化すればその手間は負担にならないと思う。

単純に Github-hosted runner でも実行できる処理のコスト改善をするだけなら上記の通り。

ただ、利用時間が長い場合、それは実行回数が多いためではなく1回の処理時間が長くなっているのではないだろうか。そうならばより性能の高いインフラで Self-hosted runner 環境を作ったほうが良いだろう。
例えば Linter の実行など軽い処理を Github-hosted runner で実行して無料枠を有効に消費しつつ、ビルドやコンパイルなど比較的重くて時間がかかっている処理は Self-hosted runner の利用を利用するといいかもしれない。 ユニットテストなどはコア数の多いインスタンスを使って並列実行すれば大きな時間短縮も狙えると思う。
クラウドサービスを利用すると実際には通信料や構築と運用という目に見えにくいコストもかかるが、それでもコストと処理時間の両方を削減できる可能性もあると思う。
こうゆう用途には処理内容に適した EC2 インスタンスを選択して Self-hosted runner を運用するのがいいと思う4Github-hosted runner と同じ金額を払うならもっと性能の良いインスタンスを利用できるし、スポットインスタンスを使えば更にコストを下げられる5

まとめ

Github-hosted runner では重くて実行できなくなった Docker イメージのビルドのために Self-hosted runner の実行環境を作ったがもっと良い選択肢があったのではと気になって調べてみた。

結果的には ECS の EC2 ノードで Self-hosted runner コンテナのタスクを運用するという自分の選択がベストかなと思われた。

Github actions は便利だけど無料枠を超えて使っている場合、利用料は決して安くないということも再認識した。
とはいえ別の環境を構築、運用するにも手間暇がかかるのでコストとバランス次第だと思う。

Self-hosted runner 環境を構築するなら私的には現時点で次の結論を得た。 - 処理に見合った CPU 性能を求めるなら EC2 のスポットインスタンスで ECS タスクを利用する - Github-hosted runner と同程度の性能でよく、コストを下げたいなら Fargate Spot を使う

なお、本エントリで挙げた利用料には通信料金など運用に伴い発生するすべての料金を含んでいるわけではない。
また、私の計算間違いで値が不正確な可能性もある。
したがって実際の運用でかかる料金について一切保証できないので悪しからず。
と言い訳を用意しつつ締めくくる。

参考


  1. Github の Free アカウントで 2000 分/月(= 33.3 時間/月)、Pro アカウントでは 3000 分/月(= 50 時間/月)の無料枠がある。プライベートリポジトリでもこの枠内の利用であれば無料。

  2. 更に余談だけど、Gitlab の CI/CD で提供されている SaaS 環境はドキュメントGCP の n1-standard-1 を使っていると記載されている。

  3. バージニアリージョンの 2022 年 5 月初旬時点。

  4. さらに利用が増えれば Github-hosted runner より CodeBuild の方が安くなるが、乗り換える気があるならその前に Self-hosted runner を導入しているだろう。その手間ひまかけて作ったその環境をわざわざより高額な CodeBuild に乗り換えることもまあないかなと思う。

  5. $0.48/hour も出せばオンデマンド料金でも AWS EC2 の t3.2xlarge(8vCPU 32GiB $0.3328/hour)や c6i.2xlarge(8vCPU 16GiB $0.34/hour)などが使える。スポットならざっくり半額と考えればさらに高価だが高性能なインスタンスの利用も検討できるかもしれない。