为什么我收到“zip 内容不是有效的 UTF-8;” 在 Terraform 中使用 filebase64sha256 时?

3 amazon-web-services aws-lambda terraform

我正在尝试使用 Terraform 创建一个 AWS lambda 函数,如下所示

\n
resource "aws_lambda_function" "dev" {\n  role             = aws_iam_role.dev.arn\n  handler          = var.handler\n  runtime          = var.runtime\n  filename         = "lambda.zip"\n  function_name    = var.function_name\n  source_code_hash = filebase64sha256(file("lambda.zip"))\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但它会抛出一个错误:

\n
Call to function "file" failed: contents of lambda.zip are not valid UTF-8; use the filebase64 function to obtain the Base64 encoded contents or the other file\n\xe2\x94\x82 functions (e.g. filemd5, filesha256) to obtain file hashing results instead.\n
Run Code Online (Sandbox Code Playgroud)\n

我也尝试过"${base64sha256(file("lambda.zip"))}",但仍然遇到同样的错误。

\n

Erm*_*ary 6

Terraform 中以 开头的所有函数都file接受文件路径,而不是内容。

这里有两个问题:

  1. 您正在用来file读取二进制文件 - 它只接受 UTF-8 文本

  2. file当它已经被处理时您正在使用filebase64sha256file前缀是它接受文件路径的提示)

文档强调了两个方面:

类似于 base64sha256(file(filename)),但由于file 仅接受 UTF-8 文本,因此不能用于为二进制文件创建哈希值。

删除对它的调用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")
}
Run Code Online (Sandbox Code Playgroud)