TerraformでAmazon S3のアカウントリージョナル名前空間バケットを作成してみた
Terraform AWS Provider v6.37.0で、Amazon S3のアカウントリージョナル名前空間バケットをサポートするbucket_namespace引数が追加されました。
Terraform経由でもアカウントリージョナル名前空間バケットが作成できるようになりました。
今回は、Terraformでアカウントリージョナル名前空間バケットを作成してみます。
アカウントリージョナル名前空間バケットとは
バケット名にAWSアカウントIDとリージョンを含めることで、名前の衝突を避けやすくする機能です。詳細は以下をご参照ください。
Terraform AWS Provider v6.37.0での対応
Terraform AWS Provider v6.37.0で、aws_s3_bucketリソースにbucket_namespace引数が追加されました。
やってみた
Terraformコード
以下のコードでアカウントリージョナル名前空間バケットを作成します。
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 6.37"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
data "aws_caller_identity" "current" {}
data "aws_region" "current" {}
resource "aws_s3_bucket" "example" {
bucket = format("my-bucket-%s-%s-an", data.aws_caller_identity.current.account_id, data.aws_region.current.id)
bucket_namespace = "account-regional"
}
output "bucket_name" {
value = aws_s3_bucket.example.bucket
}
bucketにはアカウントリージョナル形式の完全なバケット名({プレフィックス}-{AWSアカウントID}-{リージョン}-an)を指定します。data.aws_caller_identityとdata.aws_regionでアカウントIDとリージョンを動的に取得し、format()で組み立てることで、コードを環境に依存しない形で記述できます。
bucket_namespace = "account-regional"を指定しないと、バケット名がアカウントリージョナル形式であってもバリデーションエラーになるため、忘れずに設定します。
bucket_prefixを使う場合はプレフィックス長に注意
bucketの代わりにbucket_prefixを使うこともできますが、注意が必要です。
bucket_prefixを指定すると、Terraformが独自の26文字のランダムサフィックスを付与した上に、アカウントリージョナルのサフィックスも付きます。東京リージョン(ap-northeast-1)の場合、ランダムサフィックス以降の固定部分だけで57文字となるため、bucket_prefixに指定できるのは最大6文字です。
{bucket_prefix(最大6文字)}{26文字のランダム文字列}-{アカウントID}-{リージョン}-an
例: test20260319063449180600000001-123456789012-ap-northeast-1-an(61文字)
プレフィックスが7文字以上になると63文字を超えてエラーになります。
Error: validating S3 Bucket (my-bucket20260319062107978900000001-123456789012-ap-northeast-1-an) name:
"my-bucket20260319062107978900000001-123456789012-ap-northeast-1-an" must contain from 3 to 63 characters
プレフィックスの制約が厳しいため、bucket + format()で完全なバケット名を組み立てる方法を推奨します。
Terraform実行
terraform init
terraform apply
実行結果:
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Outputs:
bucket_name = "my-bucket-123456789012-ap-northeast-1-an"
{プレフィックス}-{AWSアカウントID}-{リージョン}-anの形式でバケットが作成されていることを確認できます。
バケットの確認
マネジメントコンソールのS3画面でも確認できます。バケット一覧に名前空間の列が追加されており、Account regionalと表示されます。
まとめ
Terraform AWS Provider v6.37.0で追加されたbucket_namespace引数を使って、アカウントリージョナル名前空間バケットを作成しました。
bucketにはアカウントリージョナル形式の完全なバケット名を指定する必要があります。data.aws_caller_identityでアカウントIDを動的に取得して組み立てることで、環境に依存しない形で記述できます。
S3バケット名の競合が気になる場面で活用できそうです。






