我们的AWS声明进来了,我们注意到我们的请求数量增加了一倍。
第一个费用是Asia Pacific (Tokyo) (ap-东北-1),这很简单,因为它是我们的水桶所在。但还有一项针对US East (N. Virginia) (美东-1)的指控也有类似数量的请求。
长话短说,这似乎是因为我们使用的是命令,而且我们没有通过--region选项或任何一种后备方法指定区域。
输入aws configure list显示region: Value=<not set> Type=None Location=None。
然而,我们的aws s3命令成功了,尽管有了这个看似隐藏的电荷。假设,我们的请求首先会流向我们--东部--1,但由于这里没有我们指定的名称的桶,它掉头返回到ap-东北-1,在那里,它最终成功的同时,被计算了两次。
运行ec2命令的aws实例本身位于ap-东北-1中,如果这有任何意义的话。
所以问题是,上面的假设是否是对正在发生的事情的合理解释?(即是否预期的行为。)而且,在我看来,这似乎有点阴险,但这是否有适当的理由呢?
发布于 2019-02-04 04:01:39
你看到的是正确的。aws s3命令需要知道该区域,以便访问S3桶。
因为这还没有提供,所以它将向us-east-1发出请求,这实际上是默认的--请参阅AWS S3区域图以查看us-east-1不需要位置约束。
如果S3接收到一个不位于该区域的桶的请求,那么它将返回一个PermanentRedirect响应,并为桶返回正确的区域。AWS透明地处理这个问题,并使用包含该区域的正确端点重复请求。
查看此操作的最简单方法是在调试模式下运行命令:
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不假定该区域与调用的EC2实例相同,而是一个长期运行混乱/特性请求。
附加注意:并不是所有AWS服务都会以这种方式自动发现区域,如果没有设置区域,则会失败。S3之所以工作,是因为它使用的是全局名称空间,它本质上需要某种形式的发现服务。
https://stackoverflow.com/questions/54509725
复制相似问题