10

嗨,我已按照此说明尝试使用 Cloudfront 和 lambda@edge 调整图像大小。当我尝试测试调整大小的图像时,我不断收到以下错误消息:

与 CloudFront 分配关联的 Lambda 函数无效或没有所需的权限。

于是我查看了开头提到的那篇文章提供的云形成创建的lambda函数,发现里面没有触发器。

在此处输入图像描述

我尝试手动设置,但收到以下错误消息:

CloudFront 事件不能与 $LATEST 或别名关联。选择操作以发布新版本的函数,然后重试关联。

我按照错误消息中的说明进行操作;发布,并将 Cloudfront 添加为触发器,但似乎无法应用它。它仍在运行没有 Cloudfront 作为触发器的那个。

如何将此版本应用为我的 lambda 服务?

有没有办法将 Cloudfront 设置为触发器并使其正常工作?

4

6 回答 6

16

对于谷歌搜索“与 CloudFront 分配关联的 Lambda 函数无效或没有所需权限”的人:

我得到了那个错误并努力调试它。事实证明,我的 Lambda 中存在一些我必须解决的程序错误。但是,如果在点击 Cloudfront 时不断收到“与 CloudFront 分配关联的 Lambda 函数无效或没有所需的权限”,您将如何调试它。即,Cloudwatch 日志中没有任何内容。

我的 Lambda 是在AWS::Lambda::Function 的 ZipFile属性内的 Cloudformation 中定义的。我最终去了 AWS 内部的 Lambda 服务,并创建了一个与我的 Cloudfront 事件相对应的 Lambda 测试有效负载,如下所述:Lambda@Edge Event Structure。然后,我可以在 Lambda 控制台中调试 Lambda,而无需访问 Cloudfront 或导航到 Cloudwatch 日志。

于 2020-05-12T16:49:31.927 回答
8

对于其他遭受来自 aws 博客的开发文章质量差的人;我发现这是由于错误的 S3 存储桶策略。文章说:

ImageBucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref ImageBucket
      PolicyDocument:
        Statement:
            - Action:
                - s3:GetObject
              Effect: Allow
              Principal: "*"
              Resource: !Sub arn:aws:s3:::${ImageBucket}/*
            - Action:
                - s3:PutObject
              Effect: Allow
              Principal:
                AWS: !GetAtt EdgeLambdaRole.Arn
              Resource: !Sub arn:aws:s3:::${ImageBucket}/*
            - Action:
                - s3:GetObject
              Effect: Allow
              Principal:
                AWS: !GetAtt EdgeLambdaRole.Arn
              Resource: !Sub arn:aws:s3:::${ImageBucket}/*

事实证明,您必须授予允许 GetObject 和 PutObject 之外的其他操作的权限,因为它需要在存​​储桶中创建文件夹。只需将其更改为 s3 即可解决问题:*

于 2018-05-24T16:23:11.027 回答
6

对我来说,lambda 屏幕上缺少云前触发器是因为我不在 us-east-1 区域

于 2019-02-11T17:42:24.930 回答
5

我看到你们中的几个人说问题的根本原因不是权限问题,而是您的代码问题。这可能是正确的根本原因。Cloud front 倾向于对所有内容使用 403 错误,即使是基本的 404 在大多数情况下也会显示为 403。

我还看到了上面的一些评论,指出您在 lambda 中找不到与错误相关的任何日志。我认为这很可能是因为你们正在寻找 us-east-1 上的日志,而不是住在美国东海岸。日志将位于执行它们的本地区域。因此,选择最靠近您所在位置的区域,您可能会在那里找到日志组。

于 2020-08-12T23:24:28.457 回答
2

如果您在谷歌上搜索“与 CloudFront 分配关联的 Lambda 函数无效或没有所需权限”的答案,这可能是由于您的函数未从 cloudformation 正确连接所致。例如给定 yaml:

Code: ./src/ # or CodeUri ./src/
Handler: foo.bar

仔细检查./src/foo.jsexports.bar = function...

于 2019-03-07T16:58:56.273 回答
2

我在 CloudWatch 中没有登录时遇到了相同的错误消息。我终于注意到我的 Python 运行时处理程序index.handler在我index.py定义lambda_handler的 . 将我的 Python 运行时处理程序更改为 后index.lambda_handler,错误消失了。HTH。

于 2020-08-10T07:39:43.997 回答