Azure での Terraform
AzureRM Terraform provider を構成し、基本的なインフラストラクチャ計画を記述して、ネイティブの ARM/Bicep ツールより Terraform を選ぶべき状況を理解します。
「Azure での Terraform」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
Terraform とは何か、なぜ Azure なのか
Terraformは、HashiCorp が開発したオープンソースの Infrastructure as Code ツールです。Bicep とは異なり、Terraform はクラウドに依存せず、1 つの Terraform コードベースで Azure、AWS、GCP、その他多数のプロバイダーにまたがるリソースを同時に管理できます。Azure では、Terraform はAzureRM providerを使用して ARM API と連携するため、マルチクラウド環境でよく選ばれています。
AzureRM Terraform Provider
AzureRM providerは、Terraform がダウンロードして使用するプラグインで、Terraform の構成を ARM API 呼び出しに変換します。HashiCorp と Microsoft によって保守されており、Terraform で Azure リソースを管理するための公式な方法です。サブスクリプション ID と認証方法を指定して provider を構成し、terraform init を実行してダウンロードします。
# main.tf — configure the AzureRM provider
terraform {
required_providers {
azurerm = {
source = 'hashicorp/azurerm'
version = '~> 3.0'
}
}
}
provider 'azurerm' {
features {}
subscription_id = var.subscription_id
}Terraform のファイル構成
一般的な Azure Terraform プロジェクトは、複数の .tf ファイルに分割されます。main.tf にはリソース宣言、variables.tf には入力変数、outputs.tf には出力値、terraform.tfvars には特定の環境で使用する変数値を記述します。Terraform は現在のディレクトリにあるすべての .tf ファイルを自動的に読み込むため、複数のファイルに分けるのは読みやすさのためだけです。
# variables.tf
variable 'resource_group_name' {
description = 'Name of the resource group'
type = string
default = 'my-rg'
}
variable 'location' {
description = 'Azure region'
type = string
default = 'eastus'
}Azure リソースの宣言
Terraform では、resource ブロックを使用して Azure リソースを宣言します。ブロック型は resource で、その後に AzureRM リソース型(例: 'azurerm_resource_group')と、構成内で参照するためのローカル名を指定します。Terraform のプロパティ名には、ARM JSON で使用される camelCase や PascalCase ではなく、snake_case を使用します。
# main.tf — create a resource group and storage account
resource 'azurerm_resource_group' 'main' {
name = var.resource_group_name
location = var.location
}
resource 'azurerm_storage_account' 'storage' {
name = 'mystorageaccount'
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = 'Standard'
account_replication_type = 'LRS'
tags = {
environment = 'dev'
}
}Terraform のワークフロー: Init、Plan、Apply
Terraform の基本的なワークフローは 3 つの手順で構成されます。terraform init は AzureRM provider をダウンロードし、バックエンドを設定します。terraform plan は構成と現在の状態を比較し、作成、変更、または削除される内容の差分を表示します。これは ARM の what-if に似ています。terraform apply は plan を実行し、構成と一致するように Azure を更新します。
# Step 1: Initialise the project and download providers
terraform init
# Step 2: Preview changes (shows + create, ~ update, - destroy)
terraform plan -out=tfplan
# Step 3: Apply the plan
terraform apply tfplan
# Destroy all managed resources
terraform destroyTerraform の状態
Terraform は状態ファイル(terraform.tfstate)を管理し、管理対象のすべてのリソースの現在の状態を記録して構成に関連付けます。このファイルにより、Terraform は構成された内容と Azure に実際に存在する内容のドリフトを検出できます。チーム環境では、すべてのチームメンバーが同じ状態ファイルを共有できるよう、状態をAzure Storage Account(Terraform バックエンド)にリモートで保存します。
# Configure remote state in Azure Blob Storage
terraform {
backend 'azurerm' {
resource_group_name = 'tfstate-rg'
storage_account_name = 'tfstateaccount'
container_name = 'tfstate'
key = 'prod.terraform.tfstate'
}
}Terraform から Azure への認証
Terraform は Azure に対して複数の認証方法をサポートしています。ローカル開発では az login(Azure CLI 認証)を使用すると、Terraform が認証情報を自動的に取得します。CI/CD パイプラインでは、クライアント シークレットまたは証明書を使用するService Principalを環境変数経由で渡します。Azure でホストされるエージェントや VM では、シークレットを必要としない最も安全な認証方法としてManaged Identityを使用します。
# Option 1: Azure CLI (local dev)
az login
terraform plan
# Option 2: Service principal via environment variables
export ARM_CLIENT_ID='00000000-0000-0000-0000-000000000000'
export ARM_CLIENT_SECRET='your-client-secret'
export ARM_SUBSCRIPTION_ID='00000000-0000-0000-0000-000000000000'
export ARM_TENANT_ID='00000000-0000-0000-0000-000000000000'
terraform plan再利用のための Terraform モジュール
Bicep モジュールと同様に、Terraform モジュールを使用すると、インフラストラクチャのパターンをパッケージ化して再利用できます。モジュールは .tf ファイルを含むディレクトリです。module ブロックで参照し、variables を介して入力を渡し、出力を利用します。Terraform Registryには、AzureRM ネットワークモジュールなど、直接使用できるコミュニティ製および検証済みの Azure モジュールが数百個登録されています。
# Use a module from the Terraform Registry
module 'vnet' {
source = 'Azure/vnet/azurerm'
version = '4.0.0'
resource_group_name = azurerm_resource_group.main.name
vnet_location = azurerm_resource_group.main.location
use_for_each = true
address_space = ['10.0.0.0/16']
subnet_prefixes = ['10.0.1.0/24', '10.0.2.0/24']
subnet_names = ['web', 'app']
}Terraform と Bicep の選択基準
組織が Azure のみを使用し、新しい Azure 機能との緊密な統合を最優先する場合は Bicep を選択します(Bicep は新しいリソース型を初日からサポートします)。複数のクラウドプロバイダーにまたがってリソースを管理する場合、コミュニティモジュールの大規模なエコシステムが必要な場合、または HCL 構文と HashiCorp ツールチェーンを好む場合は Terraform を選択します。Azure 専用のデプロイではどちらも適切であり、組織の好みで決まることが多いです。
既存リソースのインポート
Terraform の使用を開始する前から Azure に存在していたリソースは、terraform import を使用して Terraform の管理下に取り込めます。このコマンドはリソースの現在の状態を取得し、Terraform の状態ファイルに追加します。インポート後は、インポートしたリソースに一致する対応する構成ブロックを手動で記述し、terraform plan を実行して差分がないことを確認する必要があります。
# Import an existing resource group into Terraform state
terraform import \
azurerm_resource_group.main \
'/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/existing-rg'
# Terraform 1.5+ supports import blocks in configuration
import {
to = azurerm_resource_group.main
id = '/subscriptions/00000000.../resourceGroups/existing-rg'
}Azure での Terraform のベストプラクティス
Azure で Terraform を使用する際は、次のベストプラクティスに従います。状態ロックを有効にした Azure Blob Storage に状態をリモートで保存する、環境ごとにワークスペースまたは個別の状態ファイルを使用する、ソース管理にシークレットを決してコミットしない(代わりに Azure Key Vault のデータソースを使用する)、破壊的変更を避けるためprovider のバージョンを固定する、そして plan の承認ゲートを設けた CI/CD パイプライン(Azure Pipelines または GitHub Actions)でTerraform を実行することです。
クイックチェック
このレッスンで扱った Microsoft Azure Fundamentals (AZ-900) の概念について、理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、Terraformが AzureRM provider を使用して Azure リソースを管理するクラウド非依存の IaC ツールであること、init、plan、apply のワークフローによって安全で予測可能なデプロイを実現できること、そして Azure Blob Storage のリモート状態がチームでの共同作業に不可欠であることを学びました。次は App Service プランと Web Apps の作成について説明します。
よくある質問
「Azure での Terraform」レッスンは無料ですか?
はい。「Azure での Terraform」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
「Azure での Terraform」で何を学びますか?
AzureRM Terraform provider を構成し、基本的なインフラストラクチャ計画を記述して、ネイティブの ARM/Bicep ツールより Terraform を選ぶべき状況を理解します。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cloud & IT Cert Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「Azure での Terraform」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?
はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Azure Resource Manager の仕組み
- ARM テンプレートの作成
- Bicep:最新の Azure IaC
- Azure での Terraform