バリデーション付きAWSリージョン変数を定義する
正規表現バリデーションで有効なAWSリージョンコードのみを受け入れるTerraformのAWSリージョン変数を作成します。
AWS Basics
詳細な説明
バリデーション付きAWSリージョン変数
最も一般的なTerraform変数の1つがAWSリージョンです。プロバイダブロックにリージョンをハードコードする代わりに、変数として定義することで、コードを変更せずに同じインフラストラクチャを異なるリージョンにデプロイできます。
変数定義
variable "aws_region" {
type = string
description = "The AWS region to deploy resources in"
default = "us-east-1"
validation {
condition = can(regex("^(us|eu|ap|sa|ca|me|af)-(north|south|east|west|central|southeast|northeast)-[0-9]+$", var.aws_region))
error_message = "Must be a valid AWS region (e.g., us-east-1, eu-west-2)."
}
}
tfvarsでの使用
aws_region = "eu-west-1"
ポイント
can(regex(...))パターンは正規表現がマッチすればtrueを、そうでなければfalseを返し、エラーを発生させません- 正規表現はすべてのAWSリージョン命名規則をカバー:大陸プレフィックス、方向、ゾーン番号
- デフォルト値(
us-east-1)により変数はオプション — 呼び出し元はオーバーライドできますが必須ではありません - このバリデーションにより、AWS APIコール時ではなく
terraform plan時にタイプミスを早期検出できます
一般的な代替手段
一部のチームは正規表現の代わりにcontains()を使用して、承認済みリージョンを明示的にリストする方法を好みます:
validation {
condition = contains(["us-east-1", "us-west-2", "eu-west-1", "eu-central-1"], var.aws_region)
error_message = "Only approved regions are allowed."
}
これはより厳格で、コンプライアンスのためにデプロイを特定のリージョンに制限する組織に適しています。
ユースケース
同じTerraform設定を環境間で異なるAWSリージョンにデプロイする必要があるマルチリージョンデプロイメント(devはus-east-1、prodはeu-west-1)。