-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.tf
135 lines (115 loc) · 3.14 KB
/
main.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
provider "aws" {
region = "us-east-1" # Add my desired region
shared_credentials_files = ["~/.aws/credentials"]
}
resource "aws_security_group" "minecraft_server" {
name = "minecraft_server"
description = "Security group for Minecraft server"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 25565
to_port = 25565
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 25565
to_port = 25565
protocol = "udp"
cidr_blocks = ["0.0.0.0/0"]
}
# HTTP and HTTPS requests
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 25565
to_port = 25565
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
#Outbound rules
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
ipv6_cidr_blocks = ["::/0"]
}
}
#Create an elastic IP
resource "aws_eip" "minecraft_eip" {
instance = aws_instance.minecraft_server.id
tags = {
Name = "minecraft-eip"
}
}
#Associate our elastic IP with the minecraft server
resource "aws_eip_association" "minecraft_eip_association" {
instance_id = aws_instance.minecraft_server.id
allocation_id = aws_eip.minecraft_eip.id
}
#Create our EC2 minecraft server instance
resource "aws_instance" "minecraft_server" {
ami = "ami-0bb84b8ffd87024d8" # Amazon Linux 2 AMI ID
instance_type = "t2.medium" # Add my desired instance type
key_name = var.keypair_name # Add my keypair
vpc_security_group_ids = [aws_security_group.minecraft_server.id]
tags = {
Name = "minecraft-server"
}
provisioner "file" {
source = "~/minecraft/scripts/"
destination = "/home/ec2-user/"
connection {
type = "ssh"
user = "ec2-user"
private_key = file(var.pem_location)
host = aws_instance.minecraft_server.public_ip
agent = false # Disable the SSH agent
}
}
#Execute setup commands/scripts
provisioner "remote-exec" {
inline = [
"sudo yum -y install java-17-amazon-corretto-devel",
"wget https://download.getbukkit.org/spigot/spigot-1.20.4.jar",
"chmod +x /home/ec2-user/scripts/server_setup.sh",
"chmod +x /home/ec2-user/scripts/launch.sh",
"sudo /bin/bash /home/ec2-user/scripts/server_setup.sh",
"rm -rf /home/ec2-user/scripts/server_setup.sh",
"sudo /bin/bash /home/ec2-user/scripts/launch.sh &"
]
connection {
type = "ssh"
user = "ec2-user"
private_key = file(var.pem_location)
host = self.public_ip
agent = false # Disable the SSH agent
}
}
}
output "server_ip" {
description = "Elastic IP address of the EC2 instance"
value = aws_eip.minecraft_eip.public_ip
}