如何创建 S3 存储桶以避免名称冲突
How to create S3 bucket to avoid name collisions
我正在尝试创建一个以编程方式创建 S3 存储桶的程序,但我 运行 遇到一个问题,如果名称已经创建,存储桶将失败,因为它是一个全局命名空间。
如何以编程方式 ensure/create 名称在 Java 中全局唯一?
您应该不断尝试创建存储桶,直到成功为止:
while True:
generate a UUID
try to create the bucket called 'foo-UUID'
if it worked:
break
例如,UUID 可以是 UUID.randomUUID()
的 4 个字符部分。使用与您的公司和用例相关的有用前缀。
对我来说,使用我的账户 ID 和 地区 作为存储桶名称的一部分,例如:my-bucket-1234567890-us-east-1
.
这比使用随机字符串更好,并且提供了相关且确定的信息。当然你也可以添加一些随机的:
int i = 0;
String bucketName;
do {
bucketName = myName + "-" accountId + "-" region + "-" + (++i);
} while (bucketExists(bucketName));
您可以使用 GetIdentityCaller()
获取帐户信息。
请注意,存储桶名称的长度限制为 63 个字符。
我正在尝试创建一个以编程方式创建 S3 存储桶的程序,但我 运行 遇到一个问题,如果名称已经创建,存储桶将失败,因为它是一个全局命名空间。
如何以编程方式 ensure/create 名称在 Java 中全局唯一?
您应该不断尝试创建存储桶,直到成功为止:
while True:
generate a UUID
try to create the bucket called 'foo-UUID'
if it worked:
break
例如,UUID 可以是 UUID.randomUUID()
的 4 个字符部分。使用与您的公司和用例相关的有用前缀。
对我来说,使用我的账户 ID 和 地区 作为存储桶名称的一部分,例如:my-bucket-1234567890-us-east-1
.
这比使用随机字符串更好,并且提供了相关且确定的信息。当然你也可以添加一些随机的:
int i = 0;
String bucketName;
do {
bucketName = myName + "-" accountId + "-" region + "-" + (++i);
} while (bucketExists(bucketName));
您可以使用 GetIdentityCaller()
获取帐户信息。
请注意,存储桶名称的长度限制为 63 个字符。