amazon-web-services - SAM 模板事件类型
问题描述
如何将事件类型添加为 Lambda 函数的 Cloudfront for SAM 模板
我有一个 SAM 模板,其中将有一个 lambda 函数和 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
解决方案
目前,SAM 模型 [1] 中没有 CloudFront 分配的事件源类型。假设您正在尝试创建一个边缘 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 模板中,这可能会使它变得复杂。
推荐阅读
- pyqt - 将 PyQt UI 作为 python 文件和作为 ui 文件有什么区别?
- python - 我希望游戏在猜到该短语时结束。播放器循环也不起作用
- python - 当服务器没有 ping 间隔时 Websocket 会自动关闭
- mysql - sql:显示所有行,只是用不同的数字
- java - 无法在 Java 中获取单元测试的 thenReturn() 值
- neovim - NVim 没有获取文件
- php - 废弃的购物车 url 显示购物车为空
- php - 使用 POST 和 PHP,如何一次发送多个文件?
- reactjs - Reddit 用 React 点赞评论部分
- python - 为什么我不能在 Scrapy 中使用多个 yield 请求?