terraform-aws-lambda-python

A terraform module to define a python lambda function which source files are automatically built and packaged for lambda deployment.

Features

Create a lambda function with the following supports.

  • Automatically archive the specified source directory into one zip file for Lambda deployment.
  • Invoke a build command before making an archive if specified. This allows installing additional dependencies, for example from requirements.txt, package.json etc.
  • Create an IAM role to publish lambda execution logs to CloudWatch Logs.

Usage

module "lambda" {
  source  = "nozaq/lambda-auto-package/aws"

  source_dir  = "${path.module}/source"
  output_path = "${path.module}/source.zip"

  iam_role_name_prefix = "example-lambda-role"

  function_name = "example-lambda"
  handler       = "main.handler"
  runtime       = "python3.7"

  environment = {
    variables = {
      EXAMPLE_VAR = "foobar"
    }
  }
}

Providers

Name Version
aws n/a
external n/a

Inputs

Name Description Type Default Required
allowed_services A list of AWS Services that are allowed to access this lambda. list(string)
[
"lambda.amazonaws.com"
]
no
build_command This is the build command to execute. It can be provided as a relative path to the current working directory or as an absolute path. It is evaluated in a shell, and can use environment variables or Terraform variables. string "" no
build_triggers A map of values which should cause the build command to re-run. Values are meant to be interpolated references to variables or attributes of other resources. list [] no
dead_letter_config Nested block to configure the function's dead letter queue.
object({
target_arn = string
})
n/a yes
description Description of what your Lambda Function does. string "" no
environment A map that defines environment variables for the Lambda function.
object({
variables = map(string)
})
n/a yes
exclude_files A list of directories or folders to ignore, e.g.
exclude_files = ["test", "src/**/*.ts"]
list(string) [] no
function_name A unique name for your Lambda Function. string n/a yes
handler The function entrypoint in your code. string n/a yes
iam_role_name_prefix The prefix string for the name of IAM role for the lambda function. string "" no
kms_key_arn The ARN for the KMS encryption key. string n/a yes
kms_key_id The ARN of the KMS Key to use when encrypting log data. string n/a yes
layers List of Lambda Layer Version ARNs (maximum of 5) to attach to your Lambda Function. list(string) [] no
memory_size Amount of memory in MB your Lambda Function can use at runtime. number 128 no
output_path A path to which the source directory is archived before uploading to AWS. string n/a yes
policy_arns A list of IAM policy ARNs attached to the lambda function. list(string) [] no
publish Whether to publish creation/change as new Lambda Function Version. string false no
reserved_concurrent_executions The amount of reserved concurrent executions for this lambda function. A value of 0 disables lambda from being triggered and -1 removes any concurrency limitations. string -1 no
retention_in_days Specifies the number of days you want to retain log events in the specified log group. number n/a yes
runtime The identifier of the function's runtime. string n/a yes
source_dir A path to the directory which contains source files. string n/a yes
tags A mapping of tags to assign to resources. map
{
"Terraform": "true"
}
no
timeout The maximum number of seconds the lambda function to run until timeout. number 3 no
tracing_config Can be either PassThrough or Active. If PassThrough, Lambda will only trace the request from an upstream service if it contains a tracing header with "sampled=1". If Active, Lambda will respect any tracing header it receives from an upstream service. If no tracing header is received, Lambda will call X-Ray for a tracing decision.
object({
mode = string
})
n/a yes
vpc_config Provide this to allow your function to access your VPC. any n/a yes

Outputs

Name Description
iam_role The IAM Role which the lambda function is attached.
lambda_function The lambda function.

Thanks to