我们有一个服务,它作为代理服务器将文件上传到s3 in out Kubernetes服务。
Golang上有控制台SDK应用程序,可以安装在Windows或MacOS下。
有一个令牌服务,用于检索临时AWS凭据(accessKey、secretKey、sessionToken)。
它的工作原理如下。
通过SDK,使用:
-
选择一个文件,
-
单击“提交”,
-
SDK应用程序正在从Token服务获取临时AWS凭据,
-
文件正在发送到代理服务(通过配置了临时凭据的AWS S3 SDK)
-
代理服务接收请求,进行一些日志记录,并将请求代理到S3。
是否可以使用Scala/Java AWS s3 SDK将PUTObject请求发送到代理服务主机名,而不是发送到s3.amazonaws.com?
我尝试过的:
lazy val proxyConf: ProxyConfiguration = ProxyConfiguration.builder()
.host("proxy-service-host")
.port(80)
.scheme("http")
.build()
lazy val httpClient: SdkAsyncHttpClient =
NettyNioAsyncHttpClient.builder()
.maxConcurrency(10)
.proxyConfiguration(proxyConf)
.build()
lazy val credentials = AwsSessionCredentials.create("accessKey", "secretKey", "sessionToken")
lazy val provider = StaticCredentialsProvider.create(credentials)
lazy val config = S3Configuration.builder()
.pathStyleAccessEnabled(true)
.build();
lazy val getAWSS3Client: S3AsyncClient = S3AsyncClient
.builder()
.serviceConfiguration(config)
.credentialsProvider(provider)
.httpClient(httpClient)
.region(Region.of(sys.env.getOrElse("AWS_REGION", "us-west-2")))
.build()
但是得到:
Could not connect to proxy
at software.amazon.awssdk.http.nio.netty.internal.ProxyTunnelInitHandler.channelRead(ProxyTunnelInitHandler.java:111)