Day*_*oul 10 amazon-web-services amazon-cloudfront aws-cloudformation aws-lambda aws-lambda-edge
嗨,我已按照此说明尝试使用 Cloudfront 和 lambda@edge 调整图像大小。当我尝试测试调整大小的图像时,我不断收到以下错误消息:
与 CloudFront 分配关联的 Lambda 函数无效或没有所需的权限。
于是查了一下开头提到的那篇文章提供的云形成创建的lambda函数,发现里面没有触发器。
我尝试手动设置它,但收到以下错误消息:
CloudFront 事件不能与 $LATEST 或别名关联。选择操作以发布新版本的函数,然后重试关联。
我按照错误消息中的说明进行操作;发布,并将 Cloudfront 添加为触发器,但似乎无法应用它。它仍在运行没有 Cloudfront 作为触发器的那个。
有什么方法可以将 Cloudfront 设置为触发器并使其正常工作?
小智 16
我看到你们几个人说问题的根本原因不是权限问题而是代码问题。这可能是正确的根本原因。云前端倾向于对所有内容使用 403 错误,即使基本的 404 在大多数情况下也会显示为 403。
我还看到上面的一些评论指出您找不到与 lambda 中的错误相关的任何日志。我认为这很可能是因为你们正在寻找 us-east-1 上的日志并且不住在美国东海岸。日志将位于执行它们的本地区域。因此,选择最接近您所在位置的区域,您可能会在那里找到日志组。
NS *_*oit 15
对于谷歌搜索“与 CloudFront 分配关联的 Lambda 函数无效或没有所需权限”的人:
我得到了那个错误并努力调试它。结果发现我的 Lambda 中存在一些我必须解决的编程错误。但是,如果在点击 Cloudfront 时您不断收到“与 CloudFront 分配关联的 Lambda 函数无效或没有所需的权限”,您将如何调试它。那,而且 Cloudwatch 日志中没有任何内容。
我的 Lambda 是在 Cloudformation 中的AWS::Lambda::Function 的 ZipFile属性中定义的。我最终转到了 AWS 内的 Lambda 服务并创建了一个与我的 Cloudfront 事件相对应的 Lambda 测试负载,如下所述:Lambda@Edge Event Structure。然后,我可以在 Lambda 控制台内调试 Lambda,而无需点击 Cloudfront 或导航到 Cloudwatch 日志。
对于其他因 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}/*
Run Code Online (Sandbox Code Playgroud)
事实证明,您必须授予权限以允许除 GetObject 和 PutObject 之外的其他操作,因为它需要在存储桶中创建文件夹。只需将其更改为 s3 即可解决问题:*
| 归档时间: |
|
| 查看次数: |
15647 次 |
| 最近记录: |