【小ネタ】TerraformでS3バケット名に悩みたくない
おばんです!コンサル部の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検証時に何度もリソース再作成するので、こういった機能があるのは嬉しいですね。
この記事が、どなたかのお役に立てば幸いです。それでは!