# 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

```hcl
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"]]
    }
  }
}
```

<!-- BEGIN_TF_DOCS — DO NOT EDIT BELOW THIS LINE -->
## Requirements

| Name | Version |
| ---- | ------- |
| <a name="requirement_terraform"></a> [terraform](#requirement_terraform) | ~> 1.5 |
| <a name="requirement_aws"></a> [aws](#requirement_aws) | ~> 6.50 |

## Providers

| Name | Version |
| ---- | ------- |
| <a name="provider_aws"></a> [aws](#provider_aws) | 6.50.0 |

## Resources

| Name | Type |
| ---- | ---- |
| [aws_lambda_event_source_mapping.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_event_source_mapping) | resource |
| [aws_lambda_function.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_function) | resource |
| [aws_lambda_layer_version.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_layer_version) | resource |

## Inputs

| Name | Description | Type | Default | Required |
| ---- | ----------- | ---- | ------- | :------: |
| <a name="input_functions"></a> [functions](#input_functions) | Map of Lambda function definitions | <pre>map(object({<br/>    name                           = string<br/>    description                    = optional(string, "")<br/>    runtime                        = string<br/>    handler                        = string<br/>    role_arn                       = string<br/>    filename                       = optional(string, null)<br/>    s3_bucket                      = optional(string, null)<br/>    s3_key                         = optional(string, null)<br/>    s3_object_version              = optional(string, null)<br/>    image_uri                      = optional(string, null)<br/>    architectures                  = optional(list(string), ["x86_64"])<br/>    memory_size                    = optional(number, 128)<br/>    timeout                        = optional(number, 30)<br/>    reserved_concurrent_executions = optional(number, -1)<br/>    publish                        = optional(bool, false)<br/>    kms_key_arn                    = optional(string, null)<br/>    environment                    = optional(map(string), {})<br/>    layers                         = optional(list(string), [])<br/>    # VPC config<br/>    subnet_ids         = optional(list(string), [])<br/>    security_group_ids = optional(list(string), [])<br/>    # Tracing<br/>    tracing_mode = optional(string, "PassThrough")<br/>    # Event source mappings<br/>    event_sources = optional(list(object({<br/>      event_source_arn         = string<br/>      batch_size               = optional(number, 10)<br/>      starting_position        = optional(string, null)<br/>      function_response_types  = optional(list(string), [])<br/>      bisect_on_function_error = optional(bool, true)<br/>    })), [])<br/>  }))</pre> | `{}` | no |
| <a name="input_layers"></a> [layers](#input_layers) | Map of Lambda layer definitions | <pre>map(object({<br/>    name                     = string<br/>    description              = optional(string, "")<br/>    filename                 = optional(string, null)<br/>    s3_bucket                = optional(string, null)<br/>    s3_key                   = optional(string, null)<br/>    compatible_runtimes      = optional(list(string), [])<br/>    compatible_architectures = optional(list(string), ["x86_64"])<br/>  }))</pre> | `{}` | no |
| <a name="input_tags"></a> [tags](#input_tags) | Resource tags to apply to all resources | `map(string)` | `{}` | no |

## Outputs

| Name | Description |
| ---- | ----------- |
| <a name="output_function_arns"></a> [function_arns](#output_function_arns) | Map of function logical key to ARN |
| <a name="output_function_names"></a> [function_names](#output_function_names) | Map of function logical key to function name |
| <a name="output_invoke_arns"></a> [invoke_arns](#output_invoke_arns) | Map of function logical key to invoke ARN (for API Gateway integration) |
| <a name="output_layer_arns"></a> [layer_arns](#output_layer_arns) | Map of layer logical key to version ARN |
| <a name="output_qualified_arns"></a> [qualified_arns](#output_qualified_arns) | Map of function logical key to qualified ARN (with version suffix when publish = true) |
<!-- END_TF_DOCS — DO NOT EDIT ABOVE THIS LINE -->
