如何为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
答案 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。