├── .gitignore ├── LICENSE ├── README.md ├── examples ├── lambda_python_archive.tf └── python │ ├── my_lambda.py │ └── requirements.txt ├── main.tf ├── outputs.tf ├── scripts └── build_lambda.py └── variables.tf /.gitignore: -------------------------------------------------------------------------------- 1 | # Local .terraform directories 2 | **/.terraform/* 3 | 4 | # .tfstate files 5 | *.tfstate 6 | *.tfstate.* 7 | 8 | # .tfvars files 9 | *.tfvars 10 | 11 | # VSCode junk 12 | .vscode/* 13 | 14 | # OSX Garbage 15 | .DS_Store -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Robert Jordan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # terraform-aws-lamba-python-archive 2 | Package python source and dependencies into Lambda package with stable hash. 3 | 4 | See: https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html 5 | 6 | I created this module because using the standard technique of using an 7 | `archive_file` data source has a few shortcomings: 8 | 1. This doesn't allow processing a requirements file. 9 | 2. Each apply results in a diff in `source_code_hash` becuase the archive includes 10 | metadata and generated files (*.pyc). This module doesn't include file metadata 11 | or .pyc files in the archive so the hash is stable unless the source or dependencies 12 | change. 13 | 14 | ## Example 15 | 16 | ``` 17 | module "python_lambda_archive" { 18 | source = "rojopolis/lambda-python-archive/aws" 19 | 20 | src_dir = "${path.module}/python" 21 | output_path = "${path.module}/lambda.zip" 22 | install_dependencies = false 23 | } 24 | 25 | resource "aws_iam_role" "iam_for_lambda" { 26 | name = "iam_for_lambda" 27 | 28 | assume_role_policy = <