forked from claranet/terraform-aws-lambda
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlambda.tf
More file actions
128 lines (110 loc) · 4.39 KB
/
lambda.tf
File metadata and controls
128 lines (110 loc) · 4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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
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.
filename = data.external.built.result.filename
depends_on = [null_resource.archive]
# 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
}
}
}
# Note the module must manage the s3 bucket, rather than this be created in the caller then passed in
# It's currently a constraint of Terraform when using the conditional (count hack)
# within a module, it can't plan when this depends on a variable that has been passed in
# since TF apparently can't predict such values until apply-time
# see https://github.com/hashicorp/terraform/issues/12570
resource "aws_s3_bucket" "lambda_package" {
count = var.s3_bucket_lambda_package != null ? 1 : 0
bucket = var.s3_bucket_lambda_package
acl = "private"
force_destroy = true
lifecycle_rule {
id = "auto-delete"
enabled = true
expiration {
days = local.s3_lifecycle_delete_days
}
}
}
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
}
}
}
resource "aws_lambda_function_event_invoke_config" "lambda" {
function_name = element(concat(aws_lambda_function.lambda.*.function_name, aws_lambda_function.lambda_from_s3.*.function_name, list("")), 0)
maximum_event_age_in_seconds = var.maximum_event_age_in_seconds
maximum_retry_attempts = var.maximum_retry_attempts
}