Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nozaq/terraform-aws-lambda-auto-package
A terraform module to define a lambda function which source files are automatically built and packaged for lambda deployment.
https://github.com/nozaq/terraform-aws-lambda-auto-package
aws devops lambda terraform terraform-modules
Last synced: 2 months ago
JSON representation
A terraform module to define a lambda function which source files are automatically built and packaged for lambda deployment.
- Host: GitHub
- URL: https://github.com/nozaq/terraform-aws-lambda-auto-package
- Owner: nozaq
- License: mit
- Created: 2019-08-04T11:58:47.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2023-01-14T07:08:47.000Z (almost 2 years ago)
- Last Synced: 2024-09-27T19:21:35.395Z (3 months ago)
- Topics: aws, devops, lambda, terraform, terraform-modules
- Language: HCL
- Homepage:
- Size: 54.7 KB
- Stars: 27
- Watchers: 4
- Forks: 22
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-tf - terraform-aws-lambda-auto-package - A terraform module to define a lambda function which source files are automatically built and packaged for lambda deployment. (Community Modules / Miscellaneous)
README
# terraform-aws-lambda-auto-package
[![Github Actions](https://github.com/nozaq/terraform-aws-lambda-auto-package/actions/workflows/main.yml/badge.svg)](https://github.com/nozaq/terraform-aws-lambda-auto-package/actions/workflows/main.yml)
[![Releases](https://img.shields.io/github/v/release/nozaq/terraform-aws-lambda-auto-package)](https://github.com/nozaq/terraform-aws-lambda-auto-package/releases/tag/latest)[Terraform Module Registry](https://registry.terraform.io/modules/nozaq/lambda-auto-package/aws)
A terraform module to define a 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
```hcl
module "lambda" {
source = "nozaq/lambda-auto-package/aws"source_dir = "${path.module}/source"
output_path = "${path.module}/source.zip"build_triggers = {
requirements = "${base64sha256(file("${path.module}/source/requirements.txt"))}"
execute = "${base64sha256(file("${path.module}/pip.sh"))}"
}
build_command = "${path.module}/pip.sh ${path.module}/source"iam_role_name_prefix = "example-lambda-role"
function_name = "example-lambda"
handler = "main.handler"
runtime = "python3.7"environment = {
variables = {
EXAMPLE_VAR = "foobar"
}
}
}
```Check [examples](./examples) for non-python examples.
## Requirements
| Name | Version |
|------|---------|
| [terraform](#requirement\_terraform) | >= 0.15.0 |
| [archive](#requirement\_archive) | >= 2.2.0 |
| [aws](#requirement\_aws) | >= 3.50.0 |
| [null](#requirement\_null) | >= 3.1.0 |## Providers
| Name | Version |
|------|---------|
| [archive](#provider\_archive) | >= 2.2.0 |
| [aws](#provider\_aws) | >= 3.50.0 |
| [null](#provider\_null) | >= 3.1.0 |## Inputs
| Name | Description | Type | Required |
|------|-------------|------|:--------:|
| [function\_name](#input\_function\_name) | A unique name for your Lambda Function. | `string` | yes |
| [handler](#input\_handler) | The function entrypoint in your code. | `string` | yes |
| [output\_path](#input\_output\_path) | A path to which the source directory is archived before uploading to AWS. | `string` | yes |
| [runtime](#input\_runtime) | The identifier of the function's runtime. | `string` | yes |
| [source\_dir](#input\_source\_dir) | A path to the directory which contains source files. | `string` | yes |
| [allowed\_services](#input\_allowed\_services) | A list of AWS Services that are allowed to access this lambda. | `list(string)` | no |
| [build\_command](#input\_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](#input\_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. | `map(string)` | no |
| [dead\_letter\_config](#input\_dead\_letter\_config) | Nested block to configure the function's dead letter queue. |object({| no |
target_arn = string
})
| [description](#input\_description) | Description of what your Lambda Function does. | `string` | no |
| [environment](#input\_environment) | A map that defines environment variables for the Lambda function. |object({| no |
variables = map(string)
})
| [exclude\_files](#input\_exclude\_files) | A list of directories or folders to ignore, e.g.
exclude\_files = ["test", "src/**/*.ts"] | `list(string)` | no |
| [iam\_role\_name\_prefix](#input\_iam\_role\_name\_prefix) | The prefix string for the name of IAM role for the lambda function. | `string` | no |
| [kms\_key\_id](#input\_kms\_key\_id) | The ARN of the KMS Key to use when encrypting log data. | `string` | no |
| [lambda\_kms\_key\_arn](#input\_lambda\_kms\_key\_arn) | The ARN of the KMS Key to use when encrypting environment variables. Ignored unless `environment` is specified. | `string` | no |
| [layers](#input\_layers) | List of Lambda Layer Version ARNs (maximum of 5) to attach to your Lambda Function. | `list(string)` | no |
| [memory\_size](#input\_memory\_size) | Amount of memory in MB your Lambda Function can use at runtime. | `number` | no |
| [permissions\_boundary](#input\_permissions\_boundary) | ARN of the policy that is used to set the permissions boundary for the role. | `string` | no |
| [policy\_arns](#input\_policy\_arns) | A list of IAM policy ARNs attached to the lambda function. | `list(string)` | no |
| [publish](#input\_publish) | Whether to publish creation/change as new Lambda Function Version. | `bool` | no |
| [reserved\_concurrent\_executions](#input\_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. | `number` | no |
| [retention\_in\_days](#input\_retention\_in\_days) | Specifies the number of days you want to retain log events in the specified log group. | `number` | no |
| [tags](#input\_tags) | A mapping of tags to assign to resources. | `map(string)` | no |
| [timeout](#input\_timeout) | The maximum number of seconds the lambda function to run until timeout. | `number` | no |
| [tracing\_config](#input\_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({| no |
mode = string
})
| [vpc\_config](#input\_vpc\_config) | Provide this to allow your function to access your VPC. |object({| no |
security_group_ids = list(string)
subnet_ids = list(string)
})## Outputs
| Name | Description |
|------|-------------|
| [iam\_role](#output\_iam\_role) | The IAM Role which the lambda function is attached. |
| [lambda\_function](#output\_lambda\_function) | The lambda function. |