首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAM模板事件类型

SAM模板事件类型
EN

Stack Overflow用户
提问于 2019-08-01 13:42:34
回答 2查看 355关注 0票数 0

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

我有一个SAM模板,其中将有一个λ函数和Api网关作为触发器,现在我需要添加一个现有的CLoudfront分发,而不是Api网关作为触发器。但我找不到任何这样的选择来这样做。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2020-01-07 10:12:28

目前在SAM model 1中没有用于CloudFront分发的事件源类型。假设您正在尝试创建一个edge lambda函数,您将需要手动或通过用于创建分发的cloudformation附加该函数-因为它需要直接针对云前端分发进行声明。为简洁起见,我对其进行了删减,但例如-

代码语言:javascript
复制
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_exec’

  cloudfrontdistribution:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        CacheBehaviors:
          - LambdaFunctionAssociations:
              - EventType: string-value
                LambdaFunctionARN: !Sub ‘${cloudfrontlambda.Arn}:${cloudfrontlambda.Version}’

例如。

请注意,您的lambda函数必须部署在us-east-1中才能以这种方式工作。我可以确认,您可以通过cloudformation模板在另一个区域部署云前端发行版,并仍然引用部署到us-east-1的lambda函数。

此外,还必须在ARN中指定lambda函数的版本。AWS::Lambda::Function cloudformation类型本身并不提供此功能(需要额外的AWS::Lambda::Version资源),因此如果您的CloudFront分发模板还没有包含在SAM模板中,这可能会使您的SAM分发模板复杂化。

1

票数 0
EN

Stack Overflow用户

发布于 2020-04-14 10:27:05

简而言之,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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57302469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档