使用Terraform配置AWS Lambda预配置并发时反复遭遇ValidationException问题求助
解决AWS Lambda预配置并发的ValidationException问题
我太懂你这种糟心的情况了——明明AWS控制台里预配置并发已经显示ready了,Terraform执行apply却非要报ValidationException,还让你等了半天,完全摸不着头脑对吧?
咱们先拆解下问题:
- 你同时创建了Lambda别名和预配置并发,但两者之间没有显式的依赖关系,Terraform可能在别名还没完全创建就绪的时候,就提前发送了预并发配置请求,这时候AWS还没识别到这个别名(或者版本绑定关系),直接返回了ValidationException,但后台异步流程还是完成了配置,所以控制台显示正常。
- 另外,你一开始把
qualifier直接设为版本号,虽然理论上可行,但绑定到别名才是更灵活的最佳实践,后续更新Lambda版本只需要调整别名指向,预并发配置不用动。
给你调整后的配置代码,直接用就行:
resource "aws_lambda_alias" "contact_lambda_alias" { name = module.aws_lambda_function_contact_alias_label.id function_name = module.terraform_aws_lambda_contact.lambda_arn function_version = module.terraform_aws_lambda_contact.latest_published_version } resource "aws_lambda_provisioned_concurrency_config" "contact_lambda_alias" { function_name = module.terraform_aws_lambda_contact.lambda_arn provisioned_concurrent_executions = 1 # 改用别名名称作为qualifier,同时绑定依赖 qualifier = aws_lambda_alias.contact_lambda_alias.name depends_on = [aws_lambda_alias.contact_lambda_alias] timeouts { create = "30m" update = "30m" } }
关键改动点:
- 添加
depends_on = [aws_lambda_alias.contact_lambda_alias]:强制Terraform等待别名完全创建成功后,再执行预并发配置,彻底避免资源未就绪导致的报错。 - 把
qualifier从版本号改成别名名称:既符合最佳实践,也能确保预并发和别名绑定,后续版本更新更方便。
另外再给你两个排查小提示:
- 确认
module.terraform_aws_lambda_contact.latest_published_version返回的是固定版本号(比如1、2),而不是$LATEST——预配置并发不能绑定到$LATEST版本,必须是已发布的固定版本。 - 如果还是报错,可以去AWS CloudTrail里查具体的API请求日志,看看ValidationException的详细原因,有时候是权限或者模块返回值的细微问题。
内容的提问来源于stack exchange,提问作者Sree Teja
相关产品推荐
相关产品推荐

