如何创建 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 个字符。