main.tf 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. resource "aws_placement_group" "interconnects" {
  2. # Distribute them
  3. name = "interconnects"
  4. strategy = "spread"
  5. }
  6. data "aws_security_group" "aws_endpoints_sg" {
  7. name = "aws_endpoints"
  8. vpc_id = var.security_vpc
  9. }
  10. module "typical_host_security_group" {
  11. source = "../../submodules/security_group/typical_host"
  12. vpc_id = var.security_vpc
  13. cidr_map = var.cidr_map
  14. tags = merge(var.standard_tags, var.tags)
  15. aws_region = var.aws_region
  16. aws_partition = var.aws_partition
  17. aws_endpoints_sg = data.aws_security_group.aws_endpoints_sg.id
  18. }
  19. resource "aws_network_interface" "interconnects" {
  20. count = var.interconnects_count
  21. subnet_id = var.subnet_id_map["untrusted"][count.index % 2]
  22. security_groups = [ module.typical_host_security_group.id, aws_security_group.interconnects_sg.id ]
  23. source_dest_check = false
  24. private_ips_count = 0
  25. description = "XDR Interconnect ${count.index}"
  26. tags = {
  27. Name = "interconnect-${count.index}"
  28. }
  29. }
  30. resource "aws_eip" "interconnects" {
  31. count = var.interconnects_count
  32. vpc = true
  33. tags = {
  34. Name = "interconnect-${count.index}"
  35. }
  36. }
  37. resource "aws_eip_association" "interconnects" {
  38. count = var.interconnects_count
  39. network_interface_id = aws_network_interface.interconnects[count.index].id
  40. allocation_id = aws_eip.interconnects[count.index].id
  41. }
  42. resource "aws_instance" "interconnects" {
  43. count = var.interconnects_count
  44. availability_zone = var.azs[count.index % 2]
  45. placement_group = aws_placement_group.interconnects.id
  46. tenancy = "default"
  47. ebs_optimized = true
  48. disable_api_termination = var.instance_termination_protection
  49. instance_initiated_shutdown_behavior = "stop"
  50. instance_type = var.interconnects_instance_type
  51. key_name = var.interconnects_key_name
  52. monitoring = false
  53. ami = data.aws_ami.minion.id
  54. lifecycle { ignore_changes = [ ami, key_name, user_data ] }
  55. tags = merge(
  56. var.standard_tags,
  57. var.tags,
  58. {
  59. Name = "interconnect-${count.index}"
  60. }
  61. )
  62. volume_tags = merge(
  63. var.standard_tags,
  64. var.tags,
  65. {
  66. Name = "interconnect-${count.index}"
  67. }
  68. )
  69. root_block_device {
  70. volume_type = "gp2"
  71. #volume_size = "60"
  72. delete_on_termination = true
  73. }
  74. network_interface {
  75. device_index = 0
  76. network_interface_id = aws_network_interface.interconnects[count.index].id
  77. }
  78. user_data = data.template_cloudinit_config.cloud-init[count.index].rendered
  79. iam_instance_profile = "msoc-default-instance-profile"
  80. #lifecycle {
  81. # This might allow us to update/replace easier?
  82. #create_before_destroy = true
  83. #}
  84. }
  85. # DNS Records don't support count yet! Time to migrate to 0.13 beta!
  86. # Seriously, though, if we change the count, we will have to change
  87. # this module, _if_ we want DNS entries.
  88. module "private_dns_record_0" {
  89. source = "../../submodules/dns/private_A_record"
  90. name = "interconnect-0"
  91. ip_addresses = [ aws_instance.interconnects[0].private_ip ]
  92. dns_info = var.dns_info
  93. providers = {
  94. aws.c2 = aws.c2
  95. }
  96. }
  97. module "private_dns_record_1" {
  98. source = "../../submodules/dns/private_A_record"
  99. name = "interconnect-1"
  100. ip_addresses = [ aws_instance.interconnects[1].private_ip ]
  101. dns_info = var.dns_info
  102. providers = {
  103. aws.c2 = aws.c2
  104. }
  105. }
  106. module "public_dns_record_0" {
  107. source = "../../submodules/dns/public_A_record"
  108. name = "interconnect-0"
  109. ip_addresses = [ aws_eip.interconnects[0].public_ip ]
  110. dns_info = var.dns_info
  111. providers = {
  112. aws.mdr-common-services-commercial = aws.mdr-common-services-commercial
  113. }
  114. }
  115. module "public_dns_record_1" {
  116. source = "../../submodules/dns/public_A_record"
  117. name = "interconnect-1"
  118. ip_addresses = [ aws_eip.interconnects[1].public_ip ]
  119. dns_info = var.dns_info
  120. providers = {
  121. aws.mdr-common-services-commercial = aws.mdr-common-services-commercial
  122. }
  123. }