Cloud Service
GitHub Actions for Azure
GitHub のリポジトリから直接 Azure へビルド・テスト・デプロイを自動化。公式アクションと OIDC 認証で CI/CD を素早く組める。AWS の GitHub 連携や CodePipeline 相当の役割を担う。
- 1.GitHub Actions のワークフローから Azure へデプロイするための公式アクション群と連携機能。
- 2.ワークロード ID フェデレーション(OIDC)でシークレットを持たずに Azure へ認証できる。
- 3.App Service・Functions・AKS・コンテナーなど主要な Azure サービスへの配信を YAML で定義する。
解決する課題
- GitHub に置いたコードを、プッシュやプルリクエストをきっかけに自動で Azure へデプロイしたい
- デプロイのために長期保管の資格情報(パスワードやシークレット)を持ちたくない
- App Service・Functions・AKS などサービスごとにバラバラな手順を、共通の YAML ワークフローに統一したい
- ビルド・テスト・デプロイの定義を**コードとしてリポジトリで管理(バージョン管理)**したい
- GitHub をソース管理の中心にしたまま、別の CI/CD ツールを増やさずに Azure へ配信したい
主要概念と用語
- GitHub Actions: GitHub に組み込まれた CI/CD 基盤。リポジトリのイベントをきっかけに自動処理を実行する
- ワークフロー(Workflow): 実行する処理を定義した YAML ファイル。リポジトリの .github/workflows 配下に置く
- ジョブ(Job)/ ステップ(Step): ワークフロー内の処理単位。ジョブはランナー上で動き、ステップはアクションやコマンドの最小実行単位
- アクション(Action): 再利用可能な処理部品。Azure は azure/login や azure/webapps-deploy などの公式アクションを提供する
- ランナー(Runner): ジョブを実行する計算環境。GitHub ホステッドランナーと、自前のセルフホステッドランナーがある
- azure/login アクション: Azure への認証を行う公式アクション。OIDC または資格情報で接続する
- ワークロード ID フェデレーション(OIDC): GitHub が発行する一時トークンを Azure 側で信頼し、シークレットなしで認証する仕組み
- サービスプリンシパル / マネージド ID: Azure 側でワークフローに権限を割り当てるための ID。OIDC の信頼先として登録する
- GitHub Secrets / Variables: ワークフローに渡す機密値や設定値を安全に保管する仕組み
- 環境(Environment): GitHub 側のデプロイ先の論理単位。承認やシークレットのスコープを紐づけられる
仕様・制限・クォータ
- 公式アクションが豊富: azure/login、azure/webapps-deploy、azure/functions-action、azure/k8s-deploy、azure/cli など、主要サービス向けのアクションが用意されている
- OIDC 認証に対応: ワークロード ID フェデレーションにより、長期シークレットを保管せずに Azure へ認証できる
- ランナーの選択: GitHub ホステッドランナー(Linux / Windows / macOS)はクリーンな使い捨て環境。社内ネットワーク到達や独自ツールが要る場合はセルフホステッドランナーを使う
- 同時実行と実行時間の上限: 同時に動かせるジョブ数やジョブあたりの最大実行時間にはプランごとの上限がある。長時間ジョブはセルフホステッドが向く
- 無料利用枠と従量課金: パブリックリポジトリと一定枠は無料で、それを超える実行時間が課金対象になる。Azure 側のリソース費用は別途かかる
- 具体的な無料枠・実行時間上限・並列数などは変動するため、最新の公式情報で確認する
内部の仕組み
GitHub Actions for Azure は、独立した別サービスではなく、GitHub Actions のワークフローから Azure へ安全に配信するための公式アクション群と連携の作法を指します。リポジトリの .github/workflows に置いた YAML が、プッシュやプルリクエストなどのイベントをきっかけに実行(Run)として展開され、各ジョブがランナー上で順に処理されます。
認証は azure/login アクションが担います。ワークロード ID フェデレーション(OIDC)を使う場合、ジョブ実行時に GitHub が短命のトークンを発行し、Azure 側に登録したサービスプリンシパルまたはマネージド ID のフェデレーション資格情報がそのトークンを検証します。検証に通るとアクセストークンが払い出され、以降のステップで Azure リソースを操作できます。これにより、長期保管のクライアントシークレットをリポジトリに持つ必要がなくなります。
認証後は、azure/webapps-deploy や azure/functions-action、azure/k8s-deploy などのサービス別アクションが成果物を対象リソースへ配信します。GitHub 側の**環境(Environment)**に承認を設定しておけば、本番反映の直前に人手のゲートを通すこともできます。
標準的なビルドで、社内ネットワークへの到達や独自ツールが要らないなら、管理不要な GitHub ホステッドランナーが手軽です。プライベートネットワーク内のリソースや専用ツール、大きなキャッシュが必要ならセルフホステッドランナーを選びます。これは Azure Pipelines の Microsoft ホステッド/セルフホステッドエージェントと同じ判断軸です。
設計パターン / ベストプラクティス
- OIDC(ワークロード ID フェデレーション)を既定にする: クライアントシークレットを持たないパスワードレス認証を第一選択にする
- ワークフローは YAML でコード管理し、変更をプルリクエストでレビューしてから反映する
- 環境ごとにワークフローやジョブを分割し、テストに通った成果物だけをステージング・本番へ流す
- 本番環境には承認を設定し、無人デプロイでも人手のゲートを通す
- 公式アクションのバージョンを固定して、意図しない挙動変更を避ける
- キャッシュ(依存パッケージなど)を活用してビルド時間を短縮する
- 権限は最小限にし、ジョブに付与する Azure 側のロールも必要なスコープに絞る
運用・監視
- 各実行のログとジョブ・ステップの状態は GitHub の Actions 画面で確認でき、失敗箇所を追跡できる
- デプロイ先の状態は Azure Monitor / Application Insights など Azure 側の監視で確認し、配信後の挙動を追う
- 失敗時は GitHub の通知(メールや連携)で関係者に知らせ、再実行(Re-run)で復旧を試みる
- ビルドが遅い・詰まるときは同時実行枠やランナーの空き、依存解決やテストのボトルネックを確認する
- セルフホステッドランナーはOS パッチやツール更新、ディスク容量を自分で運用する必要がある
コスト
| 項目 | 課金の考え方 |
|---|---|
| GitHub ホステッドランナー | 実行時間(分)に応じた従量課金。一定の無料枠を超えた分が対象 |
| セルフホステッドランナー | ランナーの計算資源は自前負担。GitHub Actions の実行分課金は基本かからない |
| Azure 側リソース | App Service や AKS などデプロイ先の費用は別途かかる |
| ストレージ・転送 | アーティファクトやキャッシュの保管・転送量に応じた費用がかかる場合がある |
基本はワークフローの実行時間(分)でコストが決まります。頻繁に長時間ビルドが走るなら、キャッシュ活用やジョブの分割で実行時間を抑えるのが効きます。常時稼働が多い場合は、計算資源を自前で持つセルフホステッドランナーのほうが総額で有利になることがあります。Azure 側のデプロイ先費用は別管理で見積もります。
セキュリティ
- **ワークロード ID フェデレーション(OIDC)**で認証し、長期保管のクライアントシークレットをリポジトリに置かない(AWS の IAM ロール引き受けに近い発想)
- フェデレーション資格情報の信頼条件を絞る: 特定のリポジトリ・ブランチ・環境からのトークンだけを受け付けるよう Azure 側で限定する
- 機密値は GitHub Secretsで保護し、ログに出力されないよう扱う
- 環境の承認で本番デプロイに人手の関門を設け、誤った反映を防ぐ
- Azure 側でワークフローに付与するロールは最小権限にし、デプロイに必要なスコープへ限定する
Azure のクライアントシークレットや API キーをワークフローや GitHub Secrets に長期保管したまま使い回すのは避けたい構成です。**ワークロード ID フェデレーション(OIDC)**を使えば、短命のトークンで認証でき、長期シークレットの漏洩やローテーションの手間を排除できます。
関連サービス・比較
GitHub Actions for Azure と最もよく比較されるのは、Azure 自身の CI/CD サービスである Azure Pipelines です。どちらも YAML でパイプラインを定義し、ワークロード ID フェデレーションで Azure へ認証できますが、ソース管理や運用画面の置き場所が異なります。
| 観点 | GitHub Actions for Azure | Azure Pipelines |
|---|---|---|
| 基盤 | GitHub に組み込まれた CI/CD | Azure DevOps のマネージド CI/CD |
| 定義方法 | リポジトリ内の YAML ワークフロー | リポジトリ内の YAML パイプライン |
| 実行環境 | GitHub ホステッド / セルフホステッドランナー | Microsoft ホステッド / セルフホステッドエージェント |
| Azure 認証 | azure/login + OIDC | サービス接続 + ワークロード ID フェデレーション |
| デプロイ制御 | GitHub の環境と承認 | Azure DevOps の環境の承認とチェック |
| 向き | GitHub 中心の開発フローに統合したい場合 | Azure DevOps に揃えて運用したい場合 |
ハンズオン / CLI例
# OIDC 用のサービスプリンシパル(アプリ登録)を作成
az ad app create --display-name "gh-actions-azure"
# アプリにフェデレーション資格情報を追加し、特定リポジトリの main ブランチを信頼
az ad app federated-credential create \
--id <appId> \
--parameters '{
"name": "gh-main",
"issuer": "https://token.actions.githubusercontent.com",
"subject": "repo:myorg/myrepo:ref:refs/heads/main",
"audiences": ["api://AzureADTokenExchange"]
}'
# サービスプリンシパルにデプロイ先リソースグループへのロールを最小権限で付与
az role assignment create \
--assignee <appId> \
--role "Contributor" \
--scope /subscriptions/<subId>/resourceGroups/<rg>
Azure Service
GitHub Actions for Azureを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
開発者ツール
比較で見る軸
クラウド: Azure / カテゴリ: 開発者ツール / 難易度: basic
導入後に効く点
ワークロード ID フェデレーション(OIDC)でシークレットを持たずに Azure へ認証できる。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Azure
- カテゴリ
- 開発者ツール
- 難易度
- basic
- 関連資格
- —
- 設計柱
- operational / security
判断チェックリスト
- 自社の用途が「開発者ツール / operational」に近いか確認する。
- 強みである「GitHub Actions のワークフローから Azure へデプロイするための公式アクション群と連携機能。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。