SAM模板事件类型

时间:2019-08-01 05:42:33

标签: amazon-web-services amazon-cloudfront serverless

如何为Lambda函数的SAM模板添加事件类型作为Cloudfront

我有一个SAM模板,其中将有一个lambda函数和Api网关作为触发器,现在要代替Api网关作为触发器,我需要添加一个现有的CLoudfront发行版。但是我没有找到任何这样的选择。

cloudfrontlambda:    
    Type: AWS::Serverless::Function    
    Properties:    
      FunctionName: cloudfrontlambda   
      Handler: index.handler    
      Runtime: nodejs8.10    
      CodeUri: ./Lambda/cloudfrontlambda/   
      Description: Function is used for validating the id token    
      MemorySize: 128    
      Timeout: 30    
      Role: 'arn:aws:iam::1234567:role/DR_lambda_web_execution'    
      Events:
     --------- ## how to add an Existing cloudfront distribution here

1 个答案:

答案 0 :(得分:0)

简短回答,SNS。长答案,除了SNS不能。

您不能添加现有 CloudFront资源,因为这会破坏CF的功能。这也花了我一段时间,但从本质上讲,CloudFront模板只能在其内部创建/修改资源。它无法修改其堆栈之外的资源。以下是一些支持此功能的链接: https://github.com/awslabs/serverless-application-model/issues/241

https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3(特别是说现有的S3存储桶不能成为事件源)

最后一个链接显示最近他们支持从其他堆栈导入资源,但是必须先从其先前的堆栈中删除该资源,然后才能使用它。我不确定您的架构,但是我知道这会很快使事情中断。 https://github.com/awslabs/serverless-application-model/issues/249

解决方法是添加自定义资源(lambda)来减轻此障碍。在我发送的最后一个链接中,有一个SNS解决方法的示例,因为此限制不适用于SNS。