Skip to content

Commit af22d00

Browse files
authored
feat: Added support for event source mapping in alias submodule (#320)
1 parent e7bfddf commit af22d00

File tree

7 files changed

+144
-0
lines changed

7 files changed

+144
-0
lines changed

examples/alias/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Note that this example may create resources which cost money. Run `terraform des
3737
| <a name="module_alias_no_refresh"></a> [alias\_no\_refresh](#module\_alias\_no\_refresh) | ../../modules/alias | n/a |
3838
| <a name="module_alias_refresh"></a> [alias\_refresh](#module\_alias\_refresh) | ../../modules/alias | n/a |
3939
| <a name="module_lambda_function"></a> [lambda\_function](#module\_lambda\_function) | ../../ | n/a |
40+
| <a name="module_sqs_events"></a> [sqs\_events](#module\_sqs\_events) | terraform-aws-modules/sqs/aws | ~> 3.0 |
4041

4142
## Resources
4243

@@ -54,6 +55,10 @@ No inputs.
5455
|------|-------------|
5556
| <a name="output_lambda_alias_arn"></a> [lambda\_alias\_arn](#output\_lambda\_alias\_arn) | The ARN of the Lambda Function Alias |
5657
| <a name="output_lambda_alias_description"></a> [lambda\_alias\_description](#output\_lambda\_alias\_description) | Description of alias |
58+
| <a name="output_lambda_alias_event_source_mapping_function_arn"></a> [lambda\_alias\_event\_source\_mapping\_function\_arn](#output\_lambda\_alias\_event\_source\_mapping\_function\_arn) | The the ARN of the Lambda function the event source mapping is sending events to |
59+
| <a name="output_lambda_alias_event_source_mapping_state"></a> [lambda\_alias\_event\_source\_mapping\_state](#output\_lambda\_alias\_event\_source\_mapping\_state) | The state of the event source mapping |
60+
| <a name="output_lambda_alias_event_source_mapping_state_transition_reason"></a> [lambda\_alias\_event\_source\_mapping\_state\_transition\_reason](#output\_lambda\_alias\_event\_source\_mapping\_state\_transition\_reason) | The reason the event source mapping is in its current state |
61+
| <a name="output_lambda_alias_event_source_mapping_uuid"></a> [lambda\_alias\_event\_source\_mapping\_uuid](#output\_lambda\_alias\_event\_source\_mapping\_uuid) | The UUID of the created event source mapping |
5762
| <a name="output_lambda_alias_function_version"></a> [lambda\_alias\_function\_version](#output\_lambda\_alias\_function\_version) | Lambda function version which the alias uses |
5863
| <a name="output_lambda_alias_invoke_arn"></a> [lambda\_alias\_invoke\_arn](#output\_lambda\_alias\_invoke\_arn) | The ARN to be used for invoking Lambda Function from API Gateway |
5964
| <a name="output_lambda_alias_name"></a> [lambda\_alias\_name](#output\_lambda\_alias\_name) | The name of the Lambda Function Alias |

examples/alias/main.tf

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@ resource "random_pet" "this" {
1313
length = 2
1414
}
1515

16+
module "sqs_events" {
17+
source = "terraform-aws-modules/sqs/aws"
18+
version = "~> 3.0"
19+
20+
name = "${random_pet.this.id}-events"
21+
}
22+
1623
module "lambda_function" {
1724
source = "../../"
1825

@@ -29,6 +36,12 @@ module "lambda_function" {
2936

3037
provisioned_concurrent_executions = 1
3138

39+
attach_policies = true
40+
policies = [
41+
"arn:aws:iam::aws:policy/service-role/AWSLambdaSQSQueueExecutionRole",
42+
]
43+
number_of_policies = 1
44+
3245
allowed_triggers = {
3346
APIGatewayAny = {
3447
service = "apigateway"
@@ -60,6 +73,13 @@ module "alias_no_refresh" {
6073
# create_async_event_config = true
6174
# maximum_event_age_in_seconds = 130
6275

76+
event_source_mapping = {
77+
sqs = {
78+
service = "sqs"
79+
event_source_arn = module.sqs_events.sqs_queue_arn
80+
}
81+
}
82+
6383
allowed_triggers = {
6484
AnotherAPIGatewayAny = { # keys should be unique
6585
service = "apigateway"
@@ -92,6 +112,13 @@ module "alias_existing" {
92112
create_async_event_config = true
93113
maximum_event_age_in_seconds = 100
94114

115+
event_source_mapping = {
116+
sqs = {
117+
service = "sqs"
118+
event_source_arn = module.sqs_events.sqs_queue_arn
119+
}
120+
}
121+
95122
allowed_triggers = {
96123
ThirdAPIGatewayAny = {
97124
service = "apigateway"

examples/alias/outputs.tf

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,3 +119,23 @@ output "lambda_alias_function_version" {
119119
description = "Lambda function version which the alias uses"
120120
value = module.alias_refresh.lambda_alias_function_version
121121
}
122+
123+
output "lambda_alias_event_source_mapping_function_arn" {
124+
description = "The the ARN of the Lambda function the event source mapping is sending events to"
125+
value = module.alias_no_refresh.lambda_alias_event_source_mapping_function_arn
126+
}
127+
128+
output "lambda_alias_event_source_mapping_state" {
129+
description = "The state of the event source mapping"
130+
value = module.alias_no_refresh.lambda_alias_event_source_mapping_state
131+
}
132+
133+
output "lambda_alias_event_source_mapping_state_transition_reason" {
134+
description = "The reason the event source mapping is in its current state"
135+
value = module.alias_no_refresh.lambda_alias_event_source_mapping_state_transition_reason
136+
}
137+
138+
output "lambda_alias_event_source_mapping_uuid" {
139+
description = "The UUID of the created event source mapping"
140+
value = module.alias_no_refresh.lambda_alias_event_source_mapping_uuid
141+
}

modules/alias/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ No modules.
134134
|------|------|
135135
| [aws_lambda_alias.no_refresh](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_alias) | resource |
136136
| [aws_lambda_alias.with_refresh](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_alias) | resource |
137+
| [aws_lambda_event_source_mapping.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_event_source_mapping) | resource |
137138
| [aws_lambda_function_event_invoke_config.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_function_event_invoke_config) | resource |
138139
| [aws_lambda_permission.qualified_alias_triggers](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_permission) | resource |
139140
| [aws_lambda_permission.version_triggers](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_permission) | resource |
@@ -153,6 +154,7 @@ No modules.
153154
| <a name="input_description"></a> [description](#input\_description) | Description of the alias. | `string` | `""` | no |
154155
| <a name="input_destination_on_failure"></a> [destination\_on\_failure](#input\_destination\_on\_failure) | Amazon Resource Name (ARN) of the destination resource for failed asynchronous invocations | `string` | `null` | no |
155156
| <a name="input_destination_on_success"></a> [destination\_on\_success](#input\_destination\_on\_success) | Amazon Resource Name (ARN) of the destination resource for successful asynchronous invocations | `string` | `null` | no |
157+
| <a name="input_event_source_mapping"></a> [event\_source\_mapping](#input\_event\_source\_mapping) | Map of event source mapping | `any` | `{}` | no |
156158
| <a name="input_function_name"></a> [function\_name](#input\_function\_name) | The function ARN of the Lambda function for which you want to create an alias. | `string` | `""` | no |
157159
| <a name="input_function_version"></a> [function\_version](#input\_function\_version) | Lambda function version for which you are creating the alias. Pattern: ($LATEST\|[0-9]+). | `string` | `""` | no |
158160
| <a name="input_maximum_event_age_in_seconds"></a> [maximum\_event\_age\_in\_seconds](#input\_maximum\_event\_age\_in\_seconds) | Maximum age of a request that Lambda sends to a function for processing in seconds. Valid values between 60 and 21600. | `number` | `null` | no |
@@ -168,6 +170,10 @@ No modules.
168170
|------|-------------|
169171
| <a name="output_lambda_alias_arn"></a> [lambda\_alias\_arn](#output\_lambda\_alias\_arn) | The ARN of the Lambda Function Alias |
170172
| <a name="output_lambda_alias_description"></a> [lambda\_alias\_description](#output\_lambda\_alias\_description) | Description of alias |
173+
| <a name="output_lambda_alias_event_source_mapping_function_arn"></a> [lambda\_alias\_event\_source\_mapping\_function\_arn](#output\_lambda\_alias\_event\_source\_mapping\_function\_arn) | The the ARN of the Lambda function the event source mapping is sending events to |
174+
| <a name="output_lambda_alias_event_source_mapping_state"></a> [lambda\_alias\_event\_source\_mapping\_state](#output\_lambda\_alias\_event\_source\_mapping\_state) | The state of the event source mapping |
175+
| <a name="output_lambda_alias_event_source_mapping_state_transition_reason"></a> [lambda\_alias\_event\_source\_mapping\_state\_transition\_reason](#output\_lambda\_alias\_event\_source\_mapping\_state\_transition\_reason) | The reason the event source mapping is in its current state |
176+
| <a name="output_lambda_alias_event_source_mapping_uuid"></a> [lambda\_alias\_event\_source\_mapping\_uuid](#output\_lambda\_alias\_event\_source\_mapping\_uuid) | The UUID of the created event source mapping |
171177
| <a name="output_lambda_alias_function_version"></a> [lambda\_alias\_function\_version](#output\_lambda\_alias\_function\_version) | Lambda function version which the alias uses |
172178
| <a name="output_lambda_alias_invoke_arn"></a> [lambda\_alias\_invoke\_arn](#output\_lambda\_alias\_invoke\_arn) | The ARN to be used for invoking Lambda Function from API Gateway |
173179
| <a name="output_lambda_alias_name"></a> [lambda\_alias\_name](#output\_lambda\_alias\_name) | The name of the Lambda Function Alias |

modules/alias/main.tf

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
locals {
2+
alias_arn = try(data.aws_lambda_alias.existing[0].arn, aws_lambda_alias.no_refresh[0].arn, aws_lambda_alias.with_refresh[0].arn, "")
23
version = try(data.aws_lambda_alias.existing[0].function_version, aws_lambda_alias.with_refresh[0].function_version, aws_lambda_alias.no_refresh[0].function_version, "")
34
qualifiers = zipmap(["version", "qualified_alias"], [var.create_version_async_event_config ? true : null, var.create_qualified_alias_async_event_config ? true : null])
45
}
@@ -108,3 +109,58 @@ resource "aws_lambda_permission" "qualified_alias_triggers" {
108109
source_account = try(each.value.source_account, null)
109110
event_source_token = try(each.value.event_source_token, null)
110111
}
112+
113+
resource "aws_lambda_event_source_mapping" "this" {
114+
for_each = { for k, v in var.event_source_mapping : k => v if var.create }
115+
116+
function_name = local.alias_arn
117+
118+
event_source_arn = try(each.value.event_source_arn, null)
119+
120+
batch_size = try(each.value.batch_size, null)
121+
maximum_batching_window_in_seconds = try(each.value.maximum_batching_window_in_seconds, null)
122+
enabled = try(each.value.enabled, null)
123+
starting_position = try(each.value.starting_position, null)
124+
starting_position_timestamp = try(each.value.starting_position_timestamp, null)
125+
parallelization_factor = try(each.value.parallelization_factor, null)
126+
maximum_retry_attempts = try(each.value.maximum_retry_attempts, null)
127+
maximum_record_age_in_seconds = try(each.value.maximum_record_age_in_seconds, null)
128+
bisect_batch_on_function_error = try(each.value.bisect_batch_on_function_error, null)
129+
topics = try(each.value.topics, null)
130+
queues = try(each.value.queues, null)
131+
function_response_types = try(each.value.function_response_types, null)
132+
133+
dynamic "destination_config" {
134+
for_each = try(each.value.destination_arn_on_failure, null) != null ? [true] : []
135+
content {
136+
on_failure {
137+
destination_arn = each.value["destination_arn_on_failure"]
138+
}
139+
}
140+
}
141+
142+
dynamic "self_managed_event_source" {
143+
for_each = try(each.value.self_managed_event_source, [])
144+
content {
145+
endpoints = self_managed_event_source.value.endpoints
146+
}
147+
}
148+
149+
dynamic "source_access_configuration" {
150+
for_each = try(each.value.source_access_configuration, [])
151+
content {
152+
type = source_access_configuration.value["type"]
153+
uri = source_access_configuration.value["uri"]
154+
}
155+
}
156+
157+
dynamic "filter_criteria" {
158+
for_each = try(each.value.filter_criteria, null) != null ? [true] : []
159+
160+
content {
161+
filter {
162+
pattern = try(each.value["filter_criteria"].pattern, null)
163+
}
164+
}
165+
}
166+
}

modules/alias/outputs.tf

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,23 @@ output "lambda_alias_function_version" {
2323
description = "Lambda function version which the alias uses"
2424
value = try(data.aws_lambda_alias.existing[0].function_version, aws_lambda_alias.with_refresh[0].function_version, aws_lambda_alias.no_refresh[0].function_version, "")
2525
}
26+
27+
output "lambda_alias_event_source_mapping_function_arn" {
28+
description = "The the ARN of the Lambda function the event source mapping is sending events to"
29+
value = { for k, v in aws_lambda_event_source_mapping.this : k => v.function_arn }
30+
}
31+
32+
output "lambda_alias_event_source_mapping_state" {
33+
description = "The state of the event source mapping"
34+
value = { for k, v in aws_lambda_event_source_mapping.this : k => v.state }
35+
}
36+
37+
output "lambda_alias_event_source_mapping_state_transition_reason" {
38+
description = "The reason the event source mapping is in its current state"
39+
value = { for k, v in aws_lambda_event_source_mapping.this : k => v.state_transition_reason }
40+
}
41+
42+
output "lambda_alias_event_source_mapping_uuid" {
43+
description = "The UUID of the created event source mapping"
44+
value = { for k, v in aws_lambda_event_source_mapping.this : k => v.uuid }
45+
}

modules/alias/variables.tf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,13 @@ variable "allowed_triggers" {
117117
type = map(any)
118118
default = {}
119119
}
120+
121+
############################################
122+
# Lambda Event Source Mapping
123+
############################################
124+
125+
variable "event_source_mapping" {
126+
description = "Map of event source mapping"
127+
type = any
128+
default = {}
129+
}

0 commit comments

Comments
 (0)