Skip to content
This repository was archived by the owner on Jun 8, 2022. It is now read-only.

feat: support upload lambda to s3, to support fatter lambdas #60

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions archive.tf
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,14 @@ data "external" "built" {
module_relpath = path.module
}
}



resource "aws_s3_bucket_object" "lambda_package" {
count = var.s3_bucket_lambda_package != null ? 1:0
bucket = aws_s3_bucket.lambda_package[0].id
depends_on = [aws_s3_bucket.lambda_package]
key = lookup(data.external.archive.result, "filename")
source = data.external.built.result.filename
etag = "${filemd5(data.external.built.result.filename)}"
}
62 changes: 60 additions & 2 deletions lambda.tf
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
resource "aws_lambda_function" "lambda" {

count = var.s3_bucket_lambda_package != null ? 0:1
function_name = var.function_name
description = var.description
role = aws_iam_role.lambda.arn
Expand All @@ -13,8 +13,8 @@ resource "aws_lambda_function" "lambda" {
tags = var.tags

# Use a generated filename to determine when the source code has changed.

filename = data.external.built.result.filename

depends_on = [null_resource.archive]

# Add dynamic blocks based on variables.
Expand Down Expand Up @@ -48,3 +48,61 @@ resource "aws_lambda_function" "lambda" {
}
}
}

resource "aws_s3_bucket" "lambda_package" {
count = var.s3_bucket_lambda_package != null ? 1:0
bucket = var.s3_bucket_lambda_package
acl = "private"
}

resource "aws_lambda_function" "lambda_from_s3" {
count = var.s3_bucket_lambda_package != null ? 1:0
function_name = var.function_name
description = var.description
role = aws_iam_role.lambda.arn
handler = var.handler
memory_size = var.memory_size
reserved_concurrent_executions = var.reserved_concurrent_executions
runtime = var.runtime
layers = var.layers
timeout = local.timeout
publish = local.publish
tags = var.tags

# Use a generated filename to determine when the source code has changed.
s3_bucket = aws_s3_bucket.lambda_package[0].id
s3_key = lookup(data.external.archive.result, "filename")

depends_on = [null_resource.archive, aws_s3_bucket_object.lambda_package[0]]

# Add dynamic blocks based on variables.

dynamic "dead_letter_config" {
for_each = var.dead_letter_config == null ? [] : [var.dead_letter_config]
content {
target_arn = dead_letter_config.value.target_arn
}
}

dynamic "environment" {
for_each = var.environment == null ? [] : [var.environment]
content {
variables = environment.value.variables
}
}

dynamic "tracing_config" {
for_each = var.tracing_config == null ? [] : [var.tracing_config]
content {
mode = tracing_config.value.mode
}
}

dynamic "vpc_config" {
for_each = var.vpc_config == null ? [] : [var.vpc_config]
content {
security_group_ids = vpc_config.value.security_group_ids
subnet_ids = vpc_config.value.subnet_ids
}
}
}
8 changes: 4 additions & 4 deletions outputs.tf
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
output "function_arn" {
description = "The ARN of the Lambda function"
value = aws_lambda_function.lambda.arn
value = element(concat(aws_lambda_function.lambda.*.arn,aws_lambda_function.lambda_from_s3.*.arn),0)
}

output "function_invoke_arn" {
description = "The Invoke ARN of the Lambda function"
value = aws_lambda_function.lambda.invoke_arn
value = element(concat(aws_lambda_function.lambda.*.invoke_arn,aws_lambda_function.lambda_from_s3.*.invoke_arn),0)
}

output "function_name" {
description = "The name of the Lambda function"
value = aws_lambda_function.lambda.function_name
value = element(concat(aws_lambda_function.lambda.*.function_name,aws_lambda_function.lambda_from_s3.*.function_name),0)
}

output "function_qualified_arn" {
description = "The qualified ARN of the Lambda function"
value = aws_lambda_function.lambda.qualified_arn
value = element(concat(aws_lambda_function.lambda.*.qualified_arn,aws_lambda_function.lambda_from_s3.*.qualified_arn),0)
}

output "role_arn" {
Expand Down
6 changes: 6 additions & 0 deletions variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ variable "source_path" {
type = string
}

variable "s3_bucket_lambda_package" {
description = "s3 bucket to upload lambda package, and deploy lambda code from there, rather than direct post via api - enables fatter lambdas"
type = string
default = null
}

# Optional variables specific to this module.

variable "build_command" {
Expand Down