1
- provider "aws" {
2
- region = " us-east-2"
3
- }
4
-
5
1
data "aws_region" "current" {}
6
2
7
3
resource "aws_iam_role" "iam_for_lambda" {
@@ -21,56 +17,56 @@ resource "aws_iam_role" "iam_for_lambda" {
21
17
})
22
18
}
23
19
24
- resource "aws_iam_role_policy" "logs" {
25
- name = " lambda-logs"
26
- role = aws_iam_role. iam_for_lambda . name
27
- policy = jsonencode ({
28
- " Statement" : [
29
- {
30
- " Action" : [
31
- " logs:CreateLogGroup" ,
32
- " logs:CreateLogStream" ,
33
- " logs:PutLogEvents" ,
34
- ],
35
- " Effect" : " Allow" ,
36
- " Resource" : " arn:aws:logs:*:*:*" ,
37
- },
38
- {
39
- " Action" : [
40
- " s3:GetObject" ,
41
- ],
42
- " Effect" : " Allow" ,
43
- " Resource" : [
44
- for bucket in toset (var. bucket_names ) : " arn:aws:s3:::${ bucket } /*"
45
- ]
46
- },
47
- {
48
- " Action" : [
49
- " kms:Decrypt" ,
50
- ],
51
- " Effect" : " Allow" ,
52
- " Resource" : " arn:aws:kms:*:*:*" ,
53
- },
54
- {
55
- " Action" : [
56
- " ec2:DescribeNetworkInterfaces" ,
57
- " ec2:CreateNetworkInterface" ,
58
- " ec2:DeleteNetworkInterface" ,
59
- " ec2:DescribeInstances" ,
60
- " ec2:AttachNetworkInterface"
61
- ],
62
- " Effect" : " Allow" ,
63
- " Resource" : " *" ,
64
- },
65
- {
66
- " Action" : [
67
- " kinesis:*" ,
68
- ],
69
- " Effect" : " Allow" ,
70
- " Resource" : " *"
71
- }
20
+ data "aws_iam_policy_document" "logs" {
21
+ statement {
22
+ actions = [
23
+ " logs:CreateLogGroup" ,
24
+ " logs:CreateLogStream" ,
25
+ " logs:PutLogEvents" ,
72
26
]
73
- })
27
+ resources = [" arn:aws:logs:*:*:*" ]
28
+ }
29
+
30
+ dynamic "statement" {
31
+ for_each = var. bucket_names
32
+ content {
33
+ actions = [
34
+ " s3:GetObject" ,
35
+ ]
36
+ resources = [" arn:aws:s3:::${ statement . value } /*" ]
37
+ }
38
+ }
39
+
40
+ statement {
41
+ actions = [
42
+ " kms:Decrypt" ,
43
+ ]
44
+ resources = [" arn:aws:kms:*:*:*" ]
45
+ }
46
+
47
+ statement {
48
+ actions = [
49
+ " ec2:DescribeNetworkInterfaces" ,
50
+ " ec2:CreateNetworkInterface" ,
51
+ " ec2:DeleteNetworkInterface" ,
52
+ " ec2:DescribeInstances" ,
53
+ " ec2:AttachNetworkInterface" ,
54
+ ]
55
+ resources = [" *" ]
56
+ }
57
+
58
+ statement {
59
+ actions = [
60
+ " kinesis:*" ,
61
+ ]
62
+ resources = [" *" ]
63
+ }
64
+ }
65
+
66
+ resource "aws_iam_role_policy" "logs" {
67
+ name = " lambda-logs"
68
+ role = aws_iam_role. iam_for_lambda . name
69
+ policy = data. aws_iam_policy_document . logs . json
74
70
}
75
71
76
72
data "aws_iam_policy" "lambda_vpc_execution" {
@@ -113,7 +109,7 @@ resource "aws_lambda_function" "lambda_promtail" {
113
109
KEEP_STREAM = var.keep_stream
114
110
BATCH_SIZE = var.batch_size
115
111
EXTRA_LABELS = var.extra_labels
116
- OMIT_EXTRA_LABELS_PREFIX = var.omit_extra_labels_prefix
112
+ OMIT_EXTRA_LABELS_PREFIX = var.omit_extra_labels_prefix ? " true " : " false "
117
113
TENANT_ID = var.tenant_id
118
114
SKIP_TLS_VERIFY = var.skip_tls_verify
119
115
PRINT_LOG_LINE = var.print_log_line
@@ -142,7 +138,7 @@ resource "aws_lambda_permission" "lambda_promtail_allow_cloudwatch" {
142
138
# However, if you need to provide an actual filter_pattern for a specific log group you should
143
139
# copy this block and modify it accordingly.
144
140
resource "aws_cloudwatch_log_subscription_filter" "lambdafunction_logfilter" {
145
- for_each = toset ( var. log_group_names )
141
+ for_each = var. log_group_names
146
142
name = " lambdafunction_logfilter_${ each . value } "
147
143
log_group_name = each. value
148
144
destination_arn = aws_lambda_function. lambda_promtail . arn
@@ -152,15 +148,15 @@ resource "aws_cloudwatch_log_subscription_filter" "lambdafunction_logfilter" {
152
148
}
153
149
154
150
resource "aws_lambda_permission" "allow-s3-invoke-lambda-promtail" {
155
- for_each = toset ( var. bucket_names )
151
+ for_each = var. bucket_names
156
152
action = " lambda:InvokeFunction"
157
153
function_name = aws_lambda_function. lambda_promtail . arn
158
154
principal = " s3.amazonaws.com"
159
155
source_arn = " arn:aws:s3:::${ each . value } "
160
156
}
161
157
162
158
resource "aws_kinesis_stream" "kinesis_stream" {
163
- for_each = toset ( var. kinesis_stream_name )
159
+ for_each = var. kinesis_stream_name
164
160
name = each. value
165
161
shard_count = 1
166
162
retention_period = 48
@@ -176,15 +172,15 @@ resource "aws_kinesis_stream" "kinesis_stream" {
176
172
}
177
173
178
174
resource "aws_lambda_event_source_mapping" "kinesis_event_source" {
179
- for_each = toset ( var. kinesis_stream_name )
175
+ for_each = var. kinesis_stream_name
180
176
event_source_arn = aws_kinesis_stream. kinesis_stream [each . key ]. arn
181
177
function_name = aws_lambda_function. lambda_promtail . arn
182
178
starting_position = " LATEST"
183
179
depends_on = [aws_kinesis_stream . kinesis_stream ]
184
180
}
185
181
186
182
resource "aws_s3_bucket_notification" "push-to-lambda-promtail" {
187
- for_each = toset ( var. bucket_names )
183
+ for_each = var. bucket_names
188
184
bucket = each. value
189
185
190
186
lambda_function {
0 commit comments