вычислить хэш исходного кода для предварительно созданного ZIP-файла для lambda_module? - PullRequest
0 голосов
/ 16 октября 2019

Я написал модуль terraform для создания Lambda, и у меня возникли проблемы с выяснением того, как вычислить source_code_hash для PRE-файла ZIP. Это будет в конвейере, поэтому ZIP-файл будет создаваться каждый раз и, возможно, будет другим, прежде чем я достигну шага terraform.
Я создаю ZIP-файл с помощью gulp (это приложение 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Я получаю эту ошибку:

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 Ответ

1 голос
/ 16 октября 2019

Функция filebase64sha256 аналогична base64sha256(file(...)), но, объединяя две функции вместе, она избавляет от необходимости создавать промежуточную строку содержимого файла и, таким образом, устраняет требование, чтобы файл былКодировка UTF-8.

Поэтому вам не нужен вызов функции file, потому что чтение файла встроено в эту функцию:

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