BEACHSIDE BLOG

Azure と GitHub と C# が好きなエンジニアの個人メモ ( ・ㅂ・)و ̑̑

GitHub Actions の利用状況の確認と無料枠の上限に達した場合の対処方法

GitHub Actions は無料で使える場合と、無料で使える枠 + 従量課金で利用できる場合があります。料金体系を整理しつつ、無料枠を使い切った後でも無料で使い続けれる可能性を秘めた方法をメモしてみました (釣ってる感がある...)。

GitHub Actions の課金体系

2021年9月時点での料金体系について整理していますが、いつ変わるかわからんので確実に確認したい場合は公式ドキュメントを見ましょう。

予備知識: Runner について

GitHub Actions をどの VM で動かすかで料金が変わります。まずは 2 種類の Runner について軽く触れておきます。

Runner の種類 説明
GitHub-hosted Runner GitHub が用意している VM で、管理・メンテナンスも勝手にやってくれます。個人的にはこちらを使ってることがほとんどです。Linux, Windows, macOS が用意されています。
Self-hosted Runner 自分で構築した VM にエージェントをインストールして GitHub Actions を動作できるようにした VM です。自分で構築するということは VM の OS のパッチやら Storage の管理も自身でやる必要があります。利用できる OS とか詳細は こちら

課金体系: 無料で使えるのはどんなとき?

まず知っておきたいのは、Public の repository は無料です。また、Public じゃなくても Self-hosted runner で利用していると無料です。

余談として、個人的には単純なコストだけの理由で Self-hosted runner を立ててその管理をするくらいなら、運用コストを加味すると GitHub-hosted runner 使って使用料金に課金した方がよっぽど有利かなと思います。マシンパワーとかほかの理由があるときは仕方ないかなって印象があります。

そのほかの場合 = "GitHub-hosted runner を利用している internal / private repository の場合"は、毎月の無料枠がついておりそれを超えると止まります (勝手に課金されることはないです) 。

超えても利用したい場合、従量課金で利用するか、もしくは後述する方法でなんとかできる場合があります。

無料で使える方はこれ以上ネタはありませんので、無料枠 + 従量課金について深堀していきましょう。

無料枠 + 従量課金

再度書きますが、GitHub-hosted runner を利用している internal / private repository の場合です。

無料枠は契約プランによって上限が異なります。無料枠は、Storage の容量と GitHub Actions の実行時間の 2 つです。とりあえず 2021年9月時点の一覧を載せてみました。よほどゴリゴリじゃない限り無料枠でいけると印象はあります。

プラン ストレージ 分 (月あたり)
GitHub Free 500 MB 2,000
GitHub Pro 1 GB 3,000
Organization の GitHub Free 500 MB 2,000
GitHub Team 2 GB 3,000
GitHub Enterprise Cloud 50 GB 50,000

いくつか補足しておきます。

  • 実行時間について:
    • 利用時間は、GitHub Hosted runner で指定した OS により計算方法が異なります。Linux を利用している場合は 1分の利用 = 1分として計算されます。これが Windows の場合は倍率2倍となるので 1 分の利用で 2 分使ったと計算されます。macOS の場合は 10 倍になりますので計算方法には注意が必要です。
  • Storage について:
    • Storage の容量は upload-artifact で保存したものや Packages の利用料とかです。つまり GitHub Packages 利用してなかったり upload-artifact しなきゃほとんど消費しません。
    • 各 Action で実行時に保存した artifacts とlogs は保存期間を決めることができますので、その期間を短くすれば Storage 容量の圧迫を避けることができます。

利用状況の確認方法

現状どれくらい使っているのかの確認方法です。見るのはだいたい上限に達してからな気はしますがw。

個人アカウントの場合

GitHub のサイトの右上にある自分のアバターアイコンをクリック → Settings をクリックします。

Settings が表示されますので左側のナビゲーションにある Billing & plans をクリックします。

ここで利用時間や Storage の利用状況が確認できます。

GitHub Enterprise の場合

Organization ごとの状況は、Oranization の SettingsBilling & plans から見れます。Organization Settings 自体は Admin 権限のある人が見れますところですね。一応補足しておくと、支払いを管理するロール: Billing manager がありますがこのロールも Billing & plans がみれます。このロールはライセンスシートを消費しない (支払い関連以外のメニューは見れないですが) ので便利ですね♪

GitHub Enterprise で Enterprise settings という上位の Settings もあります。これは Enterprise の Admin のみが見れるメニューになります。Enterprise settings の SettingsBilling を開くと、Organization ごとの利用状況が確認できます。ここも Billing manager の roll はみれます。

無料枠の上限に達した場合どうする?

勝手に課金される心配はありません。GitHub Actions が動かなくなってエラーになるだけです。場合によっては無料のまま動かせるようにする回避方法もあるので書いてみました。

利用時間の超過

利用時間は、毎月リセットされるのでそれをまつか、Monthly spending limit を設定して (前述で書いた Billing & plan から設定できます) お金で解決できます。

課金したくないけどどうしても使いたい場合は、Self-hosted runner を作って実行するのもひとつの手です。

Storage の超過は回避できる (こともある)

Storage の上限を超えた場合は、GitHub Actions の実行ログでこんなエラーがでます。

"Create Artifact Container failed: Artifact storage quota has been hit. Unable to upload any new artifacts"

削除することで容量を増やす

Storage は upload した artifact を削除することで容量をあけることができます。具体的には、GitHub Actions の実行履歴から実行履歴ごと削除するか、実行履歴を開いて Artifacts を個別に削除するとよいです。

削除してよいか悪いかの判断はもちろん自己責任ですがね

削除後すぐに利用できるわけではなく、私の場合はご飯食べに行ってて1 時間くらい放置してたら利用できるようになりました。気長に待ちましょう。

retention 期間を短くする

Artifacts と log は保存期間を設定することができます。期間は契約プランや repo の visibility によって最大90日から400日とか変わりますが短くすれば自動で削除されるので、Storage の圧迫を日常的に避けることができる可能性があります。

設定方法は、repository の SettingsActions をクリックすると Actions の General メニューが表示されます。この中の Artifact and log retention で設定可能です。

ちなみに GitHub Enterprise だと、Enterprise settings / Organization settings でも設定がありその設定内容を継承して設定できる仕組みになっているので必要に応じてそちらの設定の確認も必要です。

参考