AWS S3:放入ap-northeast-1时对us-east-1额外收费

时间:2019-02-04 03:08:11

标签: amazon-s3 aws-cli

我们的AWS语句出现了,我们注意到我们为请求数量加倍收费。

第一次充电是为Asia Pacific (Tokyo) ap-northeast-1 )进行的,这很简单,因为它是我们存储桶所在的位置。但是,对US East (N. Virginia) us-east-1 )的另一个要求是类似的要求。

长话短说,这似乎是因为我们正在使用aws s3 command而没有通过--region选项或any of the fallback methods指定区域。

键入aws configure list会显示region: Value=<not set> Type=None Location=None

尽管有这种看似隐藏的指控,但我们的aws s3命令还是成功的。假设是,我们的请求首先到达 us-east-1 ,但是由于那里没有我们指定的名称的存储桶,因此它会转回并返回 ap-northeast -1 ,它最终会成功,但要获得两次记帐。

运行aws命令的ec2实例本身就在 ap-northeast-1 中。

因此,问题是,上述假设是否合理地说明了正在发生的事情? (即,这是否是预期的行为。)而且,这对我来说似乎有点阴险,但是否有适当的理由?

1 个答案:

答案 0 :(得分:2)

您所看到的是正确的。 aws s3命令需要知道区域才能访问S3存储桶。

由于未提供此请求,它将向us-east-1发出请求,这实际上是默认请求-请参见AWS S3 region chart以了解us-east-1不需要位置限制。

如果S3收到对不在该区域中的存储桶的请求,则它将返回PermanentRedirect响应,其中包含该存储桶的正确区域。 AWS CLI透明地处理此问题,并使用包含该区域的正确端点重复该请求。

查看此操作最简单的方法是在调试模式下运行命令:

aws s3 ls ap-northeast-1-bucket --debug

输出将包括:

DEBUG - Response body:
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>PermanentRedirect</Code><Message>The bucket you are attempting to access 
must be addressed using the specified endpoint. Please send all future requests to 
this endpoint.</Message>
<Endpoint>ap-northeast-1-bucket.s3.ap-northeast-1.amazonaws.com</Endpoint>
<Bucket>ap-northeast-1</Bucket> 
<RequestId>3C4FED2EFFF915E9</RequestId><HostId>...</HostId></Error>

AWS CLI不假定Region与调用EC2实例相同,而是long running confusion/feature request

其他说明:并非所有的AWS服务都将以此方式自动发现区域,如果未设置“区域”,则将失败。 S3之所以起作用,是因为它使用了固有需要某种形式的发现服务的全局命名空间。