使用Terraform配置CloudFront时lambda_function_association内存超限报错如何解决
报错根本原因
CloudFront关联的Lambda@Edge函数对内存大小有明确的规则限制,你当前使用的viewer-response属于viewer端触发事件,允许的最大内存为128MB,而你关联的Lambda函数版本内存配置为1024MB,超出上限触发报错。
排查步骤
- 核对你当前使用的Lambda函数版本配置:找到ARN为
arn:aws:lambda:us-eas-1-myaccount:function:myaccount-dev-cloudfrontheaders1:2的函数(末尾的:2代表版本号),确认其内存配置是否为1024MB。注意不要仅核对$LATEST版本的配置,CloudFront要求关联带固定版本号的ARN,必须确认对应版本的参数。 - 核对事件类型对应的内存限制:
- viewer端事件(
viewer-request、viewer-response):最大内存128MB - origin端事件(
origin-request、origin-response):最大内存1024MB
- viewer端事件(
修复方案
根据你的业务场景二选一即可:
方案1:保留viewer-response事件,修改Lambda配置
如果你的逻辑必须在用户请求返回阶段触发,直接调整Lambda函数的内存配置为128MB,重新发布新版本,更新CloudFront关联的ARN即可。
如果你的Lambda也是通过Terraform管理,参考配置修改:
resource "aws_lambda_function" "cloudfront_headers" { // 其他原有配置不变 memory_size = 128 // 内存改为128MB publish = true // 开启自动发布版本 } resource "aws_cloudfront_distribution" "clientcloudfrontdistrotest" { default_cache_behavior { // 其他原有配置不变 lambda_function_association { event_type = "viewer-response" include_body = false lambda_arn = aws_lambda_function.cloudfront_headers.qualified_arn // 直接引用带版本的ARN,无需手动维护 } } }
修改后重新执行terraform apply即可。
方案2:调整事件类型为origin端事件,无需修改Lambda内存
如果你的逻辑(比如修改响应头)不需要针对每个用户请求执行,仅需要在CloudFront回源拿到响应时执行,直接把事件类型改为origin-response即可,该事件类型允许最大1024MB内存,无需调整Lambda配置。
lambda_function_association { event_type = "origin-response" // 仅修改此行即可 include_body = false lambda_arn = var.lambda_arn }
额外注意事项
Lambda@Edge要求函数必须部署在us-east-1区域,你报错信息里的ARN区域为us-eas-1大概率是拼写错误,建议同步核对,避免后续出现其他关联错误。
内容的提问来源于stack exchange,提问作者sutterhome1984
相关产品推荐
相关产品推荐

