【小ネタ】TerraformでS3バケット名に悩みたくない

Terraformで、一意なS3バケット名を楽に作成したかったお話
2021.02.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

おばんです!コンサル部のinomaso(@inomasosan)です。

S3を作成する際にバケット名をユニークにしなきゃいけないのですが、Terraformで簡単な検証時でも都度考えるのは面倒だなと感じていました。
今回は別件の検証をした際に、この悩みが解消されそうなことが分かったので、簡単にまとめてみました。

この記事で学べること

  • S3バケット命名規則
  • Terraformでのコードの書き方

環境

今回実行した環境は以下の通りです。

  • macOS Catalina 10.15.7
  • Terraform 0.14.7
  • AWSプロバイダー 3.30.0

S3バケット命名規則

S3バケット名は、AWSアカウントやリージョンにかかわらず、グローバルに一意なバケット名にしなければなりません。
例えばTerraformで、testというバケット名を作成すると、既に存在していると怒られてしまいます。

1.コード

resource "aws_s3_bucket" "test" {
  bucket = "test"
  acl    = "private"
}

2.結果

Error: Error creating S3 bucket: BucketAlreadyExists: The requested bucket name is not available.
The bucket namespace is shared by all users of the system. Please select a different name and try again.

コード改善

bucketをコメントアウトにします。

resource "aws_s3_bucket" "test" {
  # bucket = "test"
  acl    = "private"

}

実はバケット名は必須ではありません。
指定しなかった場合は、ランダムな名前になります。
Terraformのaws_s3_bucketドキュメントにも、以下のように記載されています。

bucket - (Optional, Forces new resource) The name of the bucket. If omitted, Terraform will assign a random, unique name. Must be less than or equal to 63 characters in length.

確認してみる

AWSマネージメントコンソールで、S3バケット名がランダムな名前になっていることが確認できました。

まとめ

Terraform検証時に何度もリソース再作成するので、こういった機能があるのは嬉しいですね。
この記事が、どなたかのお役に立てば幸いです。それでは!