【问题标题】:S3 Bucket Naming IssueS3 存储桶命名问题
【发布时间】:2014-06-07 22:39:55
【问题描述】:

尝试将文件上传到 S3 时,我遇到了一些奇怪的行为。我正在使用 Symfony2 Bundle,它只是 AWS SDK 版本 1 的包装器。

首先,如果我运行以下代码,它会在 S3 中创建一个存储桶并成功将文件上传到其中。

$s3 = $this->container->get('aws_s3');
    $s3->createBucket('my.first.test.bucket', 's3-eu-west-1.amazonaws.com');
    $response = $s3->createObject('my.first.test.bucket', 'test1.txt', array(
        'body' => 'This is my body text.'
    ));
    var_dump($response);

如果我随后将文件名更改为“test2.txt”并重新运行,这也会成功地将文件上传到存储桶,而无需创建具有相同名称的新存储桶。但是,如果我尝试注释掉 createBucket 行,我会在响应中收到以下消息;

"The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint."

它在响应中给我的端点是my.first.test.bucket.s3.amazonaws.com,但如果我尝试这个,我会得到一个The specified bucket does not exist 错误。创建存储桶时,我尝试使用特定区域,因此我将端点更改为my.first.test.bucket.s3-eu-west-1.amazonaws.com,但我得到了相同的错误,表明存储桶不存在。我不认为这是一个命名问题,因为它们符合 AWS 建议的 DNS 命名约定。

就好像我的用户有权创建存储桶,但我正在创建存储桶而我的用户没有适当的权限。虽然我的 IAM 用户可以通过以下配置文件策略完全访问 S3,但我看不出哪里出错了

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

我什至尝试在 S3 中手动创建存储桶并添加存储桶策略以授予访问权限,但我尝试的每个端点都会导致相同的存储桶未找到错误。

这一次,我真的希望我犯了一个愚蠢的错误。有什么想法吗?

编辑:我没有为静态网站托管设置存储桶,所以我不需要端点 s3-website-eu-west-1.amazonaws.com,但以防万一我也尝试过同样的结果。

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

    不总是这样吗?在你提出问题后,你挣扎了一天,然后一个小时,你自己找到了答案。

    如果经过一番挖掘后对其他人有帮助,我意识到 createBucket 方法正在设置服务中的区域,这就是为什么后续方法仅在同时创建存储桶时才有效的原因。解决方法是先设置区域,然后自己正确映射端点。

    $s3 = $this->container->get('aws_s3');
    $s3->setRegion('s3-eu-west-1.amazonaws.com');
    $response = $s3->createObject('my.pre.existing.bucket', 'test2.txt', array(
        'body' => 'This is my body text.'
    ));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 2021-05-13
      • 2018-09-11
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多