Output local_filename is available _before_ the package is available
lorengordon opened this issue · 5 comments
Description
I was attempting to build the package locally once, and then use it several times in different lambda functions. That ends up looking something like this:
module "test_create_package" {
source = "git::https://github.com/terraform-aws-modules/terraform-aws-lambda.git?ref=v4.0.2"
create_function = false
create_package = true
recreate_missing_package = false
runtime = "python3.8"
source_path = "${path.module}/../../lambda/src"
}
module "test_create_function" {
source = "git::https://github.com/terraform-aws-modules/terraform-aws-lambda.git?ref=v4.0.2"
function_name = "foo"
handler = "index.lambda_handler"
runtime = "python3.8"
create_package = false
local_existing_package = module.test_create_package.local_filename
}
The problem is that the output local_filename
is determined immediately at plan time, but the zip is only created in the apply phase. Which means the terraform graph determines that it is able to use the value immediately in the apply phase to create the lambda function. Which results in errors of the form:
│ Error: unable to load "./builds/4d797a72c1bf2fcf10fcee1ece41ecf3e1ec6c99ea87c4772711bc449c5bad4b.zip": open ./builds/4d797a72c1bf2fcf10fcee1ece41ecf3e1ec6c99ea87c4772711bc449c5bad4b.zip: no such file or directory
│
│ with module.test_create_function.module.lambda.aws_lambda_function.this[0],
│ on .terraform/modules/test_create_function.lambda/main.tf line 22, in resource "aws_lambda_function" "this":
│ 22: resource "aws_lambda_function" "this" {
I believe this can be fixed by adding a depends_on statement to the output local_filename
for null_resource.archive
:
output "local_filename" {
description = "The filename of zip archive deployed (if deployment was from local)"
value = local.filename
depends_on = [
null_resource.archive,
]
}
I'll be testing that and opening a pull request shortly if it does indeed fix the behavoir.
-
✋ I have searched the open/closed issues and my issue is not listed.
Not sure if depends_on
between modules will help with this. Worth trying.
Yes, that is also an option, but module-level depends_on does some ugly things to the graph. Forcing the output to wait keeps the graph really clean.
And I did just test my fork with this change and it does indeed fix the problem...
This issue has been resolved in version 4.1.1
I'm going to lock this issue because it has been closed for 30 days