Azure

Terraform on Azure 完全ガイド|AzureRM/AzAPI Provider・State 管理・Module 設計・CI/CD 統合

2026-05-24
NicheeLab編集部

Terraform on Azure は、HashiCorp 製のマルチクラウド IaC ツール Terraform を Azure リソース管理に使用する組み合わせです。 Bicep が Azure 専用 DSL なのに対し、Terraform はマルチクラウド対応 (3,000+ Provider) で既存資産活用・OSS コミュニティ強いという特徴。 本記事では、Provider 選定・State 管理・Module 設計・CI/CD 統合を網羅的に整理します。

Bicep vs Terraform の選定基準

項目BicepTerraform
開発元MicrosoftHashiCorp
対応クラウドAzure 専用マルチクラウド (3,000+ Provider)
言語Bicep DSLHCL
State 管理不要 (ARM が自動)必要 (Azure Storage / Terraform Cloud)
最新 Azure 機能即時サポート遅れることあり (AzAPI で回避可)
料金無料OSS 無料 / Cloud は有料
適用シーンAzure 専用・最新機能優先マルチクラウド・既存資産

新規 Azure 専用プロジェクトは Bicep、マルチクラウド / 既存 Terraform プロジェクトは Terraform、というのが現代の選定基準。

AzureRM Provider と AzAPI Provider

項目AzureRM ProviderAzAPI Provider (2022 公開)
位置付け標準補完
動作Azure REST API ベースの専用関数Azure REST API を直接呼び出す汎用
リソース数3,000+ 専用関数azapi_resource 1 つで全リソース
最新機能対応数ヶ月遅れることあり即時対応
用途標準パターンPreview 機能・最新追加リソース

標準パターン: AzureRM Provider をベースとして使用、Preview 機能や最新追加リソースのみ AzAPI Provider で対応。両者は同一 Terraform プロジェクト内で混在可能

Terraform State の管理

Terraform State はインフラの現在状態を JSON で記録したファイル、terraform plan / apply の基準。デフォルトはローカル、本番は必ずリモート Backend に保管

Azure 標準パターン

  • Azure Storage Account の Blob Container を Backend として使用
  • State Lock (同時更新防止) を Blob Lease で実現
  • State 暗号化 (Customer-Managed Key)
  • Versioning + Soft Delete で誤削除対策
  • Microsoft Entra ID 認証で State へのアクセス制御

Backend 設定例

terraform {
  backend "azurerm" {
    resource_group_name  = "rg-tfstate"
    storage_account_name = "stgtfstate001"
    container_name       = "tfstate"
    key                  = "prod.terraform.tfstate"
    use_oidc             = true
  }
}

Terraform Cloud (有料 SaaS) も Backend として利用可能で、より高度な State 管理を提供します。

Module 設計

Terraform Module は再利用可能な Terraform コードユニット。

推奨ディレクトリ構造

infra/
├── main.tf              # エントリポイント・Provider 設定
├── variables.tf         # 入力変数
├── outputs.tf           # 出力値
├── modules/
│   ├── network/         # VNet / NSG / Subnet
│   ├── compute/         # VM / App Service / AKS
│   ├── storage/         # Storage Account / Container
│   └── identity/        # Managed Identity / Key Vault
└── environments/
    ├── dev.tfvars
    ├── stage.tfvars
    └── prod.tfvars

Module 呼び出しの例

module "network" {
  source              = "./modules/network"
  vnet_name           = var.vnet_name
  address_space       = ["10.0.0.0/16"]
  location            = var.location
  resource_group_name = azurerm_resource_group.main.name
}

module "compute" {
  source              = "./modules/compute"
  vm_name             = var.vm_name
  subnet_id           = module.network.app_subnet_id
  resource_group_name = azurerm_resource_group.main.name
  depends_on          = [module.network]
}

Azure Verified Modules (AVM)

Azure Verified Modules (AVM、2024 GA) は Microsoft が品質保証する Terraform Module セットで、業界ベストプラクティス準拠の参考実装です。

  • Microsoft 公式メンテナンス
  • Well-Architected Framework 準拠
  • セキュリティベースライン適用済み
  • Terraform Registry で公開
  • Bicep 版 AVM も提供

エンタープライズでは AVM を基礎にカスタマイズが定石。Module 化により大規模 IaC のメンテナンス性が劇的向上します。

