GitHub Actions で 大規模ランナー(GitHub-hosted larger runners)が GA となりました

2023.06.24

こんにちは、CX事業本部 Delivery部の若槻です。

GitHub Actions のアップデートにより、大規模ランナー(GitHub-hosted larger runners)が一般提供開始(GA)となりました。

これにより、Linux および Windows のランナーインスタンスで、最大 64 vCPUs のインスタンスを利用できるようになりました。

大規模ランナーで利用できるサイズおよび機能

大規模ランナーで利用可能となったインスタンスおよび利用料金は次の通りです。今までの標準ランナーでは vCPUs 2 のみでしたが、大規模ランナーでは vCPUs が 4 から 64 までのインスタンスが利用可能となります。

OS vCPUs Per-minute rate (USD) larger runnner
Linux 2 $0.008 - (standard)
Linux 4 $0.016
Linux 8 $0.032
Linux 16 $0.064
Linux 32 $0.128
Linux 64 $0.256
Windows 2 $0.016 - (standard)
Windows 8 $0.064
Windows 16 $0.128
Windows 32 $0.256
Windows 64 $0.512

加えて、大規模ランナーでは次の機能も利用可能となります。

  • ランナーインスタンスへの静的 IP アドレス範囲の割当(GitHub Enterprise のみ)
  • 大規模ランナーのアクセス権限と同時実行数の制御

試してみた

GitHub Team アカウントで試してみます。

大規模ランナーの作成

まずは GitHub アカウントに対して大規模ランナーを作成します。大規模ランナーは、既定の GitHub-hosted runner とは別に、カスタムの GitHub-hosted runner を作成することで利用できます。(Organization の場合は Admin 権限が必要となります。)

アカウントの Settings から、左メニューの Actions -> Runners を選択し、New runnnerNew GitHub-hosted runner を選択します。

カスタムの GitHub-hosted runner では次の構成を行うことができます。

  • Runner image
    • Ubunts
    • 22.04
    • 20.04
    • 18.04
    • Windows Server
    • 2022
    • 2019
  • Runner size
    • 4-cores(16 GB RAM · 150 GB SSD)(Ubuntu のみ)
    • 8-cores(32 GB RAM · 300 GB SSD)
    • 16-cores(64 GB RAM · 600 GB SSD)
    • 32-cores(128 GB RAM · 1200 GB SSD)
    • 64-cores(256 GB RAM · 2400 GB SSD)
  • Maximum Job Concurrency
  • Runner groups
  • Networking(GitHub Enterprise のみ)

Networking(静的 IP 範囲の利用)の設定メニューは、アカウントの権限が無いのでグレーアウトして設定不可となっています。

ここでは次の構成で作成します。

  • Name: test-larger-runner
  • Runner image:Ubuntu 22.04
  • Runner size:8-cores(32 GB RAM · 300 GB SSD)
  • Maximum Job Concurrency:50
  • Runner groups:Default
  • Networking:無効

作成できました。

大規模ランナーの使用

先程作成した大規模ランナーを使用したワークフローを作成します。jobs.<job_id>.runs-on.labelsに先程作成したランナーの名前を指定します。

.github/workflows/larger-runnner-test.yml

name: Larger runnner test

on: workflow_dispatch

jobs:
  my-job:
    runs-on:
      # 大規模ランナー名を指定
      labels: test-larger-runner
    steps:
      - name: Measure memory size
        run: free -m

上記ワークフローを実行します。

free コマンドの取得結果で 8-cores(32 GB RAM)のメモリが使用されており、大規模ランナーが使用されていることが確認できました。

ランナーグループの使用

ランナーグループを使用すると、Organization 単位でランナーへのアクセスを制御することができます。これにより意図しないリポジトリやワークフローで大規模ランナーが使われることによりコストの増加を防ぐことができます。

アカウントの Settings から、左メニューの Actions -> Runner groups を選択し、New runner group を選択します。

グループの作成で、利用可能なリポジトリとワークフローを指定できます。ここではリポジトリのみ指定します。

ランナーグループを作成できました。

ランナーグループをランナーに紐づけます。

ワークフローでランナーグループを指定します。jobs.<job_id>.runs-on.groupに先程作成したランナーグループの名前を指定します。

.github/workflows/larger-runnner-test.yml

name: Larger runnner test

on: workflow_dispatch

jobs:
  my-job:
    runs-on:
      # ランナーグループを指定
      group: test-group
    steps:
      - name: Measure memory size
        run: free -m

ワークフローを実行すると、実行させられました。

次に、グループの対象のワークフローを制限してみます。

ワークフローは <owner>/<repository>/.github/workflows/<filename>@<ref> という形式で指定します。(形式が不正だと設定保存時にエラーとなります)

対象でないワークフローで再度実行するとジョブが開始されなくなりました。ただし実行失敗とはならないようで、しばらくはワークフローの開始が試行されるようです。

おわりに

GitHub Actions のアップデートにより、GitHub-hosted larger runners(大規模ランナー)が一般提供開始(GA)となりました。

今までだと、大規模ランナー相当のサイズや機能のインスタンスを使いたい場合は self-hosted runner を利用する必要があったのですが、今回のアップデートにより、サイズや静的 IP の制限を自前でランナー環境を準備せずとも解決できるようになったのは嬉しいですね。

参考

以上