Skip to content

Commit 666722b

Browse files
authored
Merge pull request #43 from lgallard/feature/multiple-log-types
Feature/multiple log types
2 parents b57087b + 7f9d428 commit 666722b

File tree

7 files changed

+74
-47
lines changed

7 files changed

+74
-47
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 0.12.0 (August 26, 2021)
2+
3+
ENHANCEMENTS:
4+
5+
* Add multiple log types support
6+
17
## 0.11.0 (June 8, 2021)
28

39
ENHANCEMENTS:

README.md

+17-5
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,23 @@ module "aws_es" {
4040
}
4141
4242
log_publishing_options = {
43-
enabled = true
44-
log_type = "INDEX_SLOW_LOGS"
43+
index_slow_logs = {
44+
enabled = true
45+
cloudwatch_log_group_arn = "arn:aws:logs:us-east-1:123456789101:log-group:/aws/elasticsearch/index_slow_logs:*"
46+
rog_publishing_options_retention = 90
47+
}
48+
search_slow_logs = {
49+
enabled = true
50+
cloudwatch_log_group_arn = "arn:aws:logs:us-east-1:123456789101:log-group:/aws/elasticsearch/search_slow_logs:*"
51+
}
52+
es_application_logs = {
53+
enabled = true
54+
cloudwatch_log_group_name = "es_application_logs_dev"
55+
}
56+
audit_logs = {
57+
enabled = false
58+
cloudwatch_log_group_name = "audit_logs_dev"
59+
}
4560
}
4661
4762
advanced_options = {
@@ -179,9 +194,6 @@ No modules.
179194
| <a name="input_encrypt_at_rest_enabled"></a> [encrypt\_at\_rest\_enabled](#input\_encrypt\_at\_rest\_enabled) | Whether to enable encryption at rest | `bool` | `true` | no |
180195
| <a name="input_encrypt_at_rest_kms_key_id"></a> [encrypt\_at\_rest\_kms\_key\_id](#input\_encrypt\_at\_rest\_kms\_key\_id) | The KMS key id to encrypt the Elasticsearch domain with. If not specified then it defaults to using the aws/es service KMS key | `string` | `"alias/aws/es"` | no |
181196
| <a name="input_log_publishing_options"></a> [log\_publishing\_options](#input\_log\_publishing\_options) | Options for publishing slow logs to CloudWatch Logs | `any` | `{}` | no |
182-
| <a name="input_log_publishing_options_cloudwatch_log_group_arn"></a> [log\_publishing\_options\_cloudwatch\_log\_group\_arn](#input\_log\_publishing\_options\_cloudwatch\_log\_group\_arn) | iARN of the Cloudwatch log group to which log needs to be published | `string` | `""` | no |
183-
| <a name="input_log_publishing_options_enabled"></a> [log\_publishing\_options\_enabled](#input\_log\_publishing\_options\_enabled) | Specifies whether given log publishing option is enabled or not | `bool` | `true` | no |
184-
| <a name="input_log_publishing_options_log_type"></a> [log\_publishing\_options\_log\_type](#input\_log\_publishing\_options\_log\_type) | A type of Elasticsearch log. Valid values: INDEX\_SLOW\_LOGS, SEARCH\_SLOW\_LOGS, ES\_APPLICATION\_LOGS | `string` | `"INDEX_SLOW_LOGS"` | no |
185197
| <a name="input_log_publishing_options_retention"></a> [log\_publishing\_options\_retention](#input\_log\_publishing\_options\_retention) | Retention in days for the created Cloudwatch log group | `number` | `90` | no |
186198
| <a name="input_node_to_node_encryption"></a> [node\_to\_node\_encryption](#input\_node\_to\_node\_encryption) | Node-to-node encryption options | `any` | `{}` | no |
187199
| <a name="input_node_to_node_encryption_enabled"></a> [node\_to\_node\_encryption\_enabled](#input\_node\_to\_node\_encryption\_enabled) | Whether to enable node-to-node encryption | `bool` | `true` | no |

examples/public/README.md

+17-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,23 @@ module "aws_es" {
2727
}
2828
2929
log_publishing_options = {
30-
enabled = "true"
30+
index_slow_logs = {
31+
enabled = true
32+
cloudwatch_log_group_arn = "arn:aws:logs:us-east-1:123456789101:log-group:/aws/elasticsearch/index_slow_logs:*"
33+
rog_publishing_options_retention = 90
34+
}
35+
search_slow_logs = {
36+
enabled = true
37+
cloudwatch_log_group_arn = "arn:aws:logs:us-east-1:123456789101:log-group:/aws/elasticsearch/search_slow_logs:*"
38+
}
39+
es_application_logs = {
40+
enabled = true
41+
cloudwatch_log_group_name = "es_application_logs_dev"
42+
}
43+
audit_logs = {
44+
enabled = false
45+
cloudwatch_log_group_name = "audit_logs_dev"
46+
}
3147
}
3248
3349
advanced_options = {

examples/public/main.tf

+20-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module "aws_es" {
22

3-
source = "lgallard/elasticsearch/aws"
3+
source = "../../"
44

55
domain_name = var.es_domain_name
66
elasticsearch_version = var.es_version
@@ -19,12 +19,28 @@ module "aws_es" {
1919
}
2020

2121
encrypt_at_rest = {
22-
enabled = true
23-
kms_key_id = "arn:aws:kms:us-east-1:123456789101:key/cccc103b-4ba3-5993-6fc7-b7e538b25fd8"
22+
enabled = true
23+
#kms_key_id = "arn:aws:kms:us-east-1:123456789101:key/cccc103b-4ba3-5993-6fc7-b7e538b25fd8"
2424
}
2525

2626
log_publishing_options = {
27-
enabled = true
27+
index_slow_logs = {
28+
enabled = true
29+
cloudwatch_log_group_arn = "arn:aws:logs:us-east-1:123456789101:log-group:/aws/elasticsearch/index_slow_logs:*"
30+
rog_publishing_options_retention = 90
31+
}
32+
search_slow_logs = {
33+
enabled = true
34+
cloudwatch_log_group_arn = "arn:aws:logs:us-east-1:123456789101:log-group:/aws/elasticsearch/search_slow_logs:*"
35+
}
36+
es_application_logs = {
37+
enabled = true
38+
cloudwatch_log_group_name = "es_application_logs_dev"
39+
}
40+
audit_logs = {
41+
enabled = false
42+
cloudwatch_log_group_name = "audit_logs_dev"
43+
}
2844
}
2945

3046
advanced_options = {

iam.tf

+8-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
resource "aws_cloudwatch_log_group" "es_cloudwatch_log_group" {
2-
count = var.enabled && var.cloudwatch_log_enabled ? 1 : 0
3-
name = "${var.domain_name}-log_group"
4-
tags = var.tags
5-
retention_in_days = var.log_publishing_options_retention
2+
3+
for_each = { for k, v in var.log_publishing_options :
4+
k => v if var.enabled && lookup(v, "enabled", false) && lookup(v, "cloudwatch_log_group_arn", null) == null
5+
}
6+
7+
name = lookup(each.value, "cloudwatch_log_group_name", null)
8+
retention_in_days = lookup(each.value, "log_publishing_options_retention", var.log_publishing_options_retention)
9+
tags = merge(lookup(each.value, "tags", null), var.tags)
610
}
711

812
resource "aws_cloudwatch_log_resource_policy" "es_aws_cloudwatch_log_resource_policy" {

main.tf

+6-16
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,12 @@ resource "aws_elasticsearch_domain" "es_domain" {
113113

114114
# log_publishing_options
115115
dynamic "log_publishing_options" {
116-
for_each = local.log_publishing_options
116+
for_each = { for k, v in var.log_publishing_options :
117+
k => v if var.enabled && lookup(v, "enabled", false)
118+
}
117119
content {
118-
log_type = lookup(log_publishing_options.value, "log_type")
119-
cloudwatch_log_group_arn = lookup(log_publishing_options.value, "cloudwatch_log_group_arn")
120+
log_type = upper(log_publishing_options.key)
121+
cloudwatch_log_group_arn = lookup(log_publishing_options.value, "cloudwatch_log_group_arn", null) != null ? lookup(log_publishing_options.value, "cloudwatch_log_group_arn") : aws_cloudwatch_log_group.es_cloudwatch_log_group[log_publishing_options.key].arn
120122
enabled = lookup(log_publishing_options.value, "enabled")
121123
}
122124
}
@@ -144,9 +146,7 @@ resource "aws_elasticsearch_domain" "es_domain" {
144146
tags = var.tags
145147

146148
# Service-linked role to give Amazon ES permissions to access your VPC
147-
depends_on = [
148-
aws_iam_service_linked_role.es,
149-
]
149+
depends_on = [aws_iam_service_linked_role.es, aws_cloudwatch_log_group.es_cloudwatch_log_group]
150150

151151
}
152152

@@ -244,16 +244,6 @@ locals {
244244

245245
vpc_options = length(lookup(local.vpc_options_default, "subnet_ids")) == 0 ? [] : [local.vpc_options_default]
246246

247-
# log_publishing_options
248-
# If no log_publishing_options list is provided, build a log_publishing_options using the default values
249-
log_publishing_options_default = {
250-
log_type = lookup(var.log_publishing_options, "log_type", null) == null ? var.log_publishing_options_log_type : lookup(var.log_publishing_options, "log_type")
251-
cloudwatch_log_group_arn = lookup(var.log_publishing_options, "cloudwatch_log_group_arn", null) == null ? (var.log_publishing_options_cloudwatch_log_group_arn == "" && var.enabled && var.cloudwatch_log_enabled ? aws_cloudwatch_log_group.es_cloudwatch_log_group[0].arn : var.log_publishing_options_cloudwatch_log_group_arn) : lookup(var.log_publishing_options, "cloudwatch_log_group_arn")
252-
enabled = lookup(var.log_publishing_options, "enabled", null) == null ? var.log_publishing_options_enabled : lookup(var.log_publishing_options, "enabled")
253-
}
254-
255-
log_publishing_options = var.log_publishing_options_enabled == false || lookup(local.log_publishing_options_default, "enabled") == false ? [] : [local.log_publishing_options_default]
256-
257247
# cognito_options
258248
# If no cognito_options list is provided, build a cognito_options using the default values
259249
cognito_options_default = {

variables.tf

-17
Original file line numberDiff line numberDiff line change
@@ -280,23 +280,6 @@ variable "log_publishing_options" {
280280
default = {}
281281
}
282282

283-
variable "log_publishing_options_log_type" {
284-
description = "A type of Elasticsearch log. Valid values: INDEX_SLOW_LOGS, SEARCH_SLOW_LOGS, ES_APPLICATION_LOGS"
285-
type = string
286-
default = "INDEX_SLOW_LOGS"
287-
}
288-
289-
variable "log_publishing_options_cloudwatch_log_group_arn" {
290-
description = "iARN of the Cloudwatch log group to which log needs to be published"
291-
type = string
292-
default = ""
293-
}
294-
295-
variable "log_publishing_options_enabled" {
296-
description = "Specifies whether given log publishing option is enabled or not"
297-
type = bool
298-
default = true
299-
}
300283

301284
variable "log_publishing_options_retention" {
302285
description = "Retention in days for the created Cloudwatch log group"

0 commit comments

Comments
 (0)