Bicep との併用

両者は競合せず併用可能。代表的な併用パターン:

  1. Azure 専用リソースは Bicep、マルチクラウド要件 (AWS RDS など) は Terraform
  2. 新規開発は Bicep、既存 Terraform 資産は維持
  3. Microsoft の最新機能 (Preview 含む) は Bicep / AzAPI、安定機能は Terraform AzureRM

CI/CD パイプライン併用例

  • Stage 1: Bicep で Hub VNet 構築
  • Stage 2: Terraform で AWS リソース + AKS
  • Stage 3: Bicep で Azure SaaS 構成

Drift Detection

Drift Detection は、Terraform State と実際の Azure リソース状態の差分を検出する操作。Azure Portal や CLI でリソースが手動変更された場合、State と乖離が発生、次回 terraform apply で意図しない変更が発生するリスク。

対応コマンド

  • terraform plan -refresh-only: State を最新リソースに合わせて更新
  • terraform apply -refresh-only: 差分適用
  • terraform import: 新規リソースを State に取り込み

定期的な Drift Detection を CI/CD パイプラインに組み込む (週次など) ことで、手動変更の早期発見が可能。Azure Policy の Deny Effect で手動変更そのものを禁止する組み合わせがエンタープライズの標準パターンです。

GitHub Actions / Azure Pipelines への統合

標準パターン

  1. Lint: terraform fmt -check + terraform validate
  2. Init: Backend 接続
  3. Plan: terraform plan -out=tfplan、変更内容予測
  4. Manual Approval (Production の場合)
  5. Apply: terraform apply tfplan

GitHub Actions の例

name: Terraform Apply
on:
  push:
    branches: [main]

jobs:
  terraform:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
      - uses: actions/checkout@v4
      - uses: hashicorp/setup-terraform@v3
      - uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - run: terraform init
      - run: terraform plan -out=tfplan
      - run: terraform apply tfplan

OIDC / Workload Identity Federation で AzureRM Provider 認証 (Secret 不要)、Backend 認証も同様。Pull Request 時に Plan 結果を PR コメントに自動投稿する Pattern も標準実装。

運用ベストプラクティス

  1. State は必ず Azure Storage Backend に保管 (ローカル State 禁止)
  2. State Lock + Versioning + Soft Delete で誤削除対策
  3. Module 化で再利用性確保 (AVM 活用)
  4. 環境別 tfvars で構成分離
  5. OIDC / WIF で Secret 不要認証
  6. CI/CD パイプラインに Plan → Approval → Apply を組み込み
  7. 定期 Drift Detection で手動変更検知
  8. Azure Policy で手動変更禁止
  9. Pull Request 時の Plan 結果を PR コメント自動投稿
  10. Provider バージョン固定 (terraform.tf で required_version + required_providers)

関連認定試験

よくある質問

Terraform on Azure とは?

Terraform on Azure は、HashiCorp 製のマルチクラウド IaC ツール Terraform を Azure リソース管理に使用する組み合わせ。AzureRM Provider (Microsoft 公式メンテナンス) で Azure リソースを HCL (HashiCorp Configuration Language) で宣言的に定義、terraform plan / apply コマンドで Azure に適用。Bicep が Azure 専用 DSL で最新機能即時サポートなのに対し、Terraform はマルチクラウド対応 (AWS / GCP / Azure / Kubernetes / SaaS など 3,000+ Provider) で既存資産活用・OSS コミュニティ強い。新規 Azure 専用プロジェクトは Bicep、マルチクラウド / 既存 Terraform プロジェクトは Terraform、というのが現代の選定基準です。

AzureRM Provider と AzAPI Provider の違いは?

AzureRM Provider: 標準の Azure リソース管理 Provider、Microsoft 公式メンテナンス、Azure REST API ベース、リソースタイプごとに専用関数 (azurerm_storage_account など 3,000+ リソース)、Terraform Registry で公開。AzAPI Provider: 2022 年に Microsoft が公開した新 Provider、Azure REST API を直接呼び出す汎用リソース (azapi_resource)、AzureRM Provider 未対応の新規 Azure 機能・Preview 機能を即座に利用可能 (AzureRM は数ヶ月遅れることあり)。標準パターン: AzureRM Provider をベースとして使用、Preview 機能や最新追加リソースのみ AzAPI Provider で対応。両者は同一 Terraform プロジェクト内で混在可能で、リソースタイプごとに使い分け可能です。

