Terraform更新AWS控制台创建的Lambda函数报参数错误咨询
问题结论
不能通过Terraform的data数据源块实现现有Lambda函数的更新。
报错原因
data "aws_lambda_function"是只读数据源,唯一作用是查询、拉取AWS上已存在Lambda的配置信息,本身不具备创建、修改、删除资源的能力,因此不支持filename、source_code_hash、role这类用于写入配置的参数,你在data块里配置这些参数自然会触发"参数不受支持"的报错。
正确更新现有Lambda的操作步骤
要更新此前在控制台创建的Lambda函数,你需要使用resource "aws_lambda_function"资源块接管该资源的管理,操作流程如下:
- 编写和现有Lambda配置匹配的资源块,代码打包逻辑可以保留原来的archive_file配置,参考示例:
data "archive_file" "stop_ec2" { type = "zip" source_file = "src_dir/stop_ec2.py" output_path = "dest_dir/stop_ec2_upload.zip" } resource "aws_lambda_function" "existing" { function_name = "MyPocLambda" role = aws_iam_role.iam_for_lambda.arn filename = "dest_dir/stop_ec2_upload.zip" source_code_hash = data.archive_file.stop_ec2.output_base64sha256 # 以下参数请和你当前Lambda的实际配置保持一致,避免非必要变更 handler = "stop_ec2.lambda_handler" runtime = "python3.9" timeout = 3 }
- 执行导入命令,把控制台创建的现有Lambda同步到Terraform本地状态中:
terraform import aws_lambda_function.existing MyPocLambda
- 执行
terraform plan查看变更计划,确认输出的变更项只有你预期的代码更新、没有误改其他配置后,再执行terraform apply即可完成Lambda的更新。
后续这个Lambda的所有配置、代码调整,都可以直接修改对应resource块的参数执行apply完成,不需要再到控制台手动操作。
内容的提问来源于stack exchange,提问作者CamposTI
相关产品推荐
相关产品推荐

