Версия Terraform
Terraform v0.12.20
+ provider.archive v1.3.0
+ provider.aws v2.61.0
+ provider.null v2.1.2
Файлы конфигурации Terraform
resource "null_resource" "build" {
triggers = {
always_run = timestamp()
}
provisioner "local-exec" {
command = "${path.module}/scripts/build.sh ${local.source_dir} ${var.zip_dir}/${local.name}"
}
}
data "archive_file" "zip" {
type = "zip"
output_path = var.zip_filename
source_dir = var.zip_dir
depends_on = [null_resource.build]
}
resource "aws_lambda_function" "lambda" {
filename = data.archive_file.zip.output_path
source_code_hash = data.archive_file.zip.output_base64sha256
function_name = var.name
role = aws_iam_role.lambda_role[0].arn
handler = var.handler
runtime = "go1.x"
timeout = "120"
description = var.description
vpc_config {
subnet_ids = local.subnet_ids
security_group_ids = [aws_security_group.allow_all.id]
}
environment {
variables = local.env
}
depends_on = [data.archive_file.zip]
}
Cra sh Вывод
Error: Error modifying Lambda Function Code some_func: InvalidParameterValueException: Uploaded file must be a non-empty zip
{
RespMetadata: {
StatusCode: 400,
RequestID: "9243c685-cc9b-484c-ab8d-8ea7e7d34243"
},
Message_: "Uploaded file must be a non-empty zip",
Type: "User"
}
Скрипты сборки выглядят так:
#!/usr/bin/env bash
set -eo pipefail
SRC=$1
DEST=$2
rm -f "$DEST"
cd "$SRC"
go get ./...
go mod vendor
GOOS=linux go build -o "$DEST" .
Я не уверен, что Terraform не ждет, пока local-exe c завершит sh, или он не может распознать, что файл был создан на диске, поэтому в итоге он заархивирует пустой каталог.
Как мне заставить archive_file ждать файлов, созданных локальным exe-файлом c Provisioner?