amazon-web-services - AWS S3 java SDK : Can't create bucket

标签 amazon-web-services kotlin amazon-s3 minio

我尝试使用以下代码创建一个存储桶:

我使用的S3后端是minio

runCatching {
    bucket = configuration.getString("storage.bucket")
    s3Client = AmazonS3Client.builder()
        .withEndpointConfiguration(AwsClientBuilder.EndpointConfiguration("${configuration.getString("storage.endpoint")}:${configuration.getInt("storage.port")}", ""))
        .withCredentials(AWSStaticCredentialsProvider(BasicAWSCredentials(configuration.getString("storage    .credentials.accessKey"), configuration.getString("storage.credentials.accessToken"))))
        .withPayloadSigningEnabled(false)
        .withClientConfiguration(ClientConfiguration().withProtocol(if(configuration.getBoolean("storage.ssl")) { Protocol.HTTPS } else { Protocol.HTTP }))
        .build()
    s3Client.createBucket(CreateBucketRequest(bucket)) // Exception: com.amazonaws.SdkClientException: Unable to execute HTTP request: usercontent.localhost
                                                       // Exception: Caused by: java.net.UnknownHostException: usercontent.localhost

    }.onFailure {
        it.printStackTrace()
        exitProcess(0)
    }
}

为什么创建bucket会向usercontent.localhost发送请求? 如何创建存储桶?

最佳答案

您好,我遇到了完全相同的问题,解决方案非常简单。

您可以在本期中找到更多详细信息:https://github.com/localstack/localstack/issues/43

这是您的编码修复:

runCatching {
    bucket = configuration.getString("storage.bucket")
    s3Client = AmazonS3Client.builder()
        .withEndpointConfiguration(AwsClientBuilder.EndpointConfiguration("${configuration.getString("storage.endpoint")}:${configuration.getInt("storage.port")}", ""))
        .withCredentials(AWSStaticCredentialsProvider(BasicAWSCredentials(configuration.getString("storage    .credentials.accessKey"), configuration.getString("storage.credentials.accessToken"))))
        .withPayloadSigningEnabled(false)
        .withClientConfiguration(ClientConfiguration().withProtocol(if(configuration.getBoolean("storage.ssl")) { Protocol.HTTPS } else { Protocol.HTTP }))
        .withPathStyleAccessEnabled(true) // YOU HAVE TO ADD THIS
        .build()
    s3Client.createBucket(CreateBucketRequest(bucket)) // Exception: com.amazonaws.SdkClientException: Unable to execute HTTP request: usercontent.localhost
                                                       // Exception: Caused by: java.net.UnknownHostException: usercontent.localhost

    }.onFailure {
        it.printStackTrace()
        exitProcess(0)
    }
}

使用此选项,您可以避免在 dns (usercontent.localhost) 请求中使用存储桶名称,而是使用路径样式 (localhost/usercontent)。

关于amazon-web-services - AWS S3 java SDK : Can't create bucket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68233468/

相关文章:

amazon-web-services - 如何使用 boto3 将文件上传到 Amazon Glacier Deep Archive

android - 我无法将协程导入 kotlin 代码

amazon-web-services - 如何过滤来自 AWS CLI 命令的结果

amazon-web-services - k8s master前面的AWS负载均衡器

java - 如何在 Amazon SNS API (JAVA) 中使用 AuthenticateOnUnsubscribe 标志?

android - 使用 Kotlin 登录 Twitter

Android 访问 onCreate Activity 之外的 View 绑定(bind) val

c - AWS lib3s C/C++ 库示例代码/教程

Java AWS Amazon s3 GetObjectRequest (InvalidAccessKeyId)

node.js - 如何实现 Node.js 应用程序日志记录到 CloudWatch