README.md

lambda

Creates Lambda functions, layers, event source mappings, and VPC configuration.

Provisions Lambda functions from ZIP or container images, with environment variables, KMS encryption for env vars, optional VPC attachment, X-Ray tracing, reserved concurrency, Lambda layers, and event source mappings for SQS/Kinesis/DynamoDB Streams with bisect-on-error.

Usage

module "lambda" {
  source  = "hcassc.jfrog.io/iac-terraform-modules-virtual/compute/lambda/aws"
  version = "0.1.0"

  functions = {
    handler = {
      name     = "my-handler"
      runtime  = "python3.12"
      handler  = "index.handler"
      role_arn = module.iam_role.arn
      s3_bucket = module.artifacts_bucket.id
      s3_key    = "lambda/handler.zip"
      kms_key_arn = module.kms.key_arn
      environment = {
        ENV = "prod"
      }
      subnet_ids         = module.vpc.private_subnet_id_list
      security_group_ids = [module.security_groups.ids["lambda"]]
    }
  }
}

Requirements

Name Version
terraform ~> 1.5
aws ~> 6.50

Providers

Name Version
aws 6.50.0

Resources

Name Type
aws_lambda_event_source_mapping.this resource
aws_lambda_function.this resource
aws_lambda_layer_version.this resource

Inputs

Name Description Type Default Required
functions Map of Lambda function definitions map(object({ name = string description = optional(string, "") runtime = string handler = string role_arn = string filename = optional(string, null) s3_bucket = optional(string, null) s3_key = optional(string, null) s3_object_version = optional(string, null) image_uri = optional(string, null) architectures = optional(list(string), ["x86_64"]) memory_size = optional(number, 128) timeout = optional(number, 30) reserved_concurrent_executions = optional(number, -1) publish = optional(bool, false) kms_key_arn = optional(string, null) environment = optional(map(string), {}) layers = optional(list(string), []) # VPC config subnet_ids = optional(list(string), []) security_group_ids = optional(list(string), []) # Tracing tracing_mode = optional(string, "PassThrough") # Event source mappings event_sources = optional(list(object({ event_source_arn = string batch_size = optional(number, 10) starting_position = optional(string, null) function_response_types = optional(list(string), []) bisect_on_function_error = optional(bool, true) })), []) })) {} no
layers Map of Lambda layer definitions map(object({ name = string description = optional(string, "") filename = optional(string, null) s3_bucket = optional(string, null) s3_key = optional(string, null) compatible_runtimes = optional(list(string), []) compatible_architectures = optional(list(string), ["x86_64"]) })) {} no
tags Resource tags to apply to all resources map(string) {} no

Outputs

Name Description
function_arns Map of function logical key to ARN
function_names Map of function logical key to function name
invoke_arns Map of function logical key to invoke ARN (for API Gateway integration)
layer_arns Map of layer logical key to version ARN
qualified_arns Map of function logical key to qualified ARN (with version suffix when publish = true)