问题描述
我正在尝试使用简单的字符串处理放入桶中的aws s3,我无法使用alpakka(scala)执行此操作,但是我可以使用aws java sdk处理相同的请求
使用alpakka,我的线程挂起,未处理任何内容,Future.onComplete未触发
我试图像这样指定aplakka conf文件(“ *”标记覆盖敏感数据):
alpakka.s3 {
aws {
credentials {
provider = static
access-key-id = "********"
secret-access-key = "********"
}
region {
provider = static
default-region = "*****"
}
}
}
我的机器上确实有〜/ .aws / credentials,我可以同时连接aws sdk和aws cli
据我所知,我可能根本不指定任何apakka.s3凭据,例如在AWS Java SDK中
我已经检查了这篇文章https://discuss.lightbend.com/t/alpakka-s3-connection-issue/6551/2无效
我的示例是docs中的scalghforward scala代码:
val file: Source[ByteString,NotUsed] =
Source.single(ByteString(body))
val s3Sink: Sink[ByteString,Future[MultipartUploadResult]] =
S3.multipartUpload(bucket,bucketKey)
val result: Future[MultipartUploadResult] =
file.runWith(s3Sink)
但实际上我也需要将Source用作InputStream
val source: Source[ByteString,Future[IOResult]] = StreamConverters.fromInputStream(() => is,4096)
PS:实际上我不明白为什么我需要像这样指定一些主机:endpoint-url = "http://localhost:9000"
解决方法
如果您将alpakka.s3.aws
留空,它将使用默认的AWS配置方法,如CLI中一样(例如,您可以使用AWS_REGION
环境变量来设置区域和标准AWS凭证文件) 。您也可以将alpakka.s3.aws.credentials
留空以使用默认的AWS凭证方法,并通过以下方式设置AWS区域
alpakka.s3 {
aws {
region {
provider = static
default-region = "us-east-1"
}
}
}
endpoint-url
仅用于S3 API的替代(非AWS)实现(例如minio)。如果要进行设置,则将无法连接到AWS S3。