1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub ActionsのArm対応でコスト削減したはずが、気づけば課金が発生していた話

Posted at

半年前に書いた記事で、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-armubuntu-24.04-arm)が追加され、パブリックリポジトリなら無料プランでも使えるようになりました。

公式アナウンス

ワークフローの記述を runs-on: ubuntu-latestruns-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を選び、予算を設定します。

予算設定画面

image.png

手順2: Arm runnerを作成

https://github.com/organizations/<organization-name>/settings/actions/runnersからランナーを作成します。

image.png

「New GitHub-hosted runner」から作成を開始し、Name, Platform, Image, Size を入力して完了です。

ランナー作成画面

※ このNameruns-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ランナーの課金体系も確認必須
  • ドキュメントはちゃんと読もう

参考リンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?