kakakakakku blog

Weekly Tech Blog: Keep Learning!

Terraform AWS Provider v6.31.0 で追加された aws_account_regions データソースを試す

2026年2月4日にリリースされた Terraform AWS Provider v6.31.0 で新しく aws_account_regions データソースが追加されていた👌気になって試してみることにした.

一言で言うと「AWS Organizations のメンバーアカウントで有効化されているリージョン情報」を取得できる.メンバーアカウントの複数リージョンに対して一括でリソースをデプロイするような用途で使えそう!?あとは無効化されているリージョンにデプロイしないように制御する用途でも使えそう.

github.com

👾 data.tf

以下のように実装してみた.まずは aws_organizations_organization データソースで AWS Organizations を参照しつつ,aws_account_regions データソースと組み合わせてメンバーアカウントで有効化されているリージョンを取得している.

region_opt_status_contains には以下の5種類のステータスを指定することができる.

  • ENABLED
  • ENABLING
  • DISABLING
  • DISABLED
  • ENABLED_BY_DEFAULT

今回は ENABLED_BY_DEFAULTENABLED にした.

data "aws_organizations_organization" "main" {}

data "aws_account_regions" "members" {
  for_each = { for account in data.aws_organizations_organization.main.non_master_accounts : account.id => account }

  account_id = each.key

  region_opt_status_contains = [
    "ENABLED_BY_DEFAULT",
    "ENABLED",
  ]
}

👾 outputs.tf

今回は aws_account_regions データソースで取得できる値を確認するために outputs.tf でそのまま出力した👌

output "member_regions" {
  value = { for k, v in data.aws_account_regions.members : k => v.regions }
}

メンバーアカウントの準備

今回は以下のように「デフォルトのリージョン」17個と「アジアパシフィック (香港) - ap-east-1」を個別に有効化したメンバーアカウントを準備しておいた.

terraform plan

そして terraform plan を実行すると以下のようになった❗️

期待通りに有効化されているリージョン18個を取得できた.そして ap-east-1 のみ ENABLED ステータスになっていた👌

Changes to Outputs:
  + member_regions = {
      + "000000000000" = [
          + {
              + region_name       = "ap-east-1"
              + region_opt_status = "ENABLED"
            },
          + {
              + region_name       = "ap-northeast-1"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "ap-northeast-2"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "ap-northeast-3"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "ap-south-1"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "ap-southeast-1"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "ap-southeast-2"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "ca-central-1"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "eu-central-1"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "eu-north-1"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "eu-west-1"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "eu-west-2"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "eu-west-3"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "sa-east-1"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "us-east-1"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "us-east-2"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "us-west-1"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
          + {
              + region_name       = "us-west-2"
              + region_opt_status = "ENABLED_BY_DEFAULT"
            },
        ]
    }