はじめに
S3のバケット名は全アカウントでユニークである必要があるため、既に存在しているバケット名ではバケットを作成できない。
$ aws s3 mb s3://dev
make_bucket failed: s3://dev An error occurred (BucketAlreadyExists) when calling the CreateBucket operation: 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.
対処方法
AWS Account IDのmd5ハッシュを利用する。
こうすればAWSアカウントが同一である限り、バケット名の恒久性とユニーク性が同時に確保できる。
# AWSCLIで取得したAccountIDのmd5ハッシュ文字列の先頭10文字を取得
$ backet_hash=$(echo -n $(aws sts get-caller-identity | jq -r .Account) | md5sum | cut -c 1-10)
取得したハッシュに必要に応じて日付や目的がわかる文字列を付加してバケット名にすればOK。
# ハッシュ値 + 現在日付(YYYYmmdd) + 「dev」のバケット名でS3バケット作成
$ aws s3 mb s3://${backet_hash}-$(date +%Y%m%d)-dev
make_bucket: 12345abcde-20190715-dev
バケット名にアンダースコア_
や大文字は利用できないので注意。
以上