Slide 1

Slide 1 text

2025/07/23 SREチーム DANG MINH DUC GitHub Self-hostedに移行しました。CIが最大 55%速くなり、月額300万円削減!

Slide 2

Slide 2 text

目次 自己紹介 1 SODAでのGitHub Actions費用 2 GitHub Actions self-hostedへ の移行 3 移行後の課題 4 結果 5

Slide 3

Slide 3 text

SRE @SODA inc. ○ 2023年2月に入社 ○ SREチームに所属 ○ 役割: ■ クラウドインフラ運用 ■ アーキテクチャ改善 ■ DBA ■ SLI/SLO策定 ■ CICD改善 ■ etc DANG MINH DUC - ドゥック

Slide 4

Slide 4 text

SODAでのGitHub Actions費用 2

Slide 5

Slide 5 text

SODAでのGitHub Actions費用 Budgetを$9000を設定しましたが、よく超えています!

Slide 6

Slide 6 text

GitHub-hosted vs Self-hosted Specs GitHub-hosted EC2 On-demand EC2 Spot x86 2コア、8GBメモ リ、75GBディスク、 Public IP付き $0.008 $0.001818(-77%) $0.000735(-90.8%) Note: EC2のは北バージニアリージョン、m7i-flex.largeタイプで計算する

Slide 7

Slide 7 text

Self-hostedへ移行 3

Slide 8

Slide 8 text

All in oneソーリューション VS https://github.com/runs-on - ❌CloudFormation Stack - ❌年間ライセンス$300 https://github.com/github-aws-runners/te rraform-aws-github-runner - 🟢Terraform module - 🟢無料

Slide 9

Slide 9 text

モジュールのアーキテクチャ https://philips-labs.github.io/terraform-aws-github-runner/#detailed-design

Slide 10

Slide 10 text

移行後の課題 4

Slide 11

Slide 11 text

移行後の課題 1. 試算の通りににコストが安くならなかった 2. スポットインスタンスがAWSから回収されるため、self-hosted ランナーが強制的に 停止してしまう 3. ジョブキューイングの時間が長くて、一部のジョブが「queued」状態で永遠に詰まる 4. キャッシュバックエンドはS3に変更するのが必要

Slide 12

Slide 12 text

#1 試算の通りににコストが安くならなかった

Slide 13

Slide 13 text

#1 試算の通りににコストが安くならなかった

Slide 14

Slide 14 text

#1 試算の通りににコストが安くならなかった

Slide 15

Slide 15 text

#2 スポットインスタンスがAWSから回収されるため、self-hosted ランナーが強制的に停止してしまう Spot インスタンス停止回数

Slide 16

Slide 16 text

#2 スポットインスタンスがAWSから回収されるため、self-hosted ランナーが強制的に停止してしまう 対策: Spotインスタンス取得戦略を変更する - Price capacity optimized → 最良の価格-終了率 - Lowest price → デフォルト - Diversified → 全てのSpotプールから並行に取得 - Capacity optimized → 最低終了率

Slide 17

Slide 17 text

#3 ジョブキューイングの時間が長くて、一部のジョブが「queued」状態で永遠に詰まる 原因: - 事前準備ステップ(必要なツール、Actions Binary)の実行 - AWSのクオータ - self-hostedからGitHubまでの通信障害(バグ) https://github.com/actions/runner/issues/3609

Slide 18

Slide 18 text

#3 ジョブキューイング時間削減の対策 ❖ 事前準備ステップ(必要なツール、Actions Binary)の実行 ➢ カスタムAMIを採用する(Packer) ❖ AWSのクオータ ➢ 緩和上限申請 ❖ self-hostedからGitHubまでの通信障害(バグ) ➢ 手動の代わりに自動キャンセル・リトライする

Slide 19

Slide 19 text

#3 ジョブキューイング時間削減の結果

Slide 20

Slide 20 text

#4 キャッシュバックエンドはS3に変更するのが必要 EC2でself-hostedに移行したため、S3をキャッシュストレージとして使用する方が適切である https://github.com/runs-on/cache GitHub Cache S3-backed Cache 容量 ❌1リポジトリあたり最大 10GB 🟢無制限 速度 ❌ 50~100MB/s 🟢 300~400MB/s 用途 🟢 actions/setup-* 🟢 docker buildx cache 🟢 その他 (go mod, node modules) ❌ actions/setup-* 🟢 docker buildx cache 🟢 その他 (go mod, node modules)

Slide 21

Slide 21 text

最終的なアーキテクチャー

Slide 22

Slide 22 text

結果 5

Slide 23

Slide 23 text

コストの比較 Machine Type Total minutes Price per min Total Cost (USD) linux-x64-2core 4845 $0.008 $38.76 linux-x64-4core 622319 $0.016 $9957.104 linux-x64-8core 416835 $0.032 $13338.72 linux-arm64-2core 145365 $0.005 $726.825 linux-arm64-4core 1400 $0.01 $14 linux-arm64-8core 116 $0.02 $2.32 Total cost in case of GitHub-Hosted $24077.729 参照: https://docs.github.com/en/billing/managing-billing-for-your-products/about-billing-for-github-actions

Slide 24

Slide 24 text

コスト比較(実際AWSでかかったコスト) 実際にself-hostedは$3000だけかかりました💰 1ヶ月$21000(300万円)📉節約できた!

Slide 25

Slide 25 text

おまけ: CIが速くなった 🚤 GitHub Performance Metrics Test Workflow Old (sec) - Apr 2025 New (sec) - Jun 2025 Change Test Workflow 1 394.4 279.7 29.1% Test Workflow 2 311.3 233.1 25.1% Test Workflow 3 443.4 374.4 15% Test Workflow 4 495.3 548 -10% ※ Workflow中の各ジョブ平均実行時間で計算しました。 平均20%高速になり、最良のシナリオでは最大54%速くなりました。

Slide 26

Slide 26 text

最後に 7

Slide 27

Slide 27 text

最後に 結論 - Self-hostedは、オンデマンドインスタンスでもGitHub-hostedよりはるかに安いです💰 - スポットインスタンスを使用する場合、より良い停止率のためにデフォルトのインスタンス取得戦 略を変更することを忘れないでください📝 - CICDパイプラインを最適化するためにself-hostedランナーを積極的にカスタマイズできます👷 - CI監視ツールは非常に便利です。弊社ではDataDog CI Pipeline Visibilityを採用しています🐶 感想 Self-hostedに移行してから2ヶ月経ちました。最初想定できなかったシナリオが多かったですが、少し づつ潰して、現在だいぶ安定になりました。 運用コストがちょっと増えてきましたが、コストとカスタマイズのメリットはすごく大きい感じまし た。(特にAI開発の時代に) ぜひやってみてください👏 記事: https://zenn.dev/team_soda/articles/270f4cce08b737

Slide 28

Slide 28 text

No content