awesome-hacks
Docs

Terraformリソース定義のパラメータ一覧

backup_retention_days・storage_mb・sku_name など、Terraformでよく登場するリソース定義パラメータの意味と使い方をまとめる。DB・Redis・Blob Storageを対象とする

最終更新:2026/06/05

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.name

tags

リソースに付与するキーバリュー形式のラベル。課金レポートやリソース検索に使う。

項目内容
map(string)
必須
変更時インプレース更新
tags = {
  environment = "production"
  team        = "backend"
  project     = "myapp"
}

スペック系

sku_name

SKU(Stock Keeping Unit)= サービスの料金プランやスペックを表す文字列。 DBサーバーであればCPUコア数・メモリ量・ティアが含まれる。

項目内容
string
必須◯(リソースによる)
変更時インプレース更新(ダウンタイムが発生する場合あり)

PostgreSQL Flexible Serverの例:

ティアvCores用途
B_Standard_B1msBurstable1開発・検証
GP_Standard_D2s_v3General Purpose2一般的な本番
GP_Standard_D4s_v3General Purpose4トラフィックが多い本番
MO_Standard_E4s_v3Memory Optimized4メモリ集約型
sku_name = "GP_Standard_D2s_v3"

storage_mb

割り当てるストレージの容量をMB単位で指定する。

項目内容
number
必須✗(デフォルト値あり)
変更時インプレース更新(縮小は不可)
storage_mb = 32768  # 32 GB

よく使う値の目安:

容量
3276832 GB
6553664 GB
131072128 GB
262144256 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"

adminrootpostgres などの予約語は使えないリソースがある。


administrator_password

管理者パスワード。ソースコードに直書きせず、varazurerm_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メモリ
0250 MB
11 GB
22.5 GB
36 GB
413 GB
526 GB
653 GB
capacity = 1

redis_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_policystringメモリ上限到達時のキー削除ポリシー
maxmemory_reservednumberキャッシュ以外に予約するメモリ(MB)
maxfragmentationmemory_reservednumberフラグメント対策の予約メモリ(MB)
notify_keyspace_eventsstringKeyspace通知の設定文字列
enable_authenticationboolアクセスキー認証の有効化(Premiumのみ)

maxmemory_policy の選択肢:

動作
noeviction削除しない(書き込みエラーを返す)
allkeys-lru全キーからLRUで削除(汎用キャッシュ向き)
volatile-lruTTL付きキーのみLRUで削除
allkeys-lfu全キーから使用頻度が低い順に削除
volatile-ttlTTLが最も短いキーから削除
redis_configuration {
  maxmemory_policy             = "allkeys-lru"
  maxmemory_reserved           = 50
  maxfragmentationmemory_reserved = 50
}

patch_schedule ブロック

メンテナンス(パッチ適用)ウィンドウの設定。

パラメータ意味
day_of_weekstring曜日(例: "Sunday"
start_hour_utcnumber開始時刻(UTC、0〜23)
maintenance_windowstringウィンドウ幅(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
必須
変更時再作成が必要
概要
StandardHDDベース。汎用。コスト重視
PremiumSSDベース。低レイテンシ・高スループット
account_tier = "Standard"

account_replication_type

データの冗長化方式。可用性とコストのトレードオフ。

項目内容
string
必須
変更時インプレース更新(一部の組み合わせは再作成)
正式名称概要
LRSLocally Redundant Storage同一データセンター内に3コピー。最安値
ZRSZone Redundant Storage同一リージョンの3ゾーンに分散
GRSGeo Redundant Storage別リージョンにも非同期複製
RAGRSRead-Access GRSGRS+セカンダリリージョンへの読み取りアクセス
GZRSGeo-Zone Redundant StorageZRS+別リージョン複製
RAGZRSRead-Access GZRSGZRS+セカンダリへの読み取りアクセス
account_replication_type = "ZRS"  # 本番推奨

account_kind

ストレージアカウントの種類。

項目内容
string
必須✗(デフォルト: StorageV2
変更時再作成が必要
用途
StorageV2汎用v2。Blobを含む全サービスに対応。通常はこれを使う
BlobStorageBlobのみ。Hot/Coolティア指定が必要
BlockBlobStorageブロックBlobに特化。Premium対応
FileStorageAzure 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 = true

min_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_enabledboolBlobのバージョン管理を有効化
change_feed_enabledbool変更ログ(変更フィード)を有効化
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_actionstringルール未マッチ時の動作(Allow or Deny
bypasslist(string)制限をバイパスするAzureサービス
ip_ruleslist(string)許可するIPアドレス(CIDR形式)
virtual_network_subnet_idslist(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_availabilitydynamic ブロックで制御本番のみ有効化し、開発コストを削減
db_passwordsensitive = trueterraform 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_rulesdefault_action = "Deny"本番はVNet内からのみアクセスを許可

参考文献

Terraform Registry(azurerm プロバイダー)

Microsoft Learn(Azure 公式ドキュメント)