EC2到S3上传错误区域

EC2 to S3 Upload Wrong Region

我正在尝试将文件从 US-EAST-1 中的 EC2 实例上传到 US-EAST-1 中的 S3 存储桶,但是当我使用 Java SDK 但使用 Scala 时:

//create AWS credentials class\
  val credentials = new BasicAWSCredentials(accessKey, secretKey)
  //Create connection to S3
  val conn = new AmazonS3Client(credentials)

并尝试将我的文件放入:

conn.putObject(bucket, sourceSystems(i) + "/" + fileName, fileToUpload)

我收到以下错误:

INFO: Unable to execute HTTP request: Connect to s3-us-west-1.amazonaws.com:443 [s3-us-west-1.amazonaws.com/xxxxxxxxx] failed: connect timed out
org.apache.http.conn.ConnectTimeoutException: Connect to s3-us-west-1.amazonaws.com:443 [s3-us-west-1.amazonaws.com/xxxxxxxx] failed: connect timed out

为什么当 EC2 实例位于 US-EAST-1 时默认尝试加载到 US-WEST-1

地区us-east-1为默认地区。如果它正在尝试连接到 us-west-1,那么您已经更改了默认区域设置。由于您没有在代码中显示正在设置的区域,我假设它是通过 ~/.aws 中的配置文件或通过环境变量设置的。

您可以阅读有关 AWS SDK 配置设置的信息 here

我在从 aws-java-sdk:1.10.46 升级到 aws-java-sdk:1.11.49 时看到了这种行为。

请注意,我们明确没有在 java 代码或 ~/.aws 目录中配置区域。而我们是运行一个没有userhome目录的用户下的进程。

此外,我完全不同意 us-east-1 是 java sdk 的默认区域。我建议它实际上是 us-west-1,如下所示:

https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/AmazonS3Client.java#L4466