.
├── lambda.tf
└── function/
├── requirements.txt
└── src/
└── handler.py
Remember to .gitignore .dist/
!
locals { | |
prefix = "prod" | |
lambda_runtime = "python3.12" | |
lambda_timeout = 30 | |
} | |
# Placeholder for lambda execution role | |
data "aws_iam_role" "lambda_execution_role" { | |
name = "lambda-role" | |
} | |
# Placeholder for lambda cloudwatch log group | |
data "aws_iam_role" "lambda_log_group" { | |
name = "lambda-log-group" | |
} | |
resource "null_resource" "install_layer_dependencies" { | |
provisioner "local-exec" { | |
command = "mkdir -p .dist/ && pip install -r function/requirements.txt -t .dist/layer/python/lib/python3.9/site-packages" | |
} | |
triggers = { | |
trigger = filesha256("function/requirements.txt") | |
} | |
} | |
data "archive_file" "layer_zip" { | |
type = "zip" | |
source_dir = ".dist/layer" | |
output_path = ".dist/layer.zip" | |
depends_on = [ | |
null_resource.install_layer_dependencies | |
] | |
} | |
resource "aws_lambda_layer_version" "lambda_layer" { | |
filename = ".dist/layer.zip" | |
source_code_hash = data.archive_file.layer_zip.output_base64sha256 | |
layer_name = "${local.prefix}-dependency-layer" | |
compatible_runtimes = [local.lambda_runtime] | |
depends_on = [ | |
data.archive_file.layer_zip | |
] | |
} | |
data "archive_file" "function_zip" { | |
type = "zip" | |
source_dir = "function/src" | |
output_path = ".dist/function.zip" | |
} | |
resource "aws_lambda_function" "lambda" { | |
function_name = local.prefix | |
filename = ".dist/function.zip" | |
handler = "handler.handler" | |
source_code_hash = data.archive_file.function_zip.output_base64sha256 | |
runtime = local.lambda_runtime | |
timeout = local.lambda_timeout | |
role = data.aws_iam_role.lambda_execution_role.arn | |
logging_config { | |
log_group = data.aws_cloudwatch_log_group.lambda_log_group.name | |
log_format = "Text" | |
} | |
layers = [ | |
aws_lambda_layer_version.lambda_layer.arn | |
] | |
depends_on = [ | |
data.archive_file.function_zip, | |
aws_lambda_layer_version.lambda_layer | |
] | |
} |