mirror of https://gitlab.com/bashrc2/epicyon
				
				
				
			
		
			
				
	
	
		
			164 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			HCL
		
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			HCL
		
	
	
| resource "aws_vpc" "epicyon_vpc" {
 | |
|   cidr_block       = var.vpc_cidr_block
 | |
| 
 | |
|   tags = {
 | |
|     Name = "epicyon_vpc"
 | |
|   }
 | |
| }
 | |
| 
 | |
| resource "aws_subnet" "epicyon_subnet" {
 | |
|   vpc_id     = aws_vpc.epicyon_vpc.id
 | |
|   cidr_block = var.subnet_cidr
 | |
| 
 | |
|   tags = {
 | |
|     Name = "epicyon_subnet"
 | |
|   }
 | |
| }
 | |
| 
 | |
| resource "aws_internet_gateway" "epicyon_gw" {
 | |
|   vpc_id = aws_vpc.epicyon_vpc.id
 | |
| 
 | |
|   tags = {
 | |
|     Name = "epicyon_gw"
 | |
|   }
 | |
| }
 | |
| 
 | |
| resource "aws_route_table" "epicyon_route_table" {
 | |
|   vpc_id = aws_vpc.epicyon_vpc.id
 | |
| 
 | |
|   route {
 | |
|     cidr_block = var.route_cidr_block
 | |
|     gateway_id = aws_internet_gateway.epicyon_gw.id
 | |
|   }
 | |
| }
 | |
| 
 | |
| resource "aws_route_table_association" "epicyon_route_table_association" {
 | |
|   subnet_id      = aws_subnet.epicyon_subnet.id
 | |
|   route_table_id = aws_route_table.epicyon_route_table.id
 | |
| }
 | |
| 
 | |
| resource "aws_security_group" "epicyon_sg" {
 | |
|   name        = "epicyon_sg"
 | |
|   description = "Allow all incoming traffic"
 | |
|   vpc_id      = aws_vpc.epicyon_vpc.id
 | |
| 
 | |
|   dynamic "ingress" {
 | |
|     for_each = toset(var.domain == "" ? [8080] : [80, 443])
 | |
|     content {
 | |
|       cidr_blocks = [
 | |
|         "0.0.0.0/0"
 | |
|       ]
 | |
|       from_port = ingress.value
 | |
|       to_port   = ingress.value
 | |
|       protocol  = "tcp"
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   egress {
 | |
|     from_port   = 0
 | |
|     to_port     = 0
 | |
|     protocol    = "-1"
 | |
|     cidr_blocks = ["0.0.0.0/0"]
 | |
|   }
 | |
| }
 | |
| 
 | |
| data "aws_ami" "ubuntu" {
 | |
|   most_recent = true
 | |
| 
 | |
|   filter {
 | |
|     name   = "name"
 | |
|     values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
 | |
|   }
 | |
| 
 | |
|   filter {
 | |
|     name   = "virtualization-type"
 | |
|     values = ["hvm"]
 | |
|   }
 | |
|   owners = ["099720109477"]
 | |
| }
 | |
| 
 | |
| resource "aws_instance" "epicyon_web" {
 | |
|   ami                         = data.aws_ami.ubuntu.id
 | |
|   iam_instance_profile        = aws_iam_instance_profile.epicyon_instance_profile.id
 | |
|   instance_type               = var.instance_type
 | |
|   associate_public_ip_address = true
 | |
|   subnet_id                   = aws_subnet.epicyon_subnet.id
 | |
|   vpc_security_group_ids      = [aws_security_group.epicyon_sg.id]
 | |
|   key_name                    = var.key_name
 | |
|   tags = {
 | |
|     Name = "epicyon_web"
 | |
|   }
 | |
| }
 | |
| 
 | |
| resource "aws_route53_record" "epicyon_route53" {
 | |
|   zone_id = var.zone_id
 | |
|   name    = var.domain
 | |
|   type    = "A"
 | |
|   ttl     = 300
 | |
|   records = [aws_instance.epicyon_web.public_ip]
 | |
|   depends_on = [aws_instance.epicyon_web]
 | |
| }
 | |
| 
 | |
| resource "aws_iam_role" "epicyon_iam_role" {
 | |
|   name = "epicyon_iam_role"
 | |
|   assume_role_policy = jsonencode({
 | |
|     Version = "2012-10-17"
 | |
|     Statement = [
 | |
|       {
 | |
|         Action = "sts:AssumeRole"
 | |
|         Effect = "Allow"
 | |
|         Sid    = ""
 | |
|         Principal = {
 | |
|           Service = "ec2.amazonaws.com"
 | |
|         }
 | |
|       },
 | |
|     ]
 | |
|   })
 | |
| 
 | |
| resource "aws_iam_instance_profile" "epicyon_instance_profile" {
 | |
|   name = var.profile
 | |
|   role = aws_iam_role.epicyon_role.id
 | |
| }
 | |
| 
 | |
| resource "aws_iam_policy_attachment" "epicyon" {
 | |
|   name       = format("%s-attachment", epicyon)
 | |
|   roles      = [aws_iam_role.epicyon_role.id]
 | |
|   policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
 | |
| }
 | |
| 
 | |
| resource "aws_eip" "epicyon" {
 | |
|   instance = aws_instance.epicyon_web.id
 | |
|   vpc      = true
 | |
| }
 | |
| 
 | |
| resource "aws_eip_association" "epicyon" {
 | |
|   instance_id   = aws_instance.epicyon_web.id
 | |
|   allocation_id = aws_eip.elastic.id
 | |
| }
 | |
| 
 | |
| resource "null_resource" "null_resource_epicyon" {
 | |
|   depends_on=[aws_route53_record.epicyon_route53]
 | |
|   triggers = {
 | |
|     id = timestamp()
 | |
|   }
 | |
|    connection {
 | |
|     agent       = false
 | |
|     type        = "ssh"
 | |
|     host        = [aws_instance.epicyon_web.public_ip]
 | |
|     private_key = file(var.private_key)
 | |
|     user        = "ubuntu"
 | |
|   }
 | |
|   provisioner "file" {
 | |
|     source      = "./templates/startup.sh"
 | |
|     destination = "~/startup.sh"
 | |
|   }
 | |
|   provisioner "remote-exec" {
 | |
|     inline = [
 | |
|       "chmod +x ~/startup.sh",
 | |
|       "export domain=${var.epicyon_domain}",
 | |
|       "export email=${var.email}",
 | |
|       "bash ~/startup.sh"
 | |
|     ]
 | |
|   }
 | |
| }
 |