尝试放入数据时,Aplakka scala s3连接器挂起

问题描述

我正在尝试使用简单的字符串处理放入桶中的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。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...