main.tf 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. provider "aws" {
  2. region = var.region
  3. profile = var.profile
  4. }
  5. module "vpc" {
  6. source = "../tfmodule-aws-2tier-vpc"
  7. region = var.region
  8. profile = var.profile
  9. vpc-name = var.vpc-name
  10. vpc-cidr = var.vpc-cidr
  11. vpc-azs = var.vpc-azs
  12. enable-private = false
  13. common-tags = {
  14. "Owner" = "maguec"
  15. "Project" = "example_terraform"
  16. }
  17. }
  18. module "nodes" {
  19. source = "../tfmodule-aws-redis-enterprise"
  20. region = var.region
  21. profile = var.profile
  22. open-nets = ["76.14.80.208/32"]
  23. data-node-count = 5
  24. re-volume-size = 250
  25. re-instance-type = "m5.4xlarge"
  26. vpc-cidr = var.vpc-cidr
  27. vpc-azs = var.vpc-azs
  28. vpc-name = var.vpc-name
  29. vpc-id = module.vpc.vpc-id
  30. vpc-subnets = module.vpc.subnets-public
  31. allow-public-ssh = 1
  32. enable-flash = true
  33. common-tags = {
  34. "Owner" = "maguec"
  35. "Project" = "example_terraform"
  36. }
  37. }
  38. module "tmux" {
  39. source = "../tfmodule-cloud-tmux"
  40. ssh-key = "${var.vpc-name}.pem"
  41. user = "ubuntu"
  42. nodes = module.nodes.node-ips
  43. }
  44. # Start CP Redis Testernode
  45. resource "aws_instance" "re" {
  46. ami = data.aws_ami.re-ami.id
  47. instance_type = "m5.4xlarge"
  48. availability_zone = "${element(var.vpc-azs, 1)}"
  49. subnet_id = "${element(module.vpc.subnets-public, 1)}"
  50. vpc_security_group_ids = [module.nodes.re-security-group]
  51. source_dest_check = false
  52. key_name = var.vpc-name
  53. tags = merge({ Name = "Tester-${var.vpc-name}-1" }, var.common-tags)
  54. }
  55. resource "aws_eip" "re-eip" {
  56. vpc = true
  57. tags = merge({ Name = "${var.vpc-name}-node-eip-1" }, var.common-tags)
  58. }
  59. resource "aws_eip_association" "re-eip-assoc" {
  60. instance_id = "${element(aws_instance.re.*.id, 1)}"
  61. allocation_id = "${element(aws_eip.re-eip.*.id, 1)}"
  62. depends_on = ["aws_instance.re", "aws_eip.re-eip"]
  63. }
  64. resource "null_resource" "remote-config" {
  65. provisioner "remote-exec" {
  66. connection {
  67. user = "ubuntu"
  68. host = aws_eip.re-eip.public_ip
  69. private_key = "${file("~/.ssh/${var.vpc-name}.pem")}"
  70. agent = true
  71. }
  72. inline = ["sudo apt update > /dev/null && sudo apt install -y python python-pip > /dev/null"]
  73. }
  74. depends_on = ["aws_instance.re", "aws_eip_association.re-eip-assoc"]
  75. }
  76. output "node-ips" {
  77. value = formatlist("ssh -i ~/.ssh/${var.vpc-name}.pem -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ubuntu@%s", module.nodes.node-ips)
  78. }
  79. output "tester-ips" {
  80. value = formatlist("ssh -i ~/.ssh/${var.vpc-name}.pem -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ubuntu@%s", aws_eip.re-eip.public_ip)
  81. }
  82. data "template_file" "raft_group_setup" {
  83. template = "${file("${path.module}/raft_group_setup.tpl")}"
  84. vars = {
  85. node1 = module.nodes.node-internal-ips[0]
  86. node2 = module.nodes.node-internal-ips[1]
  87. node3 = module.nodes.node-internal-ips[2]
  88. node4 = module.nodes.node-internal-ips[3]
  89. node5 = module.nodes.node-internal-ips[4]
  90. }
  91. }
  92. resource "null_resource" "raft_group_setup" {
  93. provisioner "local-exec" {
  94. command = "echo \"${data.template_file.raft_group_setup.rendered}\" > ${path.module}/ansible/raft_group_setup"
  95. }
  96. depends_on = ["data.template_file.raft_group_setup"]
  97. }