nlb-splunk-data.tf 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #------------------------------------------------------------------------------
  2. # An external NLB for the indexers for splunk-2-splunk
  3. #------------------------------------------------------------------------------
  4. resource "aws_eip" "nlb" {
  5. count = "3" # Could be local.nlb_endpoint_count, but I'd rather reserve all 3
  6. vpc = true
  7. tags = merge(local.standard_tags, var.tags, { "Name" : "${var.prefix}-nlb" })
  8. }
  9. module "public_dns_record_nlb" {
  10. source = "../../../submodules/dns/public_A_record"
  11. name = "${var.prefix}-splunk-indexers"
  12. ip_addresses = aws_eip.nlb.*.public_ip
  13. dns_info = var.dns_info
  14. providers = {
  15. aws.mdr-common-services-commercial = aws.mdr-common-services-commercial
  16. }
  17. }
  18. resource "aws_lb" "nlb" {
  19. tags = merge(local.standard_tags, var.tags, { "Name" : "${var.prefix}-splunk-indexers-nlb" })
  20. name = "${var.prefix}-splunk-indexers-nlb"
  21. internal = false # tfsec:ignore:aws-elb-alb-not-public
  22. load_balancer_type = "network"
  23. #subnets = data.terraform_remote_state.infra.public_subnets
  24. enable_cross_zone_load_balancing = true
  25. dynamic "subnet_mapping" {
  26. # create a subnet endpoint for each subnet where there's an asg group
  27. for_each = [for n in local.splunk_asg_sizes : "yes" if n > 0]
  28. content {
  29. subnet_id = element(var.public_subnets, subnet_mapping.key) # subnet_mapping.key is the index of the list
  30. allocation_id = element(aws_eip.nlb.*.id, subnet_mapping.key)
  31. }
  32. }
  33. access_logs {
  34. bucket = "xdr-elb-${var.environment}"
  35. enabled = true
  36. }
  37. }
  38. resource "aws_lb_target_group" "nlb_targets" {
  39. name = "${var.prefix}-nlb-targets"
  40. port = 9998
  41. protocol = "TCP"
  42. vpc_id = var.vpc_id
  43. }
  44. resource "aws_autoscaling_attachment" "nlb_asg_attachments" {
  45. for_each = toset([module.indexer0.asg_name[0], module.indexer1.asg_name[0], module.indexer2.asg_name[0]])
  46. lb_target_group_arn = aws_lb_target_group.nlb_targets.arn
  47. autoscaling_group_name = each.key
  48. }
  49. resource "aws_lb_listener" "nlb_targets" {
  50. load_balancer_arn = aws_lb.nlb.arn
  51. port = 9998
  52. protocol = "TCP"
  53. default_action {
  54. target_group_arn = aws_lb_target_group.nlb_targets.arn
  55. type = "forward"
  56. }
  57. }