Terraformリソース定義のパラメータ一覧
backup_retention_days・storage_mb・sku_name など、Terraformでよく登場するリソース定義パラメータの意味と使い方をまとめる。DB・Redis・Blob Storageを対象とする
TL;DR
sku_name:スペック・料金プランを表す文字列(例:GP_Standard_D2s_v3)storage_mb:割り当てるストレージ容量(MB単位)backup_retention_days:バックアップを何日間保持するかlocation:デプロイ先のリージョン(例:japaneast)resource_group_name:Azureのリソースをまとめるグループ名version:DBエンジンやランタイムのバージョンadministrator_login:管理者ユーザー名tags:リソースに付与するキーバリューのラベルsku_name+family+capacity:Redis のティア・世代・サイズを3つセットで指定maxmemory_policy:Redis のメモリが上限に達したときのキー削除ポリシーaccount_tier+account_replication_type:Blob Storage のパフォーマンス層と冗長構成access_tier:Blob Storage のアクセス頻度(Hot / Cool)
目的
Terraformでインフラを定義する際、resource ブロックには多数のパラメータが並ぶ。
それぞれが何を制御しているかを把握しておかないと、
- 本番と開発でスペックが意図せず同じになる
- バックアップ期間が短すぎてデータ消失リスクが生じる
- SKU名を間違えてコストが跳ね上がる
といった問題が起きやすい。
ここでは、Azureのazurermプロバイダーを中心に、よく登場するパラメータをカテゴリ別に整理する。
基本情報系
name
リソースの識別名。Azure上での表示名にもなる。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ◯ |
| 変更時 | 多くのリソースで再作成が必要 |
name = "myapp-db-server"名前変更はリソースの削除・再作成を伴うため、命名規則は最初に決めておくと良い。
location
リソースをデプロイするAzureのリージョン。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ◯ |
| 変更時 | 再作成が必要 |
location = "japaneast"代表的な値:
| 値 | リージョン |
|---|---|
japaneast | 東日本 |
japanwest | 西日本 |
eastus | 米国東部 |
westeurope | 西ヨーロッパ |
resource_group_name
このリソースを所属させるリソースグループの名前。azurerm_resource_group リソースで作成したグループ名を参照するのが一般的。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ◯ |
| 変更時 | 再作成が必要 |
resource_group_name = azurerm_resource_group.main.nametags
リソースに付与するキーバリュー形式のラベル。課金レポートやリソース検索に使う。
| 項目 | 内容 |
|---|---|
| 型 | map(string) |
| 必須 | ✗ |
| 変更時 | インプレース更新 |
tags = {
environment = "production"
team = "backend"
project = "myapp"
}スペック系
sku_name
SKU(Stock Keeping Unit)= サービスの料金プランやスペックを表す文字列。 DBサーバーであればCPUコア数・メモリ量・ティアが含まれる。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ◯(リソースによる) |
| 変更時 | インプレース更新(ダウンタイムが発生する場合あり) |
PostgreSQL Flexible Serverの例:
| 値 | ティア | vCores | 用途 |
|---|---|---|---|
B_Standard_B1ms | Burstable | 1 | 開発・検証 |
GP_Standard_D2s_v3 | General Purpose | 2 | 一般的な本番 |
GP_Standard_D4s_v3 | General Purpose | 4 | トラフィックが多い本番 |
MO_Standard_E4s_v3 | Memory Optimized | 4 | メモリ集約型 |
sku_name = "GP_Standard_D2s_v3"storage_mb
割り当てるストレージの容量をMB単位で指定する。
| 項目 | 内容 |
|---|---|
| 型 | number |
| 必須 | ✗(デフォルト値あり) |
| 変更時 | インプレース更新(縮小は不可) |
storage_mb = 32768 # 32 GBよく使う値の目安:
| 値 | 容量 |
|---|---|
32768 | 32 GB |
65536 | 64 GB |
131072 | 128 GB |
262144 | 256 GB |
一度増やすと縮小できないリソースが多いため、初期サイズは慎重に決める。
auto_grow_enabled
ストレージが上限に近づいたとき、自動で拡張するかどうか。
| 項目 | 内容 |
|---|---|
| 型 | bool |
| 必須 | ✗ |
| 変更時 | インプレース更新 |
auto_grow_enabled = true本番環境では true にしておくとディスクフルによるサービス停止を防げる。
バックアップ系
backup_retention_days
自動バックアップを何日間保持するか。期間を過ぎたバックアップは自動削除される。
| 項目 | 内容 |
|---|---|
| 型 | number |
| 必須 | ✗ |
| 取り得る値 | 7〜35(リソースによる) |
| 変更時 | インプレース更新 |
backup_retention_days = 14| 設定値 | 用途 |
|---|---|
7 | 最小値。開発・検証環境 |
14 | 一般的な本番 |
35 | 最大値。法令対応・長期トレース |
コスト(保持期間分のストレージ費用)と復元可能な過去の深さのバランスで決める。
geo_redundant_backup_enabled
バックアップを別リージョンにも複製するか。リージョン障害時に別リージョンへの復元が可能になる。
| 項目 | 内容 |
|---|---|
| 型 | bool |
| 必須 | ✗ |
| 変更時 | 再作成が必要(変更不可のリソースあり) |
geo_redundant_backup_enabled = true有効にするとストレージコストが増加する(約2倍)。BCP要件がある本番環境では有効化を検討する。
認証・接続系
administrator_login
DBサーバーの管理者ユーザー名。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ◯ |
| 変更時 | 再作成が必要 |
administrator_login = "adminuser"admin・root・postgres などの予約語は使えないリソースがある。
administrator_password
管理者パスワード。ソースコードに直書きせず、var や azurerm_key_vault_secret で渡すのが基本。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ◯(認証方式による) |
| 機密性 | sensitive = true を付けると出力から隠せる |
# 変数で受け取る場合
administrator_password = var.db_password
# 変数側で機密指定
variable "db_password" {
type = string
sensitive = true
}public_network_access_enabled
パブリックインターネットからの接続を許可するか。
| 項目 | 内容 |
|---|---|
| 型 | bool |
| 必須 | ✗ |
| 変更時 | インプレース更新 |
public_network_access_enabled = false本番環境では false にしてVNet内からのみ接続させるのが安全。
DBエンジン・バージョン系
version
DBエンジンやランタイムのバージョンを指定する。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ◯(リソースによる) |
| 変更時 | 再作成が必要 |
# PostgreSQL Flexible Server
version = "16"
# MySQL Flexible Server
version = "8.0.21"EOL(End of Life)に達したバージョンを指定するとエラーになるリソースもある。
高可用性系
high_availability
フェイルオーバー用のスタンバイを構成するブロック。有効化するとRPO/RTOが改善される。
| 項目 | 内容 |
|---|---|
| 型 | ブロック |
| 必須 | ✗ |
| 変更時 | インプレース更新 |
high_availability {
mode = "ZoneRedundant"
standby_availability_zone = "2"
}mode の値 | 意味 |
|---|---|
SameZone | 同一ゾーンにスタンバイ |
ZoneRedundant | 別ゾーンにスタンバイ(推奨) |
Redis (Azure Cache for Redis)
azurerm_redis_cache リソースに登場するパラメータ。DB系と違い、スペックは sku_name / family / capacity の3つをセットで指定する点が特徴的。
sku_name(Redis)
Redis のティア(料金・機能クラス)を指定する。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ◯ |
| 変更時 | 再作成が必要 |
| 値 | 概要 |
|---|---|
Basic | 単一ノード。SLAなし。開発・検証専用 |
Standard | プライマリ+レプリカの2ノード構成。SLAあり |
Premium | 高スループット・低レイテンシ。VNet統合・永続化・クラスタリング対応 |
sku_name = "Standard"family
SKUに対応するキャッシュファミリー。sku_name とセットで指定する。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ◯ |
| 取り得る値 | C(Basic/Standard)、P(Premium) |
family = "C"capacity
キャッシュのサイズ番号。family と組み合わせて実際のメモリ容量が決まる。
| 項目 | 内容 |
|---|---|
| 型 | number |
| 必須 | ◯ |
| 取り得る値 | C: 0〜6、P: 1〜5 |
C ファミリー(Basic / Standard)のサイズ対応:
capacity | メモリ |
|---|---|
0 | 250 MB |
1 | 1 GB |
2 | 2.5 GB |
3 | 6 GB |
4 | 13 GB |
5 | 26 GB |
6 | 53 GB |
capacity = 1redis_version
使用する Redis のメジャーバージョン。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ✗ |
| 取り得る値 | "4", "6" |
redis_version = "6"enable_non_ssl_port
非SSL接続用のポート(6379)を開放するか。デフォルトは false(SSLのみの6380)。
| 項目 | 内容 |
|---|---|
| 型 | bool |
| 必須 | ✗ |
| 変更時 | インプレース更新 |
enable_non_ssl_port = false本番環境では false のまま維持し、SSL(6380)のみ使用する。
minimum_tls_version
接続を許可する最低限のTLSバージョン。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ✗ |
| 取り得る値 | "1.0", "1.1", "1.2" |
minimum_tls_version = "1.2"redis_configuration ブロック
Redis の動作設定をまとめるネストブロック。
| パラメータ | 型 | 意味 |
|---|---|---|
maxmemory_policy | string | メモリ上限到達時のキー削除ポリシー |
maxmemory_reserved | number | キャッシュ以外に予約するメモリ(MB) |
maxfragmentationmemory_reserved | number | フラグメント対策の予約メモリ(MB) |
notify_keyspace_events | string | Keyspace通知の設定文字列 |
enable_authentication | bool | アクセスキー認証の有効化(Premiumのみ) |
maxmemory_policy の選択肢:
| 値 | 動作 |
|---|---|
noeviction | 削除しない(書き込みエラーを返す) |
allkeys-lru | 全キーからLRUで削除(汎用キャッシュ向き) |
volatile-lru | TTL付きキーのみLRUで削除 |
allkeys-lfu | 全キーから使用頻度が低い順に削除 |
volatile-ttl | TTLが最も短いキーから削除 |
redis_configuration {
maxmemory_policy = "allkeys-lru"
maxmemory_reserved = 50
maxfragmentationmemory_reserved = 50
}patch_schedule ブロック
メンテナンス(パッチ適用)ウィンドウの設定。
| パラメータ | 型 | 意味 |
|---|---|---|
day_of_week | string | 曜日(例: "Sunday") |
start_hour_utc | number | 開始時刻(UTC、0〜23) |
maintenance_window | string | ウィンドウ幅(ISO 8601形式、例: "PT5H") |
patch_schedule {
day_of_week = "Sunday"
start_hour_utc = 18 # UTC 18:00 = JST 03:00
}Blob Storage (Azure Storage Account)
azurerm_storage_account リソースに登場するパラメータ。ファイル・画像・ログなどのオブジェクトストレージとして使う。
account_tier
ストレージアカウントのパフォーマンスティア。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ◯ |
| 変更時 | 再作成が必要 |
| 値 | 概要 |
|---|---|
Standard | HDDベース。汎用。コスト重視 |
Premium | SSDベース。低レイテンシ・高スループット |
account_tier = "Standard"account_replication_type
データの冗長化方式。可用性とコストのトレードオフ。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ◯ |
| 変更時 | インプレース更新(一部の組み合わせは再作成) |
| 値 | 正式名称 | 概要 |
|---|---|---|
LRS | Locally Redundant Storage | 同一データセンター内に3コピー。最安値 |
ZRS | Zone Redundant Storage | 同一リージョンの3ゾーンに分散 |
GRS | Geo Redundant Storage | 別リージョンにも非同期複製 |
RAGRS | Read-Access GRS | GRS+セカンダリリージョンへの読み取りアクセス |
GZRS | Geo-Zone Redundant Storage | ZRS+別リージョン複製 |
RAGZRS | Read-Access GZRS | GZRS+セカンダリへの読み取りアクセス |
account_replication_type = "ZRS" # 本番推奨account_kind
ストレージアカウントの種類。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ✗(デフォルト: StorageV2) |
| 変更時 | 再作成が必要 |
| 値 | 用途 |
|---|---|
StorageV2 | 汎用v2。Blobを含む全サービスに対応。通常はこれを使う |
BlobStorage | Blobのみ。Hot/Coolティア指定が必要 |
BlockBlobStorage | ブロックBlobに特化。Premium対応 |
FileStorage | Azure Filesに特化。Premium対応 |
account_kind = "StorageV2"access_tier
Blobのアクセス頻度に応じた料金ティア。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ✗(BlobStorage 種類では必須) |
| 変更時 | インプレース更新 |
| 値 | 概要 | 向いている用途 |
|---|---|---|
Hot | アクセス頻度が高い。ストレージ単価は高め | ユーザー画像・アクティブデータ |
Cool | アクセス頻度が低い。ストレージ単価は安い | ログアーカイブ・バックアップ |
access_tier = "Hot"enable_https_traffic_only
HTTPS以外のトラフィックを拒否するか。
| 項目 | 内容 |
|---|---|
| 型 | bool |
| 必須 | ✗ |
| 変更時 | インプレース更新 |
enable_https_traffic_only = truemin_tls_version
許可するTLSの最低バージョン。
| 項目 | 内容 |
|---|---|
| 型 | string |
| 必須 | ✗ |
| 取り得る値 | "TLS1_0", "TLS1_1", "TLS1_2" |
min_tls_version = "TLS1_2"allow_nested_items_to_be_public
コンテナやBlobへの匿名パブリックアクセスを許可するか。
| 項目 | 内容 |
|---|---|
| 型 | bool |
| 必須 | ✗ |
| 変更時 | インプレース更新 |
allow_nested_items_to_be_public = falseパブリック公開が不要なシステムでは false を明示することで意図しない情報公開を防ぐ。
blob_properties ブロック
Blobの保護・バージョン管理の設定。
| パラメータ | 型 | 意味 |
|---|---|---|
versioning_enabled | bool | Blobのバージョン管理を有効化 |
change_feed_enabled | bool | 変更ログ(変更フィード)を有効化 |
delete_retention_policy | ブロック | Blob削除後の保持日数(ソフトデリート) |
container_delete_retention_policy | ブロック | コンテナ削除後の保持日数 |
blob_properties {
versioning_enabled = true
change_feed_enabled = true
delete_retention_policy {
days = 7
}
container_delete_retention_policy {
days = 7
}
}network_rules ブロック
ストレージアカウントへのネットワークアクセスを制限するブロック。
| パラメータ | 型 | 意味 |
|---|---|---|
default_action | string | ルール未マッチ時の動作(Allow or Deny) |
bypass | list(string) | 制限をバイパスするAzureサービス |
ip_rules | list(string) | 許可するIPアドレス(CIDR形式) |
virtual_network_subnet_ids | list(string) | 許可するサブネットのID |
network_rules {
default_action = "Deny"
bypass = ["AzureServices"]
ip_rules = ["203.0.113.0/24"]
virtual_network_subnet_ids = [azurerm_subnet.app.id]
}default_action = "Deny" にすると、明示的に許可したIP・サブネット以外はブロックされる。
サンプル: Azure PostgreSQL Flexible Server の全体定義
実際のリソース定義で上記パラメータがどう組み合わさるかの例。
resource "azurerm_postgresql_flexible_server" "main" {
# 基本情報
name = "myapp-db-${var.env}"
location = azurerm_resource_group.main.location
resource_group_name = azurerm_resource_group.main.name
# スペック
sku_name = var.env == "production" ? "GP_Standard_D4s_v3" : "B_Standard_B1ms"
storage_mb = 65536
version = "16"
# バックアップ
backup_retention_days = var.env == "production" ? 14 : 7
geo_redundant_backup_enabled = var.env == "production"
# 認証
administrator_login = "adminuser"
administrator_password = var.db_password
# ネットワーク
public_network_access_enabled = false
delegated_subnet_id = azurerm_subnet.db.id
private_dns_zone_id = azurerm_private_dns_zone.db.id
# 高可用性(本番のみ)
dynamic "high_availability" {
for_each = var.env == "production" ? [1] : []
content {
mode = "ZoneRedundant"
standby_availability_zone = "2"
}
}
tags = {
environment = var.env
managed_by = "terraform"
}
}
variable "env" {
type = string
default = "development"
}
variable "db_password" {
type = string
sensitive = true
}このサンプルのポイント
| 設計 | 理由 |
|---|---|
sku_name を環境変数で切り替え | 開発はBurstableで安く、本番はGeneral Purpose |
backup_retention_days を環境別に設定 | 開発は7日(最小)、本番は14日 |
geo_redundant_backup_enabled を本番のみ有効 | コストとリスク許容度のバランス |
public_network_access_enabled = false | 常にプライベート接続を強制 |
high_availability を dynamic ブロックで制御 | 本番のみ有効化し、開発コストを削減 |
db_password を sensitive = true | terraform output やログにパスワードが出ないようにする |
サンプル: Azure Cache for Redis の全体定義
resource "azurerm_redis_cache" "main" {
name = "myapp-redis-${var.env}"
location = azurerm_resource_group.main.location
resource_group_name = azurerm_resource_group.main.name
# スペック(3つセットで指定)
sku_name = var.env == "production" ? "Standard" : "Basic"
family = "C"
capacity = var.env == "production" ? 1 : 0 # 1 GB or 250 MB
redis_version = "6"
enable_non_ssl_port = false
minimum_tls_version = "1.2"
redis_configuration {
maxmemory_policy = "allkeys-lru"
maxmemory_reserved = 50
maxfragmentationmemory_reserved = 50
}
# メンテナンスウィンドウ(本番のみ)
dynamic "patch_schedule" {
for_each = var.env == "production" ? [1] : []
content {
day_of_week = "Sunday"
start_hour_utc = 18 # JST 03:00
}
}
tags = {
environment = var.env
managed_by = "terraform"
}
}このサンプルのポイント
| 設計 | 理由 |
|---|---|
sku_name を環境別に分ける | Basicは本番SLAなし。開発のみで使う |
capacity = 0(250MB)を開発に | 最小サイズでコストを抑える |
enable_non_ssl_port = false | 常に6380(SSL)のみ許可 |
maxmemory_policy = "allkeys-lru" | 汎用キャッシュの定番。TTLなしキーも削除対象にする |
maxmemory_reserved を設定 | 未設定だとメモリ圧迫時にパフォーマンス低下する |
サンプル: Azure Storage Account(Blob Storage)の全体定義
resource "azurerm_storage_account" "main" {
name = "myapp${var.env}storage"
location = azurerm_resource_group.main.location
resource_group_name = azurerm_resource_group.main.name
# スペック
account_tier = "Standard"
account_replication_type = var.env == "production" ? "ZRS" : "LRS"
account_kind = "StorageV2"
access_tier = "Hot"
# セキュリティ
enable_https_traffic_only = true
min_tls_version = "TLS1_2"
allow_nested_items_to_be_public = false
# Blob保護設定
blob_properties {
versioning_enabled = var.env == "production"
change_feed_enabled = var.env == "production"
delete_retention_policy {
days = var.env == "production" ? 14 : 7
}
container_delete_retention_policy {
days = var.env == "production" ? 14 : 7
}
}
# ネットワーク制限(本番のみ)
dynamic "network_rules" {
for_each = var.env == "production" ? [1] : []
content {
default_action = "Deny"
bypass = ["AzureServices"]
virtual_network_subnet_ids = [azurerm_subnet.app.id]
}
}
tags = {
environment = var.env
managed_by = "terraform"
}
}このサンプルのポイント
| 設計 | 理由 |
|---|---|
account_replication_type を環境別に切り替え | 開発はLRS(最安値)、本番はZRS(ゾーン冗長) |
allow_nested_items_to_be_public = false | 意図しないパブリック公開を防ぐ |
versioning_enabled を本番のみ有効 | バージョン管理はストレージコスト増につながるため本番限定 |
delete_retention_policy で14日保持 | 誤削除・ランサムウェア対策のソフトデリート |
network_rules で default_action = "Deny" | 本番はVNet内からのみアクセスを許可 |
参考文献
Terraform Registry(azurerm プロバイダー)
- azurerm_postgresql_flexible_server
- azurerm_mysql_flexible_server
- azurerm_redis_cache
- azurerm_storage_account
Microsoft Learn(Azure 公式ドキュメント)