如何添加事件类型作为Lambda函数的Cloudfront for SAM模板
我有一个SAM模板,其中将有一个λ函数和Api网关作为触发器,现在我需要添加一个现有的CLoudfront分发,而不是Api网关作为触发器。但我找不到任何这样的选择来这样做。
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发布于 2020-01-07 10:12:28
目前在SAM model 1中没有用于CloudFront分发的事件源类型。假设您正在尝试创建一个edge lambda函数,您将需要手动或通过用于创建分发的cloudformation附加该函数-因为它需要直接针对云前端分发进行声明。为简洁起见,我对其进行了删减,但例如-
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分发模板复杂化。
发布于 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。
https://stackoverflow.com/questions/57302469
复制相似问题