【问题标题】:delete an empty S3 bucket using `deleteBucket` method using Java使用 Java 的“deleteBucket”方法删除一个空的 S3 存储桶
【发布时间】:2023-05-16 08:05:02
【问题描述】:

我正在尝试检查存储桶是否存在,如果存在则将其删除,如果不存在则抛出错误。

使用AmazonClientBuilder 类,我使用doesBucketExist 方法检查存储桶是否存在,并使用deleteBucket 方法删除该存储桶(如果存在)。如果它不存在,那么说明它。

注意:我已确保我拥有对存储桶执行所有操作的完全访问权限。

但是当我运行代码时,输​​出只显示存储桶名称,但不显示它是否被删除。为了验证bucket是否被删除,我正在做一个System.out.println,以便在屏幕上显示bucket被删除。

import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.AmazonS3Exception;

public class DeleteBucket
{
    private static String bucketName = "mycalibucket1";
    public static void main(String[] args) 
    {
        AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                 .withRegion(Regions.US_WEST_2)
                 .build();

        try
        {
            if(s3Client.doesBucketExist(bucketName))
        {
            System.out.printf("\n",bucketName," exists");
            s3Client.deleteBucket(bucketName);
            System.out.println("----------------------------------------------");
            System.out.printf("\n",bucketName," is deleted.");
            }
        }
        catch(AmazonS3Exception e)
        {
            System.out.printf(bucketName," does not exist.");
            System.exit(1);
        }
    }
}

输出:

mycalibucket1

有人可以帮帮我吗?

【问题讨论】:

  • 请使用 log4j/slf4j 的记录器,而不是这样输出的可读性更好

标签: java amazon-web-services amazon-s3 bucket


【解决方案1】:

如果您没有到达第 2 条和第 3 条打印语句,您的代码必须抛出 AmazonS3Exception 以外的异常。

查看 APi javadoc,http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3.html#deleteBucket-java.lang.String-

看起来您正在调用的 deleteBucket 方法可能会引发 2 个不同的运行时异常,它们都不是从 AmazonS3Exception 派生的。尝试捕获 com.amazonaws.AmazonClientException ,这看起来对两者都很常见。看看这告诉你什么,你也许能够找出导致问题的原因。

文档还指出,存储桶必须为空才能删除。

【讨论】: