AWS使用java API获取S3存储桶大小

kq0g1dla  于 2023-06-20  发布在  Java
关注(0)|答案(3)|浏览(197)

我已经在谷歌上搜索了关于有效的方法来获取有关S3桶的元数据,如它的大小和文件数量。我发现this链接讨论这样的问题。但它是用于使用cloud-watch的PHP和aws cli。我想知道是否有一些java api来获取s3存储桶元数据?
谢谢

7gcisfzg

7gcisfzg1#

您可以在此处找到AWS S3 Java库的详细文档:
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/overview-summary.html
回答你的问题,你可以使用getSize()来获取S3中对象的大小,你可以迭代所有的文件来获取你的bucket的大小。
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/S3ObjectSummary.html#getSize()
S3不支持直接收集磁盘使用情况(这意味着不遍历所有项),但您可以使用CloudWatch来获取您希望通过单个请求使用的数据。
示例查询:

aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2016-01-01T10:00:00 --end-time 2016-02-12T01:00:00 --period 86400 --statistics Average --region us-east-1 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=www.streambrightdata.com Name=StorageType,Value=StandardStorage

退货:

{
    "Datapoints": [
        {
            "Timestamp": "2016-02-05T10:00:00Z",
            "Average": 54027423.0,
            "Unit": "Bytes"
        },
        {
            "Timestamp": "2016-02-03T10:00:00Z",
            "Average": 52917504.0,
            "Unit": "Bytes"
        },
        {
            "Timestamp": "2016-02-04T10:00:00Z",
            "Average": 53417421.0,
            "Unit": "Bytes"
        },
        {
            "Timestamp": "2016-02-07T10:00:00Z",
            "Average": 54949563.0,
            "Unit": "Bytes"
        },
        {
            "Timestamp": "2016-02-01T10:00:00Z",
            "Average": 24951965.0,
            "Unit": "Bytes"
        },
        {
            "Timestamp": "2016-02-02T10:00:00Z",
            "Average": 28254636.0,
            "Unit": "Bytes"
        },
        {
            "Timestamp": "2016-02-06T10:00:00Z",
            "Average": 54577328.0,
            "Unit": "Bytes"
        }
    ],
    "Label": "BucketSizeBytes"
}

适用于CloudWatch的AWS Java SDK:
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/cloudwatch/AmazonCloudWatchClient.html

des4xlb0

des4xlb02#

使用awssdk Java2.x

Set<String> fileTypes = new HashSet<>();
    ListObjectsResponse listObjResp = amazonS3Client.listObjects(ListObjectsRequest.builder().bucket(bucketName).build());
    int iCount=1;
    //********************************************************************//
    log.info("listObjResp.isTruncated() : "+listObjResp.isTruncated());
    String nextMarker = null;
    do {
        String sKey = null;
        List<S3Object> s3ObjList = listObjResp.contents();
        for (S3Object s3Obj: s3ObjList) {
            sKey = s3Obj.key();
            String[] sKeyValues = sKey.split("\\.");
            if(sKeyValues.length==2) {
                fileTypes.add(sKeyValues[1]);
            }else {
                fileTypes.add(NO_FILE_EXT);
            }
            ++iCount;
        }
        nextMarker = listObjResp.nextMarker();
        log.debug("listObjResp.nextMarker() : "+nextMarker);
        listObjResp = amazonS3Client.listObjects(ListObjectsRequest.builder().bucket(bucketName).marker(nextMarker).build());
    } while (nextMarker !=null);
    
    log.info("iCount of '"+bucketName+"': "+(iCount-1));
vtwuwzda

vtwuwzda3#

您可以使用MinioAdminClient及其getDataUsageInfo()方法来获取所需的所有信息。
它可以通过这个link连接,并以与MinioClient相同的方式配置,通过在构建器而不是构造器的帮助下传递参数。

@Bean
public MinioClient minioClient(
        @Value("${aws.endPoint}") String endPoint,
        @Value("${aws.accessKey}") String accessKey,
        @Value("${aws.secretKey}") String secretKey) throws InvalidPortException, InvalidEndpointException {

    return new MinioClient(endPoint, accessKey, secretKey);
}

@Bean
public MinioAdminClient minioAdminClient(
        @Value("${aws.endPoint}") String endPoint,
        @Value("${aws.accessKey}") String accessKey,
        @Value("${aws.secretKey}") String secretKey){

    return MinioAdminClient
            .builder()
            .endpoint(endPoint)
            .credentials(accessKey, secretKey)
            .build();
}

链接到GitHub Repo中的文件:https://github.com/minio/minio-java/blob/master/adminapi/src/main/java/io/minio/admin/MinioAdminClient.java#L593

相关问题