计算lambda_module的预构建ZIP文件上的源代码哈希?

时间:2019-10-16 14:51:37

标签: terraform terraform-provider-aws

我已经编写了一个terraform模块来创建Lambda,但在弄清楚如何在预构建的ZIP文件中计算source_code_hash时遇到了麻烦。这将在管道中,因此每次生成ZIP文件时,在到达terraform步骤之前,可能都会有所不同。
我正在用gulp构建ZIP文件(这是一个NodeJS应用),并假设它是预先构建在目录中的 build / myLambda.zip

基本上我想这样做。文件名是一个terraform变量,我希望source_code_hash计算必须引用该文件。

module my_lambda {
  filename = "${var.my_zip_file}"
}

模块的相关部分是:

resource "aws_lambda_function" "lambda" {
   filename            = "${var.filename}"
   source_code_hash    = "${filebase64sha256(file("${var.filename}"))}"
}

但是,当我运行Terraform Plan时,出现此错误:

Error: Error in function call

  on modules\lambda\main.tf line 16, in resource "aws_lambda_function" "lambda":
  16:     source_code_hash    = "${filebase64sha256(file("${var.filename}"))}"
    |----------------
    | var.filename is "build/myLambda.zip"

Call to function "file" failed: contents of
build/myLambda.zip are not valid UTF-8;
use the filebase64 function to obtain the Base64 encoded contents or the other
file functions (e.g. filemd5, filesha256) to obtain file hashing results
instead.

1 个答案:

答案 0 :(得分:1)

filebase64sha256函数类似于base64sha256(file(...)),但是通过将两个函数组合在一起,它避免了创建文件内容的中间字符串的需要,从而避免了文件必须是UTF- 8个已编码。

因此,您不需要调用file,因为读取文件内置于该函数中。

  source_code_hash = "${filebase64sha256(var.filename)}"