半年前に書いた記事で、FargateやFargate Spotによるコスト削減について紹介しました。
そのときはGitHub Actionsのホストランナーをx86(ubuntu-latest
)のままにして、QEMUを使ったクロスコンパイルでARM対応する方法を紹介したのですが、実際に運用してみるとビルド時間が数分長くなるという問題にぶつかり、いったんArm化を断念していました。
再挑戦:「ホストランナーをArmにすればよくね?」
半年経ってCI/CDワークフローを見直していたところ、ふと「そもそもGitHub ActionsのホストランナーをArmにすれば、QEMUとかクロスコンパイルいらなくね?」という超シンプルなアイデアにたどり着きました(なんで半年前に思いつかなかったんだろう...)。
ということで、2回目の「Arm化コスト削減チャレンジ」を始めてみました。
方法1: GitHub-hosted runnerのubuntu-xx.xx-arm
を使う(パブリックリポジトリ限定)
2025年1月から、GitHub ActionsにArmのホストランナー(ubuntu-22.04-arm
とubuntu-24.04-arm
)が追加され、パブリックリポジトリなら無料プランでも使えるようになりました。
ワークフローの記述を runs-on: ubuntu-latest
→ runs-on: ubuntu-24.04-arm
に変えるだけなので、これは楽だ!と思ったのですが...プライベートリポジトリでは利用不可でした。
試しに回してみたところ、しっかりエラーになりました。
なので、パブリックリポジトリを使っている方にはこの方法が一番おすすめです。
方法2: Larger runnersでArmホストランナーを自作する(Team or Enterprise Cloud限定)
GitHub Team / Enterprise Cloudプランでは、Larger runnersという機能が使えます。
カスタムリソース(CPU, RAM)でGitHub-hosted runnerを作成できる機能で、Armアーキテクチャも選択可能です。
幸い私の所属する組織はEnterprise Cloudプランだったので、こちらで試してみました。
手順1: Budgetを設定
https://github.com/enterprises/<enterprise-name>/billing
から「Budgets and alerts」→ Actionsを選び、予算を設定します。
手順2: Arm runnerを作成
https://github.com/organizations/<organization-name>/settings/actions/runners
からランナーを作成します。
「New GitHub-hosted runner」から作成を開始し、Name
, Platform
, Image
, Size
を入力して完了です。
※ このName
がruns-on
に指定する値となります。
手順3: WorkflowとECSタスク定義を更新
runs-on
を以下のように更新します。
jobs:
build-and-push:
runs-on: 'linux-arm64'
ECSタスク定義にもruntimePlatform
の記述を忘れずに追加します。
"runtimePlatform": {
"operatingSystemFamily": "LINUX",
"cpuArchitecture": "ARM64"
}
これで、GitHub ActionsとECSの両方でArm対応が完了です。
落とし穴:Larger runnersは無料枠が使えない
タスクは無事Armで動作し、よっしゃこれでQEMU不要、ビルドも速い、コストも下がる...と思いきや、Larger runnersは課金対象という落とし穴が待っていました。
ドキュメントにも、Larger runnersではGitHub Team / Enterprise Cloudの無料枠がつかえないという記述がありました。
Included minutes cannot be used for larger runners. These runners will always be charged for, including in public repositories.
— About billing for GitHub Actions
つまり、月に20,000分使った場合は100 USDの追加料金がかかります。
一方、Fargate Spotをx86からArmにしたことで削減できるコストは月わずか0.7 USDです。
結論:ビルドは速くなったけど、月99ドルの赤字に
QEMUなしで高速ビルド、ECSタスクもArm対応でコスト削減...のはずが、GitHub Actionsのコストが爆増する結果となってしまいました。
項目 | 月間コスト |
---|---|
GitHub Actions Larger runner (20,000分) | $100 |
Fargate SpotのArm化による削減 | -$0.7 |
差額 | +$99.3 |
今回の学びをまとめると、
- Fargate SpotのArm化そのものは意味がある
- しかし、GitHub ActionsでLarger runnerを使うと、思わぬコストがかかる
- コスト削減目的なら、CIランナーの課金体系も確認必須
- ドキュメントはちゃんと読もう