您好我已经按照instruction尝试使用Cloudfront和lambda @ edge调整图片大小。当我尝试测试已调整大小的图像时,我不断收到以下错误消息:
与CloudFront分配相关联的Lambda函数是 无效或没有所需的权限。
所以我检查了由我在开头提到的文章提供的云形成的lambda函数,我发现它没有触发器。
我已尝试手动设置,但收到以下错误消息:
CloudFront事件无法与$ LATEST或Alias关联。选择 发布新功能版本的操作,然后重试 关联。
我按照错误信息中的说明操作;发布,并添加Cloudfront作为触发器,但似乎没有办法应用它。它仍在运行没有Cloudfront作为触发器的那个。
有没有办法将Cloudfront设置为触发器并使其正常工作?
答案 0 :(得分:5)
对于正在谷歌搜索的人们“与CloudFront发行版关联的Lambda函数无效或没有所需的权限”:
我遇到了那个错误,并努力调试它。事实证明,我必须解决Lambda内部的一些程序错误。但是,如果在单击Cloudfront时仍然收到“与CloudFront发行版关联的Lambda函数无效或没有所需权限”的信息,该如何调试。那样,Cloudwatch日志中什么也没有。
我的Lambda是在Cloudformation中的AWS::Lambda::Function's ZipFile属性中定义的。我最终转到AWS内的Lambda服务,并创建了与我的Cloudfront事件相对应的Lambda测试有效负载,如此处记录的:Lambda@Edge Event Structure。然后,我可以在Lambda控制台中调试Lambda,而无需点击Cloudfront或导航至Cloudwatch日志。
答案 1 :(得分:2)
对我来说,lambda屏幕上缺少云前触发是因为我不在us-east-1地区
答案 2 :(得分:0)
对于受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即可解决问题:*
答案 3 :(得分:0)
如果您发现该答案是“与CloudFront发行版关联的Lambda函数无效或没有所需的权限”,则可能是由于从cloudformation未正确连接函数而引起的。例如给定yaml:
Code: ./src/ # or CodeUri ./src/
Handler: foo.bar
再次检查./src/foo.js
是否有exports.bar = function
...
答案 4 :(得分:0)
我在CloudWatch中没有登录时遇到了相同的错误消息。我终于注意到,我的index.handler
定义了index.py
时,我的Python运行时处理程序是lambda_handler
。将我的Python运行时处理程序更改为index.lambda_handler
后,错误消失了。 HTH。
答案 5 :(得分:0)
我看到你们中的一些人指出,问题的根本原因不是权限问题,也不是您的代码问题。这可能是正确的根本原因。在大多数情况下,即使最基本的404显示为403,云端也倾向于对所有内容使用403错误。
我还看到了上面的一些评论,指出您找不到与lambda错误相关的任何日志。我认为这很可能是因为你们正在寻找us-east-1上的原木,并且不住在美国的东海岸。日志将在您执行日志的本地区域中。因此,选择离您所坐位置最近的区域,您可能会在其中找到日志组。