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"
 | 
						|
    ]
 | 
						|
  }
 | 
						|
}
 |