Невозможно найти файлы, созданные сценарием local-exe c - PullRequest
0 голосов
/ 29 мая 2020

Версия 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?

...