无法将cloudfront添加为lambda函数的触发器

时间:2018-05-24 14:33:57

标签: amazon-web-services aws-lambda amazon-cloudformation amazon-cloudfront aws-lambda-edge

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

  

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

所以我检查了由我在开头提到的文章提供的云形成的lambda函数,我发现它没有触发器。

enter image description here

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

  

CloudFront事件无法与$ LATEST或Alias关联。选择   发布新功能版本的操作,然后重试   关联。

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

How can I apply this version as my lambda service?

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

6 个答案:

答案 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上的原木,并且不住在美国的东海岸。日志将在您执行日志的本地区域中。因此,选择离您所坐位置最近的区域,您可能会在其中找到日志组。