Skip to content

Commit 760a490

Browse files
authored
Merge pull request #15 from highwingio/image-uri-option
Add option to specify lambda via image_uri
2 parents 03d6585 + 19bb4a2 commit 760a490

File tree

2 files changed

+40
-5
lines changed

2 files changed

+40
-5
lines changed

main.tf

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ resource "aws_iam_role_policy_attachment" "lambda_insights" {
5252

5353
# S3 object to hold the deployed artifact
5454
resource "aws_s3_bucket_object" "lambda_deploy_object" {
55+
for_each = var.image_uri == null ? [1] : []
5556
bucket = local.deployment_bucket_id
5657
key = "${var.name}/${local.deploy_artifact_key}"
5758
source = var.path
@@ -66,18 +67,19 @@ resource "aws_lambda_function" "lambda" {
6667
function_name = var.name
6768
description = var.description
6869
handler = var.handler
69-
layers = concat(
70+
layers = var.image_uri == null ? concat(
7071
var.layer_arns,
7172
["arn:aws:lambda:us-east-1:580247275435:layer:LambdaInsightsExtension:14"] # ARN for us-east-1
72-
)
73+
) : null
7374
memory_size = var.memory_size
7475
publish = true
7576
reserved_concurrent_executions = var.reserved_concurrent_executions
7677
role = local.role_arn
7778
runtime = var.runtime
78-
s3_bucket = local.deployment_bucket_id
79-
s3_key = aws_s3_bucket_object.lambda_deploy_object.key
80-
s3_object_version = aws_s3_bucket_object.lambda_deploy_object.version_id
79+
s3_bucket = var.image_uri == null ? local.deployment_bucket_id : null
80+
s3_key = var.image_uri == null ? aws_s3_bucket_object.lambda_deploy_object[0].key : null
81+
s3_object_version = var.image_uri == null ? aws_s3_bucket_object.lambda_deploy_object[0].version_id : null
82+
image_uri = var.image_uri
8183
tags = var.tags
8284
timeout = var.timeout
8385

@@ -99,6 +101,30 @@ resource "aws_lambda_function" "lambda" {
99101
tracing_config {
100102
mode = "Active"
101103
}
104+
105+
lifecycle {
106+
precondition {
107+
condition = (var.image_uri != null && var.path == null) || (var.image_uri == null && var.path != null)
108+
error_message = "Cannot specify image_uri AND path"
109+
}
110+
precondition {
111+
condition = (var.image_uri != null && var.handler == null) || (var.image_uri == null && var.handler != null)
112+
error_message = "Cannot specify image_uri AND handler"
113+
}
114+
precondition {
115+
condition = (var.image_uri != null && length(var.layer_arns) == 0) || (var.image_uri == null)
116+
error_message = "Cannot specify image_uri AND layer_arns"
117+
}
118+
precondition {
119+
condition = (var.image_uri != null && var.path == null) || (var.image_uri == null && var.path != null)
120+
error_message = "Cannot specify image_uri AND path"
121+
}
122+
precondition {
123+
condition = (var.image_uri != null && var.runtime == null) || (var.image_uri == null && var.path != null)
124+
error_message = "Cannot specify image_uri AND runtime"
125+
}
126+
}
127+
102128
}
103129

104130
# An alarm to notify of function errors

vars.tf

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ variable "description" {
44
type = string
55
}
66

7+
variable "image_uri" {
8+
default = null
9+
description = "Image URI of the ECR container image for the Lambda Function. Overrides the use of path variable & s3 deployment object"
10+
type = string
11+
}
12+
713
variable "deployment_bucket_id" {
814
default = null
915
description = "ID of S3 bucket that should store our deployment artifacts. Will use the /account/DEPLOYMENT_BUCKET_ID value from SSM unless specified otherwise."
@@ -29,6 +35,7 @@ variable "git_sha" {
2935
}
3036

3137
variable "handler" {
38+
default = null
3239
description = "Name of the handler function inside the artifact (https://docs.aws.amazon.com/lambda/latest/dg/configuration-console.html)"
3340
type = string
3441
}
@@ -62,6 +69,7 @@ variable "notifications_topic_arn" {
6269
}
6370

6471
variable "path" {
72+
default = null
6573
description = "Local path to a zipped artifact containing the function code"
6674
type = string
6775
}
@@ -78,6 +86,7 @@ variable "role_name" {
7886
}
7987

8088
variable "runtime" {
89+
default = null
8190
type = string
8291
description = "Language runtime for the function (https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)"
8392
}

0 commit comments

Comments
 (0)