Repository navigation
Expand file tree
/
Copy pathlambda.tf
More file actions
152 lines (130 loc) · 5.05 KB
/
Copy pathlambda.tf
File metadata and controls
152 lines (130 loc) · 5.05 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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
data "archive_file" "scenarios" {
type = "zip"
source_dir = "${path.module}/lambda/scenarios"
output_path = "${path.module}/build/scenarios.zip"
}
data "archive_file" "tests" {
type = "zip"
source_dir = "${path.module}/lambda/tests"
output_path = "${path.module}/build/tests.zip"
}
data "archive_file" "failure_handler" {
type = "zip"
source_dir = "${path.module}/lambda/failure_handler"
output_path = "${path.module}/build/failure_handler.zip"
}
data "archive_file" "region_dispatch" {
type = "zip"
source_dir = "${path.module}/lambda/region_dispatch"
output_path = "${path.module}/build/region_dispatch.zip"
}
resource "aws_cloudwatch_log_group" "lambda_scenarios" {
name = "/aws/lambda/${var.name_prefix}-scenarios"
retention_in_days = var.log_retention_days
tags = var.tags
}
resource "aws_cloudwatch_log_group" "lambda_tests" {
name = "/aws/lambda/${var.name_prefix}-tests"
retention_in_days = var.log_retention_days
tags = var.tags
}
resource "aws_cloudwatch_log_group" "lambda_failure_handler" {
name = "/aws/lambda/${var.name_prefix}-failure-handler"
retention_in_days = var.log_retention_days
tags = var.tags
}
resource "aws_cloudwatch_log_group" "lambda_region_dispatch" {
name = "/aws/lambda/${var.name_prefix}-region-dispatch"
retention_in_days = var.log_retention_days
tags = var.tags
}
resource "aws_lambda_function" "scenarios" {
function_name = "${var.name_prefix}-scenarios"
filename = data.archive_file.scenarios.output_path
source_code_hash = data.archive_file.scenarios.output_base64sha256
handler = "handler.lambda_handler"
runtime = "python3.13"
role = aws_iam_role.lambda_scenarios.arn
timeout = var.lambda_timeout
memory_size = var.lambda_memory_size
environment {
variables = {
SCENARIOS_TABLE = aws_dynamodb_table.test_scenarios.name
STATE_MACHINE_ARN = aws_sfn_state_machine.load_test.arn
SCHEDULER_ROLE_ARN = aws_iam_role.scheduler_invoke.arn
SCHEDULER_GROUP_NAME = aws_scheduler_schedule_group.scenario_schedules.name
REGIONAL_STATE_MACHINES = jsonencode(local.regional_state_machines)
}
}
# Registration only needs the role ARN, but the first real invocation
# right after apply can race IAM propagation — same guard already used
# for the ECS task definition and the state machine.
depends_on = [
aws_iam_role_policy.lambda_scenarios,
aws_iam_role_policy_attachment.lambda_scenarios_basic,
aws_cloudwatch_log_group.lambda_scenarios,
]
tags = var.tags
}
resource "aws_lambda_function" "tests" {
function_name = "${var.name_prefix}-tests"
filename = data.archive_file.tests.output_path
source_code_hash = data.archive_file.tests.output_base64sha256
handler = "handler.lambda_handler"
runtime = "python3.13"
role = aws_iam_role.lambda_tests.arn
timeout = var.lambda_timeout
memory_size = var.lambda_memory_size
environment {
variables = {
TEST_RUNS_TABLE = aws_dynamodb_table.test_runs.name
RESULTS_BUCKET = aws_s3_bucket.load_testing.id
}
}
depends_on = [
aws_iam_role_policy.lambda_tests,
aws_iam_role_policy_attachment.lambda_tests_basic,
aws_cloudwatch_log_group.lambda_tests,
]
tags = var.tags
}
resource "aws_lambda_function" "failure_handler" {
function_name = "${var.name_prefix}-failure-handler"
filename = data.archive_file.failure_handler.output_path
source_code_hash = data.archive_file.failure_handler.output_base64sha256
handler = "handler.lambda_handler"
runtime = "python3.13"
role = aws_iam_role.lambda_failure_handler.arn
timeout = var.lambda_timeout
memory_size = var.lambda_memory_size
environment {
variables = {
TEST_RUNS_TABLE = aws_dynamodb_table.test_runs.name
}
}
# A test can fail within seconds of a fresh apply, so this Lambda gets the
# same IAM-propagation guard as everything else that can be invoked
# immediately after `terraform apply` finishes.
depends_on = [
aws_iam_role_policy.lambda_failure_handler,
aws_iam_role_policy_attachment.lambda_failure_handler_basic,
aws_cloudwatch_log_group.lambda_failure_handler,
]
tags = var.tags
}
resource "aws_lambda_function" "region_dispatch" {
function_name = "${var.name_prefix}-region-dispatch"
filename = data.archive_file.region_dispatch.output_path
source_code_hash = data.archive_file.region_dispatch.output_base64sha256
handler = "handler.lambda_handler"
runtime = "python3.13"
role = aws_iam_role.lambda_region_dispatch.arn
timeout = var.lambda_timeout
memory_size = var.lambda_memory_size
depends_on = [
aws_iam_role_policy.lambda_region_dispatch,
aws_iam_role_policy_attachment.lambda_region_dispatch_basic,
aws_cloudwatch_log_group.lambda_region_dispatch,
]
tags = var.tags
}