【问题标题】:Set proper endpoint in for S3 Client in Amazon AWS PHP SDK在 Amazon AWS PHP SDK 中为 S3 客户端设置正确的端点
【发布时间】:2013-11-15 01:52:31
【问题描述】:

我正在尝试使用适用于 PHP 的 AWS 开发工具包以编程方式将文件上传到在 S3 控制台中设置为静态网站的存储桶。

存储桶名为 foo.ourdomain.com,托管在 eu-west。我正在使用以下代码来尝试测试是否可以上传文件:

  $client = \Aws\S3\S3Client::factory(array('key' => bla, 'secret' => bla));
  $client->upload('foo.ourdomain.com', 'test.txt', 'hello world', 'public-read');

这与示例中的情况非常相似,但是,我收到了以下异常:

PHP 致命错误:未捕获 Aws\S3\Exception\PermanentRedirectException:AWS 错误代码:PermanentRedirect,状态代码:301,AWS 请求 ID:-,AWS 错误类型:客户端,AWS 错误消息:您尝试访问的存储桶必须使用指定的端点进行寻址。请将所有未来请求发送到此端点:“foo.ourdomain.com.s3.amazonaws.com”。,用户代理:aws-sdk-php2/2.4.8 Guzzle/3.7.4 curl/7.22.0 PHP/5.3 .10-1ubuntu3.8

此时我很惊讶,因为 S3 SDK 的手册中没有提到这一点。不过还好,我找到了一个setEndpoint方法,将代码调整为:

   $client = \Aws\S3\S3Client::factory(array('key' => bla, 'secret' => bla));
   $client->setEndpoint('foo.ourdomain.com.s3.amazonaws.com');
   $client->upload('foo.ourdomain.com', 'test.txt', 'hello world', 'public-read');

我认为这可行,但我得到了完全相同的错误。我已经仔细检查,异常字节中提到的端点与我在第二行中设置的端点相匹配。

我还尝试使用 foo.ourdomain.com.s3-website-eu-west-1.amazonaws.com 作为端点(这是我们的 CNAME 根据 S3 控制台说明指向的主机)。也没用。

我一定是错过了什么,但我在任何地方都找不到。也许设置为“静态网站”的存储桶以 SDK 当前不支持的方式表现不同?如果是这样,我在文档和管理控制台中都找不到提及它。

【问题讨论】:

    标签: php amazon-web-services amazon-s3


    【解决方案1】:

    知道了。解决方案是将客户端的初始化更改为:

    $client = \Aws\S3\S3Client::factory(array(
      'key' => bla, 
      'secret' => bla, 
      'region' => 'eu-west-1'
    ));
    

    即而不是指定一个端点,我需要在选项数组中显式设置区域。我猜示例代码恰好使用了默认区域。

    【讨论】:

    • 对,SDK默认是全局区域/端点。如果您在特定区域创建存储桶,则需要发送 S3Client 以使用该区域。
    • 奇怪,虽然错误中的注释非常具体地说明了如何修复它,但也非常错误:)
    【解决方案2】:

    如果您不想将客户端初始化到特定区域和/或您需要使用不同的区域,我已成功使用 getBucketLocation/setRegion 调用集,如下所示:

    // Bucket location is fetched
    $m_bucketLocation = $I_s3->getBucketLocation(array(
            'Bucket' => $s_backupBucket,
    ));
    // Bucket location is specified before operation is made
    $I_s3->setRegion($m_bucketLocation['Location']);
    

    我有一个额外的电话,但无需干预工厂就解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 2015-12-04
      • 2020-01-03
      相关资源
      最近更新 更多