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