chrisluiz16

ec2-instance-module

Jun 13th, 2023
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.26 KB | None | 0 0
  1. ---------------------------- Ec2-instance module --------------------------------------------------------
  2.  
  3.  
  4.  
  5. -------------------- Userdata.sh -------------------
  6.  
  7. #!/bin/bash
  8.  
  9. echo "ClientAliveInterval 60" >> /etc/ssh/sshd_config
  10. echo "LANG=en_US.utf-8" >> /etc/environment
  11. echo "LC_ALL=en_US.utf-8" >> /etc/environment
  12. service sshd restart
  13.  
  14. yum install docker -y
  15. systemctl restart docker.service
  16. systemctl enable docker.service
  17. usermod -aG docker ec2-user
  18. su - ec2-user
  19. docker network create wp-net
  20. docker volume create mysql-vol
  21. docker volume create wp-vol
  22.  
  23.  
  24. docker image pull mysql:8-debian
  25. docker image pull wordpress:latest
  26.  
  27.  
  28. docker container run \
  29. -d \
  30. --name mysql-server \
  31. --restart always \
  32. --network wp-net \
  33. -v mysql-vol:/var/lib/mysql/ \
  34. -e MYSQL_ROOT_PASSWORD="root@123" \
  35. -e MYSQL_DATABASE="wordpress" \
  36. -e MYSQL_USER="wpuser" \
  37. -e MYSQL_PASSWORD="wpuser@123" \
  38. mysql:8-debian
  39.  
  40. docker container run \
  41. --name wordpress \
  42. --restart always \
  43. --network wp-net \
  44. -d \
  45. -v wp-vol:/var/www/html/ \
  46. -p 80:80 \
  47. -e WORDPRESS_DB_HOST="mysql-server" \
  48. -e WORDPRESS_DB_USER="wpuser" \
  49. -e WORDPRESS_DB_PASSWORD="wpuser@123" \
  50. -e WORDPRESS_DB_NAME="wordpress" \
  51. wordpress:latest
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59. -------------------------------------------- Module --------------------------------------------------------------
  60.  
  61.  
  62. provider "aws" {
  63. region = var.region
  64.  
  65. default_tags {
  66.  
  67. tags = {
  68. "Name" = "${var.project_name}-${var.project_env}"
  69. project_name = var.project_name
  70. project_env = var.project_env
  71.  
  72. }
  73.  
  74.  
  75. }
  76. }
  77.  
  78. resource "aws_security_group" "sg" {
  79. name_prefix = "${var.project_name}-${var.project_env}-"
  80. description = "Allow ssh"
  81.  
  82. ingress {
  83. from_port = 22
  84. to_port = 22
  85. protocol = "tcp"
  86. cidr_blocks = ["0.0.0.0/0"]
  87. ipv6_cidr_blocks = ["::/0"]
  88. }
  89.  
  90. egress {
  91. from_port = 0
  92. to_port = 0
  93. protocol = "-1"
  94. cidr_blocks = ["0.0.0.0/0"]
  95. ipv6_cidr_blocks = ["::/0"]
  96. }
  97. lifecycle {
  98. create_before_destroy = true
  99. }
  100.  
  101. }
  102.  
  103.  
  104. resource "aws_security_group_rule" "attach" {
  105. for_each = toset(var.sg)
  106. type = "ingress"
  107. from_port = each.key
  108. to_port = each.key
  109. protocol = "tcp"
  110. cidr_blocks = ["0.0.0.0/0"]
  111. ipv6_cidr_blocks = ["::/0"]
  112. security_group_id = aws_security_group.sg.id
  113. }
  114.  
  115.  
  116.  
  117. resource "aws_instance" "project" {
  118. ami = var.ami_id
  119. instance_type = var.instance_type
  120. key_name = var.key_name
  121. vpc_security_group_ids = [aws_security_group.sg.id]
  122. user_data = file("userdata.sh")
  123. depends_on = [aws_security_group_rule.attach]
  124. }
  125.  
  126.  
  127.  
  128. --------------------------------- Calling from module -----------------------------------------------------
  129.  
  130.  
  131. module "ec2_instance" {
  132. source = "/home/ec2-user/project/ec2-instance"
  133. project_name = var.project_name
  134. project_env = var.project_env
  135.  
  136. }
  137.  
  138. data "aws_route53_zone" "fetch" {
  139. name = "chrisich.fun"
  140. }
  141.  
  142. resource "aws_route53_record" "www" {
  143. zone_id = data.aws_route53_zone.fetch.id
  144. name = var.domain_name
  145. type = "A"
  146. ttl = 5
  147. records = [module.ec2_instance.public_ip]
  148. }
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
Advertisement
Add Comment
Please, Sign In to add comment