How to create a lambda with the code zip file stored in S3?
Using the lambda module from terraform-aws-service catalog, I was getting the following error: ``` │ Error: error creating Lambda Function (1): ValidationException: │ status code: 400, request id: 3523c3f6-c01a-480e-b8bf-c3112a71fb50 │ │ with module.kinesis_lambda.module.lambda_function.aws_lambda_function.function[0], │ on .terraform/modules/kinesis_lambda.lambda_function/modules/lambda/main.tf line 31, in resource "aws_lambda_function" "function": │ 31: resource "aws_lambda_function" "function" { ``` Here is a sample of the terraform code: ```hcl module "kinesis_lambda" { source = "git::git@github.com:gruntwork-io/terraform-aws-service-catalog.git//modules/services/lambda?ref=v0.73.2" name = "name" description = "desc" timeout = 300 memory_size = 512 runtime = "dotnetcore3.1" handler = "KinesisLambda::KinesisLambda.Function::FunctionHandler" s3_bucket = "arn:aws:s3:::${local.org}-shared" s3_key = "lambda/${var.lambda_version}.zip" s3_object_version = null # bucket versioning not enabled in this bucket environment_variables = { ENVIRONMENT = var.env_name } alarm_sns_topic_arns = [data.terraform_remote_state.monitoring.outputs.sns_topic_arn] tags = { Environment : var.env_name } } ```
**Solution**: if bucket versioning is NOT enabled in the S3 bucket, then the `s3_object_version` variable cannot be null. It should be `""`. Also note that `s3_bucket` should be the bucket NAME (not full ARN). An easier way to fix this detail is to always use an `aws_s3_bucket_object` data source like so: ```hcl data "aws_s3_bucket_object" "lambda" { bucket = "${local.org}-shared" key = "lambda/${var.lambda_version}.zip" # bucket versioning not enabled in this bucket } module "kinesis_lambda" { source = "git::git@github.com:gruntwork-io/terraform-aws-service-catalog.git//modules/services/lambda?ref=v0.73.2" ... s3_bucket = data.aws_s3_bucket_object.lambda.bucket s3_key = data.aws_s3_bucket_object.lambda.key s3_object_version = data.aws_s3_bucket_object.lambda.version_id ... } ```