こんにちは。KENTEMのフロントエンド担当です。
KENTEMでは、去年から開発環境をGitHubへ移行中です。 tech.kentem.jp
それに伴い、GitHub Actionsの活用も増えてきたのですが、
既に無料枠は使い切ってしまい、徐々に請求額が高くなってきました。
開発には欠かせないものであり、バッチリ活用している結果ではあるのですが、
どうせならお得に使いたいですよね。
ということで今回は、2024年6月にパブリックベータ版が発表された、
Armランナーを使ってコスト削減したお話です。
特徴
通常のランナーより安価
1番はこれですね。価格表によると、
Linux 2-coreであれば、通常1分あたり0.008ドルなのに対し、
Armランナーだと0.005ドル、約37%お得です。larger runnersとして設定する
初期状態では使用することができず、設定を行う必要があります。
利用可能なプランはGitHub Team または GitHub Enterprise Cloudに限られています。
※ 2024年8月時点無料枠での稼働ができない
larger runnersであるため、無料枠が残った状態でも課金が行われてしまいます。
そのため、全てをArmランナーにするのではなく、
通常のランナーで無料枠を使いつつ残りをArmランナーにするのがベストです。
設定方法
organizationsの設定からNew GitHub-hosted runnerをクリック
名前などを設定してから、Create runnerをクリック
Linuxだけではなく、Windowsも選択できます。
今回、Imageは最新、Sizeは2-coreにします。
CapacityやPermissionsはデフォルトのままでもOKです。
皆様の会社の事情によって調整してください。
GitHub Actionsの課金設定を行う
特徴でも述べた通り、無料枠での稼働ができないため課金設定が必要です。ワークフローの runs-onを設定した名前に変更
jobs: sample: # ここは自分で付けた名前にする runs-on: Linux-2-core-ARM
これだけでOKです。
注意点と解決策
注意点として、Dockerで作られたActionはエラーになってしまいました。
プルリクエストが作成されると、Storybookをビルドしテストを実行。
最後にStorybookとテストレポートを、
Azure Static Web Apps(以降SWAと記載)にデプロイする。
そのようなワークフローを作成していたのですが、
SWAにデプロイするためのActionはエラーになってしまいました。
ジョブを分割し、Armランナーでビルド&テストまでは実行。
Storybookとテストレポートを、Artifactsとして保存。
通常のランナーでArtifactsをダウンロードし、デプロイだけ実行。
というようにして対応しました。
ジョブ分割してしまった分、実行時間は伸びてしまったのですが、
それよりも、分単位の価格が抑えられたメリットのほうが大きかったです。
色々と省略しましたが、ymlファイルのイメージとしてはこんな感じです。
jobs: storybook_build: # ここは自分で付けた名前にする runs-on: Linux-2-core-ARM steps: # ビルドしたり、テストしたり色々 - name: Upload artifact storybook uses: actions/upload-artifact@v4 with: name: storybook path: storybook-static storybook_deploy: runs-on: ubuntu-latest needs: storybook_build steps: - name: Download artifact storybook uses: actions/download-artifact@v4 with: name: storybook path: storybook-static # StorybookをSWAにデプロイ
使ってみた結果
一部のワークフローをArmランナー化した状態での請求です。
たまたまArmランナーの10倍、通常のランナーが使用されているタイミングだったのですが、
Armランナー分の請求を10倍しても約10ドル、通常のランナーであれば約16ドル請求されていたので、効果は大きいと思います。
まだまだ一部しか対応できていないので、今後対応範囲を広めていきたいですね。
おわりに
KENTEMでは、様々な拠点でエンジニアを大募集しています!
建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください。
recruit.kentem.jp
career.kentem.jp