Terraform State の管理は?

Terraform State はインフラの現在状態を JSON で記録したファイル、terraform plan / apply の基準。デフォルトはローカル (terraform.tfstate)、本番は必ずリモート Backend に保管。Azure 標準パターン: 1) Azure Storage Account の Blob Container を Backend として使用、2) State Lock (同時更新防止) を Storage Account の Blob Lease で実現、3) State 暗号化 (Customer-Managed Key)、4) Versioning + Soft Delete で誤削除対策、5) Microsoft Entra ID 認証で State へのアクセス制御。Backend 設定例: terraform { backend 'azurerm' { resource_group_name = '...' storage_account_name = '...' container_name = '...' key = 'prod.terraform.tfstate' } }。Terraform Cloud (有料 SaaS) も Backend として利用可能で、より高度な State 管理を提供します。

Module の設計は?

Terraform Module は再利用可能な Terraform コードユニット。標準ディレクトリ構造: 1) main.tf (エントリポイント・Provider 設定)、2) variables.tf (入力変数)、3) outputs.tf (出力値)、4) modules/ (機能別モジュール: network・compute・storage)、5) environments/ (環境別 tfvars)。Terraform Registry や社内 Git で Module 公開、複数プロジェクトで再利用。Microsoft 公式の Azure Verified Modules (AVM、2024 GA) は Microsoft が品質保証する Terraform Module セットで、業界ベストプラクティス準拠の参考実装。エンタープライズでは AVM を基礎にカスタマイズが定石。Module 化により大規模 IaC のメンテナンス性が劇的向上、Bicep の Module 機能と同様の効果を提供します。

Bicep と Terraform を併用できますか?

可能、両者は競合せず併用可能。代表的な併用パターン: 1) Azure 専用リソースは Bicep、マルチクラウド要件 (AWS RDS など) は Terraform、2) 新規開発は Bicep、既存 Terraform 資産は維持、3) Microsoft の最新機能 (Preview 含む) は Bicep / AzAPI、安定機能は Terraform AzureRM。両者を Azure DevOps / GitHub Actions の同一パイプライン内で順次実行可能。CI/CD パイプライン例: Stage 1 (Bicep で Hub VNet 構築) → Stage 2 (Terraform で AWS リソース + AKS) → Stage 3 (Bicep で Azure SaaS 構成)。組織のスキルセット・既存資産・要件で柔軟に使い分けるのが現実的な戦略です。

State の Drift Detection は?

Drift Detection は、Terraform State と実際の Azure リソース状態の差分を検出する操作。Azure Portal や CLI でリソースが手動変更された場合 (Terraform 外の変更)、State と乖離が発生、次回 terraform apply で意図しない変更が発生するリスク。対応コマンド: terraform plan -refresh-only (State を最新リソースに合わせて更新)・terraform apply -refresh-only (差分適用)・terraform import (新規リソースを State に取り込み)。定期的な Drift Detection を CI/CD パイプラインに組み込む (週次など) ことで、手動変更の早期発見が可能。Azure Policy の DenyEffect で手動変更そのものを禁止する組み合わせがエンタープライズの標準パターンです。

GitHub Actions / Azure Pipelines への統合は?

標準パターン: 1) Lint (terraform fmt -check + terraform validate)、2) Init (Backend 接続)、3) Plan (terraform plan -out=tfplan、変更内容予測)、4) Manual Approval (Production の場合)、5) Apply (terraform apply tfplan)。GitHub Actions では hashicorp/setup-terraform Action 使用、Azure Pipelines では TerraformInstaller Task と TerraformTaskV4 Task の組み合わせ。OIDC / Workload Identity Federation で AzureRM Provider 認証 (Secret 不要)、Backend 認証も同様。Pull Request 時に Plan 結果を PR コメントに自動投稿する Pattern も標準実装。詳細は Bicep チュートリアル記事の CI/CD パターンが Terraform にもそのまま応用可能です。

関連認定試験は?

