AWS s3 getIterator ListObjects 移动到另一台服务器后产生错误

Posted

技术标签:

【中文标题】AWS s3 getIterator ListObjects 移动到另一台服务器后产生错误【英文标题】:AWS s3 getIterator ListObjects after moving to another server producing an error 【发布时间】:2021-10-28 05:36:32 【问题描述】:

我当前的服务器上有一个脚本,它可以抓取 s3 存储桶中的对象,这些对象是来自我拥有的 SES 设置的电子邮件并循环遍历它们。它目前工作得很好并且可以完成它的工作。

我正在创建一个与当前服务器完全相同的新生产服务器。唯一的区别是这个新服务器将从子域访问,而不是从www 访问的当前服务器,并且 IP 地址正在更改。

在新的生产服务器上,我的脚本此时正在中断。

$objects = $s3->getIterator('ListObjects', array('Bucket' => $bucketName));

对于我的一生,我无法弄清楚它为什么会破裂。我检查了我的 S3CLient 结果,它似乎工作得很好。我可以做一个print_r,我可以查看结果,我没有看到任何错误。

try 
// Instantiate the client.
    $s3 = new S3Client([
        'version' => 'latest',
        'region'  => 'us-west-2',
        'credentials' => [
            'key'    => '*******************',
            'secret' => '***********************************',
        ],
    ]);
 catch (Exception $e) 
    die("Error: " . $e->getMessage());

我认为这可能与 SES 要求的某些域验证问题有关,但对我来说这似乎并不相关,因为错误是由 s3 方面引起的。

我查看了我的 IAM 角色,但在其中看不到任何特定于域的内容。

特定于域或 IP 的 s3 存储桶是否存在某种权限问题?我很久以前设置的,所以我不记得了。

【问题讨论】:

【参考方案1】:

已解决

我想通了。在我当前的服务器上,我使用 AWS SDK for php 从下载文件夹而不是使用 composer 安装它。在我的新服务器上,我通过 composer 安装了 SDK 并删除了 require 我曾指向旧文件夹 SDK,它现在可以工作了。

【讨论】:

以上是关于AWS s3 getIterator ListObjects 移动到另一台服务器后产生错误的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError: 'ElementTree' 对象在尝试导入 excel 文件时没有属性 'getiterator'

列出 Amazon S3 上特定文件夹中的对象

多个 AWS Lambda 中的 AWS::S3::Bucket LambdaConfiguration

使用 aws.s3 包从 AWS S3 一次读取多个 CSV 文件对象

AWS S3

使用默认 aws/S3 KMS 密钥对解密对象进行跨账户访问