I’m trying to use HCP as my Terraform backend, and my configuration works locally.
I am receiving an error when trying to reference a file zipped by the archive_file module (to upload a lambda function).
Waiting for the plan to start...
Terraform v1.2.0
on linux_amd64
Initializing plugins and modules...
╷
│ Error: Error in function call
│
│ on example.tf line 72, in resource "aws_lambda_function" "example":
│ 72: source_code_hash = filebase64sha256("example.zip")
│
│ Call to function "filebase64sha256" failed: open example.zip: no such file
│ or directory.
╵
Operation failed: failed running terraform plan (exit 1)
In typical CI/CD environments, plan and apply may be run in different containers or instances and could cause this error, but on HCP, this error is seen in the plan stage, and I believe it would bleed over into the apply stage.
I couldn’t find any references to this issue on HCP, so I have started this topic.
Please let me know if there’s already a workaround to this.
If not, maybe a /tmp storage can be made available during plan+apply for file operations.
Below is a minimal example to reproduce the issue:
terraform {
required_version = ">= 1.2.0"
cloud {
organization = "example"
workspaces {
name = "example"
}
}
required_providers {
aws = {
source = "hashicorp/aws"
version = "4.15.1"
}
archive = {
source = "hashicorp/archive"
version = "2.2.0"
}
}
}
provider "aws" {
profile = "default"
region = "us-east-1"
shared_config_files = ["$HOME/.aws/credentials"]
}
resource "aws_iam_role" "example" {
name = "lambda_assume_role"
assume_role_policy = jsonencode({
"Version" : "2012-10-17",
"Statement" : [
{
"Sid" : "",
"Effect" : "Allow"
"Action" : "sts:AssumeRole",
"Principal" : {
"Service" : [
"lambda.amazonaws.com",
"edgelambda.amazonaws.com"
]
},
}
]
})
}
resource "aws_iam_role_policy_attachment" "lambda_policy" {
role = aws_iam_role.example.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}
data "archive_file" "example" {
source_file = "example.js"
output_path = "example.zip"
type = "zip"
}
resource "aws_lambda_function" "example" {
memory_size = "128"
timeout = 10
runtime = "nodejs14.x"
architectures = ["arm64"]
handler = "example.handler"
function_name = "example"
role = aws_iam_role.example.arn
filename = "example.zip"
source_code_hash = filebase64sha256("example.zip")
}