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