为什么在Terraform中使用filebase64sha256时报zip内容非有效UTF-8?
错误原因
file()是Terraform专门用于读取UTF-8编码文本文件的函数,而lambda.zip是二进制压缩文件,不符合UTF-8编码规则,因此只要代码中调用了file("lambda.zip"),不管后续套什么哈希计算函数,都会先触发该报错,这也是你换用base64sha256(file("lambda.zip"))写法仍然报错的原因。
解决方案
filebase64sha256函数本身支持直接传入文件路径作为入参,不需要嵌套file()读取文件内容,直接修改配置即可:
resource "aws_lambda_function" "dev" { role = aws_iam_role.dev.arn handler = var.handler runtime = var.runtime filename = "lambda.zip" function_name = var.function_name source_code_hash = filebase64sha256("lambda.zip") }
如果你的lambda压缩包是通过archive_file数据源自动生成的,还可以直接引用数据源的内置属性,避免手动处理文件路径,可靠性更高:
# 生成lambda压缩包的数据源示例 data "archive_file" "lambda_package" { type = "zip" source_file = "main.py" output_path = "lambda.zip" } # 直接引用内置的base64sha256计算结果 resource "aws_lambda_function" "dev" { role = aws_iam_role.dev.arn handler = var.handler runtime = var.runtime filename = data.archive_file.lambda_package.output_path function_name = var.function_name source_code_hash = data.archive_file.lambda_package.output_base64sha256 }
内容的提问来源于stack exchange,提问作者user13067694
相关产品推荐
相关产品推荐

