使用 Bref Laravel Lambda 函数从 S3 执行 Listobjects 时出错

Posted

技术标签:

【中文标题】使用 Bref Laravel Lambda 函数从 S3 执行 Listobjects 时出错【英文标题】:Error Executing Listobjects from S3 using Bref Laravel Lambda functions 【发布时间】:2021-02-22 09:31:12 【问题描述】:

我正在尝试通过调用使用 Bref 无服务器包实现为 Lambda 函数的 API 来将我的资产存储在 S3 中。我正在使用 Laravel。 调用 Storage::directories(); 会出现以下错误。

消息:在“https://calmed-storage.s3.us-west-2.amazonaws.com/?prefix=&delimiter=%2F&encoding-type=url”上执行“ListObjects”时出错; AWS HTTP 错误:客户端错误:GET https://mys3-storage.s3.us-west-2.amazonaws.com/?prefix=&delimiter=%2F&encoding-type=url 导致 403 Forbidden 响应: 您提供的 AWS 访问密钥 ID(截断...) InvalidAccessKeyId(客户端):您提供的 AWS 访问密钥 ID 在我们的记录中不存在。 - InvalidAccessKeyId 您提供的 AWS 访问密钥 ID 在我们的记录中不存在。

【问题讨论】:

【参考方案1】:

错误说明了一切,您需要在与他们的 API 通信时发送正确的 AWS 密钥。

如果您按照官方Laravel docs 中的描述使用league/flysystem-aws-s3-v3,那么您需要在.env 文件中设置下面列出的AWS S3 环境变量

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=
AWS_BUCKET=
AWS_URL=

要获得访问密钥,您需要创建具有正确访问权限的用户是 Amazon。 This tutorial 将帮助您。

【讨论】:

.env 文件根据文档设置。根据 aws 中的文档设置 S3 权限和角色。什么都没有发生。 您使用的访问密钥存在问题。仔细检查您的 IAM 用户。 aws.amazon.com/premiumsupport/knowledge-center/… 此处有关堆栈溢出的答案只能为您指明正确的方向,我们不是亚马逊支持平台。如果您对集成有具体问题,请重新表述您的问题。否则,请接受我的回答并继续联系亚马逊支持。 我认为它与 AWS IAM 角色有关。由于所有设置均已正确完成。它在本地和 ec2 实例中运行良好,问题仅在作为 Lambda 函数执行时出现。 Aws-sdk-php 正在发送另一个访问 ID 和密钥,而不是存储在我的 .env 文件中的那个。【参考方案2】:

我使用的是 Laravel,凭据存储在 .env 文件中。 aws-sdk-php 以某种方式更改了访问 ID 和密钥。我不知道为什么。 当我在 filesystems.php 中对 Access ID 和 Secret Key 进行硬编码时,问题就解决了。

【讨论】:

以上是关于使用 Bref Laravel Lambda 函数从 S3 执行 Listobjects 时出错的主要内容,如果未能解决你的问题,请参考以下文章

将 Bref Lambda 自定义运行时与 AWS CDK 一起使用时出现错误 libncurses.so.6

带有 Neos CMS 的 AWS Lambda 的 bref.sh php 容器

Bref PHP 将会话存储在 redis 中但无法读取

如何从 laravel 调用现有的 AWS Lambda 函数?

Python--lambda函数

我可以使用 lambda 函数安排 lambda 函数的执行吗?