When you trying to create basic lambda function using this template it failed with error Failed getting S3 object: InvalidParameter: 2 validation error(s) found.
This issue is causing by aws_s3_bucket_object which terraform trying to define in every kind of lambdas.
$ terraform init
Initializing modules...
- module.lambda
Initializing provider plugins...
Terraform has been successfully initialized!
$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.
data.aws_s3_bucket_object.main: Refreshing state...
data.aws_iam_policy_document.assume: Refreshing state...
data.aws_iam_policy_document.lambda: Refreshing state...
Error: Error refreshing state: 1 error(s) occurred:
* module.lambda.data.aws_s3_bucket_object.main: 1 error(s) occurred:
* module.lambda.data.aws_s3_bucket_object.main: data.aws_s3_bucket_object.main: Failed getting S3 object: InvalidParameter: 2 validation error(s) found.
- minimum field size of 1, HeadObjectInput.Bucket.
- minimum field size of 1, HeadObjectInput.Key.
Bucket: "" Object: ""
A possible way how to fix the issue can be added the count meta-argument to the aws_s3_bucket_object main object as well.
data "aws_s3_bucket_object" "main" {
count = "${var.filename == "" ? 1 : 0}"
bucket = "${var.s3_bucket}"
key = "${var.s3_key}"
}