GitHubActions

GitHub Actions セルフホストランナー設定とAWS EC2での安全構築ガイド

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

GitHub リポジトリでセルフホストランナーを登録する手順

GitHub の UI から簡単にランナー登録画面へ遷移できます。ここでは必要な権限と操作の流れをまとめ、実際に画面を開くまでのステップをご紹介します。

UI から登録画面へアクセスする方法

以下の手順で「New self‑hosted runner」ボタンが表示されます。

手順 操作内容
1 リポジトリページ右上の Settings をクリック
2 左サイドメニューから Actions → Runners を選択
3 ページ下部にある New self‑hosted runner ボタンを押す
4 OS(Linux・macOS・Windows)を選び、表示されたダウンロード URL とトークン取得コマンドを確認

この画面でランナー名とタグを自由に設定でき、ワークフローでは runs-on: [self-hosted, linux] のように指定できます。必要な権限はリポジトリの 管理者以上 です。


ランナー本体の取得と初期設定

最新バージョンを常に利用できるよう、ハードコードされたバージョン番号ではなく GitHub API から動的に取得する手順をご説明します。

最新リリースの取得方法(API 利用)

GitHub の公式リポジトリ actions/runner の最新リリース情報は次のコマンドで取得できます。

ポイントjq がインストールされていない環境は grep/sed でも代替可能です。

設定スクリプトの実行(Linux/macOS)

ダウンロードしたアーカイブを展開し、GitHub UI で取得した TokenRepository URL を用いて設定します。

Windows の場合は同様に config.cmd にオプションを渡します。
設定が完了するとランナーは GitHub と接続され、次のステップへ進めます。


OS 別サービス化(永続稼働)

ランナーをバックグラウンドで常駐させるには、各 OS のサービス管理機構に登録します。ここでは代表的な 3 プラットフォームの設定例を示します。

systemd (Linux) の具体的手順

svc.sh が提供するインストールコマンドで systemd ユニットを作成し、起動・自動有効化します。

launchd (macOS) の具体的手順

launchd 用の plist を作成し、ロードするだけで自動起動が可能です。

NSSM (Windows) の具体的手順

NSSM(Non‑Sucking Service Manager)を利用して run.cmd をサービス化します。


AWS EC2 上でのベストプラクティス

大量のランナーをクラウドで運用する際は、最小権限の IAM ロール適切なセキュリティグループ を組み合わせることがコストとセキュリティの両面で重要です。

最小権限 IAM ポリシー例

ランナー自体は GitHub との通信にトークンを使用するため、EC2 側に必要なのはパラメータ取得とインスタンス管理だけです。

上記ポリシーに加えて、AmazonEC2RoleforSSM(または AmazonSSMManagedInstanceCore)をアタッチすれば SSM エージェント経由でパラメータ取得が可能です。

セキュリティグループ設定の指針

  • インバウンド:SSH (TCP 22) は管理者 IP のみ許可、HTTPS (TCP 443) は全開放(GitHub への通信はアウトバウンドで OK)。
  • アウトバウンド:すべてのポート・プロトコルを許可し、GitHub API/Runner ダウンロードに必要な 443 を必ず通す。

Auto Scaling と Lambda による自動登録/削除フロー

  1. Auto Scaling Group (ASG)desired = 0 で待機状態にします。
  2. ジョブがキュー(例:SQS)に入ったら Lambda がトリガーされ、EC2 を起動します。
  3. 起動後の User Data または Cloud‑Init スクリプトで config.sh を実行し、ランナーを自動登録します。
  4. ジョブが完了したら同じ Lambda が ./config.sh remove を呼び出して GitHub からランナーを削除し、インスタンスを終了させます。

このサイクルによりスポットインスタンスも安全に利用でき、コストを最大限抑えつつスパイク時の処理能力を確保できます。


運用・保守のポイント

ランナーは常に稼働し続けるため、トークン管理や定期的なバイナリ更新、ログ監視が欠かせません。以下に実践的な手順をまとめます。

トークンの安全な保管方法

一時的トークンは AWS Secrets Manager または Parameter Store に保存し、ランナー起動時に環境変数で参照します。

Secrets Manager の自動ローテーション機能を有効にすれば、トークン更新作業も手間なく実行できます。

定期的なランナー本体のアップデートスクリプト(例:Ubuntu)

6 時間ごとに最新リリースを確認し、必要なら自動更新します。

cron0 */6 * * * /usr/local/bin/update-runner.sh を登録しておくと、手動介入なしで常に最新状態が保たれます。

ログ監視と代表的な障害対応

症状 主な原因 推奨対策
Failed to connect to GitHub IAM ポリシー不足、SG のアウトバウンドブロック ロールに ssm:GetParameterec2:DescribeInstances を付与、SG で TCP 443 を許可
Permission denied while fetching repository リポジトリへのアクセス権がランナーに付与されていない Organization → Settings → Actions → Runners の「Allowed actions」設定を確認
ディスク容量不足(ビルドアーティファクト残存) /tmp~/.cache が肥大化 runner.cleanup スクリプトで定期削除、EBS サイズ自動拡張の CloudWatch アラートを設定

ログは systemd のジャーナル (journalctl -u actions.runner.*) と CloudWatch Logs エージェント に転送すれば、一元管理が可能です。


まとめ

  • リポジトリ側登録:Settings → Actions → Runners → 「New self‑hosted runner」から開始。管理者権限が必要です。
  • 最新バイナリ取得:GitHub API を利用して動的にダウンロード URL を生成し、ハードコードを排除。
  • 設定スクリプト実行config.sh / config.cmd にトークン・URL・名前・タグを渡すだけで接続完了。
  • サービス化:systemd、launchd、NSSM のいずれかで永続起動し、ログは標準出力/CloudWatch に集約。
  • AWS ベストプラクティス:最小権限 IAM ロールと適切な SG、Auto Scaling + Lambda で自動登録・削除を実装し、スポットインスタンスでコスト最適化。
  • 運用保守:Secrets Manager にトークン保存、定期的なバイナリ更新スクリプト、ログ監視と障害対応手順をドキュメント化しておくことで安全・安定した CI 環境が実現できます。

以上の手順に沿って設定すれば、GitHub Actions のセルフホストランナー を最新かつスケーラブルに運用できるようになります。ぜひ実際のプロジェクトで試し、得られた知見をチーム内で共有してください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-GitHubActions