AZ-400 (DevOps Engineer Expert) のドメイン 3 で IaC として Bicep / ARM と並んで Terraform が問われる本領域の本命認定。AZ-104 (Administrator) で IaC 基礎、AZ-305 (Solutions Architect Expert) でアーキテクト視点での IaC 戦略選定 (Bicep vs Terraform)。Microsoft 外の認定: HashiCorp Certified: Terraform Associate (ベンダ中立、Terraform の標準認定、年 1 回更新)、Terraform 専門家として転職市場で評価される。AZ-400 + Terraform Associate の二刀流が DevOps エンジニアの強い武器、特にマルチクラウド企業で重宝されます。

関連記事・技術深掘り

Azure Bicep チュートリアル|ARM 後継 IaC の基本構文・モジュール化・What-If・CI/CD 統合【2026 年版】

Azure 純正 IaC ツール Bicep の完全チュートリアル。ARM JSON との違い・基本構文 (param/var/resource/module/output)・モジュール化ベストプラクティス・What-If デプロイ・GitHub Actions / Azure Pipelines 統合・ARM からの移行手順・関連認定試験 (AZ-104 / AZ-204 / AZ-400 / AZ-305) を日本語で網羅。

GitHub Actions vs Azure Pipelines 完全比較|CI/CD 選定・Self-hosted Runner・OIDC 認証【2026 年版】

GitHub Actions と Azure Pipelines を完全比較。機能差・Marketplace エコシステム・Self-hosted Runner / Agent・OIDC (Workload Identity Federation) 認証・Matrix Build・Composite Action / Reusable Workflow・DevSecOps 統合・関連認定試験 (AZ-400 / AZ-204) を日本語で網羅。

Azure DevOps エンジニア キャリアロードマップ|AZ-104 → AZ-400 → SC-100 シニア DevOps への道【2026 年版】

Azure DevOps Engineer になるための認定取得ロードマップ完全版。AZ-900 → AZ-104 → AZ-400 の王道ルート、GitHub と Azure DevOps の両方を扱う AZ-400 の構成、Kubernetes 認定 (CKA / CKAD / CKS) との二刀流、IaC (Bicep / Terraform) 戦略、年収レンジまで日本語で網羅。

AZ-400 完全ガイド|Microsoft Azure DevOps Engineer Expert 出題範囲・学習リソース・合格戦略【2026 年版】

Microsoft Certified: DevOps Engineer Expert (AZ-400) の完全ガイド。5 ドメインの出題範囲、Azure DevOps と GitHub の両方を網羅、IaC (Bicep / ARM / Terraform)、CI/CD パイプライン設計、DevSecOps、SRE プラクティス、3-4 ヶ月の合格ロードマップ、AZ-305 / SC-100 との二刀流戦略を日本語で網羅。

本記事の技術情報は AzureRM Provider Documentation およびMicrosoft Terraform on Azure Documentation に基づいています。 本記事は Microsoft Corporation の公式商品ではなく、いかなる提携・後援関係もありません。 Microsoft、Azure は Microsoft group of companies の商標です。Terraform は HashiCorp の商標です。 情報は 2026 年 5 月 24 日時点の公式公開資料に基づきます。最新情報は必ず公式ページをご確認ください。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

Azure 試験対策ページを見る
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Azure

AZ-900 完全ガイド|Microsoft Azure Fundamentals 出題範囲・学習リソース・合格戦略

Microsoft Azure Fundamentals (AZ-900) の 2026 年 1 月 14 日改訂版に対...

Azure

Azure 認定資格ロードマップ 2026 完全版|全 26 試験の体系と大型再編 (AI-901/AI-103/SC-500)

Microsoft Azure 認定資格 全 26 試験 (現行 23 + 退役 3) の 2026 年版ロードマップ。...

Azure

AI-901 完全ガイド|Azure AI Fundamentals 新試験

Microsoft Certified: Azure AI Fundamentals (AI-901) の出題範囲・Mi...

Azure

Microsoft Entra ID 入門|旧 Azure AD から学ぶ ID 管理 (AZ-900/SC-900/AZ-104 必須知識)

Microsoft Entra ID (旧 Azure Active Directory) の入門解説。2023 年 7...

Azure

DP-900 完全ガイド|Azure Data Fundamentals 出題範囲・学習リソース・合格戦略

Microsoft Azure Data Fundamentals (DP-900) の完全ガイド。4 ドメインの出題範...

Azureの記事一覧 (103件)
© 2026 NicheeLab All rights reserved.