GitHub Actionsのarmランナーが利用可能に
2024年6月3日にGitHub Actionsのarmランナーがパブリックベータになりました。現状larger runnerでの提供なので、Team, Enterpriseプラン専用となっています。
カケハシでもさっそくarmランナーを利用し始めています。
GitHubからの日本語アナウンス
armランナーのメリットとデメリット
armランナーには以下のメリットとデメリットがあります。
メリット:arm64ビルドが高速
armランナーなら高速にarm64バイナリがビルドできます。 x86_64 runnerでDockerのarm64イメージをビルドをする場合はQEMUなどによるエミュレーションが必要でしたが、armランナーなら不要です。ネイティブ実行になるため、ビルド速度が大きく向上します。これにより開発生産性向上と費用軽減がどちらも得られます。
メリット:x86_64ランナーより単価が37.5%安い
armランナーは同サイズのx86_64ランナー比で37.5%実行時間単価が低いため、移行すればそれだけで節約になります。
デメリット:現時点ではTeam, Enterprise専用
現時点ではlarger runnerでの提供のみなので、Team, Enterpriseプランでしか利用できません。そのため個人のリポジトリでは利用できません。一般開放を楽しみにしたいと思います。
デメリット:ランナーのスピンアップが遅い
まだ利用者が少ないからなのかもしれませんが、ubuntu-latestと比べてランナーが起動してくるまで時間がかかります。厳密に調べたわけではないのですが、ubuntu-latestなら数秒で起動してくるところが、armだと30秒以上かかることもあります。起動待ちの時間は課金対象ではないので、余計な費用がかかることはありませんが、時間ロスには違いありません。
デメリット:無料枠の対象外
これもlarger runner専用になっている影響ですが、毎月の無料利用枠とは別に課金されます。無料枠が余っている場合や公開リポジトリでの実行も課金されます。仮にすべてarm化すると、無料枠が使えない分、かえって割高になるのでご注意ください。
デメリット:setup-pythonなど動作に注意が必要なワークフローがある
マーケットプレイスで提供されているワークフローを使っている場合、それらがarmに対応しているか確認が必要です。
checkout, setup-nodeなど有名どころのワークフローはおおむねarm環境に対応していますがsetup-pythonは注意が必要です。
setup-pythonは実行時にバイナリをactions/python-versions
リポジトリのGitHub Packagesから取得しているため、python-versionsで対応されるまで利用できません。なお2024年7月18日現在Ubuntu 22.04, 24.04いずれもarm向けPythonバイナリが提供されています。
また、python-versionsは新たな環境向けのパッケージを提供する場合、その時点でサポートバージョンにおける最新パッチリリースのみ提供します。
たとえばPython 3.12系なら3.12.4以上のバージョンが提供されています。3.12.0〜3.12.3は利用できないので注意が必要です。
armランナーのTips
イメージに含まれるツール類を知りたい
armランナーはx86_64と異なりArmから提供されており、その情報はGitHub Actions Partner Runner Imagesで公開されています。
イメージに含まれるパッケージは、それぞれUbuntu 24.04、Ubuntu 22.04に記載されています。
curl, git, jq, Dockerなどよく使われるものはおおよそ網羅されていますが、arm未対応のHomebrewなどx86_64イメージから削られているものもあります。
カケハシでの利用用途
カケハシでの現在のarmランナー利用箇所をご紹介します。
armコンテナイメージのビルド
arm環境を使っているサービスのDockerビルドをarmランナーに移動させました。あるリポジトリで試したところ、これまで30分程度かかっていたビルドが2分で完了しました。
IaC実行
IaCは実行環境の違いで結果が変わらない上、クラウドなどのAPIコール時間が律速になるため、切り替えやすい用途です。カケハシではTerraformを多く利用していますが、Terraformはarm64バイナリも提供されているため、ワークフローを1行書き換えるだけで移行が完了しました。AWS CLIなどもarm64バイナリが提供されているため、CloudFormationなどでも容易に移行できるでしょう。
この記事がarmランナー導入の参考になれば幸いです。 担当:松浦
参考ドキュメント
- より大きなランナーの概要
- GitHub公式larger runner導入ドキュメント
- 現在はlarger runnerの1バリエーションなので、同様の手順で導入可能です。
- How to set up GitHub hosted Arm runners (improve developer CI/CD efficiency)
- 導入手順動画(英語)