Minecraft Server mit AWS

MinecraftDer eigene Minecraft Server aus der Cloud. Kein Problem mit Docker, Terraform und AWS. Vom Einsteiger bis zum Powergamer – mit den unterschiedlichen EC2-Instanzen kann die Lösung ganz einfach an den persönlichen Bedarf angepasst werden.

Mal eben einen privaten Server für die nächste Zockerrunde starten. Noch schnell was durchtesten oder einfach die Vorzüge von Pay-per-use genießen. Für alle interessierten Cloudcrafter kommt hier das Rezept.

 

Zutaten

 

Zubereitung

1 – Hol dir die Sourcen

$ git clone https://bitbucket.org/scorb/de.scorban.demo.wordpress.git
Mit Git kannst Du die Sourcen aus dem Bitbucket clonen. Für diesen Artikel brauchst Du die Files im Unterordner „minecraft“.

 

2 – Generier die AWS Security Credentials

Geh auf die AWS Management Console => Identity & Access Management => Create New Users. Leg einen neuen Benutzer an, merk dir die Access Key ID und den Secret Access Key. Über Permissions => Attach Policy musst du dem neuen Benutzer die Policy „Administrator Access“ zuweisen.

Die AWS Security Credentials brauchst Du, um später von Deinem Rechner über Terraform die AWS-API ansprechen zu können. Mit den Policies kannst Du die Berechtigungen für Deinen Benutzer sehr detailliert steuern. Die minimalen Berechtigungen zu ermitteln ist allerdings sehr aufwändig, deshalb vergib hier zunächst Vollzugriff (Administrator Access). Dies solltest Du später anpassen.

 

3 – Setz die AWS Security Credentials als Umgebungsvariablen auf deiner Maschine

TF_VAR_access_key = DEIN_Access_Key_ID

TF_VAR_secret_key = DEIN_Secret_Access_Key

Die AWS Security Credentials sind der Schlüssel zu Deiner AWS Cloud und sollten geheim bleiben. Damit die Security Credentials nicht im Skript abgelegt werden müssen (und somit auch im Git Repository landen könnten), liest Terraform diese zur Laufzeit aus den Umgebungsvariablen TF_VAR_access_key und TF_VAR_secret_key.

 

4 – Erstell ein AWS Key Pair

Geh auf die AWS Management Console => EC2 => Key Pairs => Create Key Pair. Vergib einen Key-Namen und speicher das pem-File auf deinem Rechner.

Das AWS Key Pair benötigst Du für den SSH-Zugriff von Deinem Rechner auf die neu erstellte EC2-Instanz. AWS hinterlegt beim Erstellen einer neuen Maschine einen von Dir angegebenen Schlüssel. Mit dem privaten Schlüssel (pem-File) kannst Du später eine SSH-Verbindung aufbauen. Verlier den Schlüssel nicht – ohne kommst Du nicht mehr auf Deine EC2-Instanz!

 

5 – Verknüpf dein AWS Key Pair mit den Terraform Sourcen

Hinterleg in der Terraform Configuration den AWS Key-Namen (Zeile 45) und setz den Pfad zu deinem pem-File (Zeile 53):

### Create AWS EC2 instance ###
resource "aws_instance" "minecraft" {
    ami = "ami-d3c022bc"
    availability_zone = "eu-central-1a"
    instance_type = "t2.micro"
    key_name = "AWS-minecraft-key"
    security_groups = ["${aws_security_group.minecraft-sg.name}"]
    tags {
        Name = "minecraft"
    }
    provisioner "remote-exec" {
        connection {
            host = "${aws_instance.minecraft.public_ip}"
            private_key = "C:/.../.ssh/AWS-minecraft-key.pem"
            user = "ec2-user"
        }
        script = "bootstrap.sh"
    }
}
Nach dem Erstellen der EC2-Instanz baut Terraform eine SSH-Verbindung für das Bootstrapping der neuen Maschine auf. Zum Aufbau der SSH-Verbindung werden der bei AWS hinterlegte Schlüsselname (key_name) sowie der private Schlüssel (private_key) benötigt.

 

6 – Erstell den Server

.../de.scorban.demo.wordpress/minecraft/terraform$ terraform plan
.../de.scorban.demo.wordpress/minecraft/terraform$ terraform apply
Mit diesen Anweisungen erstellt Terraform:

  • die EC2-Instanz „minecraft“
  • eine Security Group „minecraft-sg“ mit folgenden Freigaben:
    • eingehend Port 22 (SSH-Zugriff)
    • eingehend Port 25565 (Minecraft-Clients)
    • ausgehend alle Ports

Anschließend werden die Docker Engine installiert und der Docker Container mit dem Minecraft Server gestartet.

 

FERTIG

Die Serveradresse findest du über die AWS Management Console: such die EC2-Instanz mit dem Namen „minecraft“ und merk dir die Public IP. Jetzt nur noch den Minecraft-Client starten => Mehrspieler => Direkt verbinden => Serveradresse eintragen => ZOCKEN!!!
 
 


 

Tipps & Tricks

Das Docker Image „scorb/demo_wp_minecraft“ enthält einen Plain Vanilla Minecraft Server 1.9.4.
Wenn du lieber ein anderes Image verwenden möchtest, kannst du das Bootstrap-File „bootstrap.sh“ anpassen. In Zeile 23 wird das Docker Image zum Starten des Containers definiert. Tausche einfach „scorb/demo_wp_minecraft“ gegen ein Docker Image deiner Wahl.

[...]
echo "##### Start docker container #####"
sudo docker pull infra.scorban.de:5000/scorban/minecraft_server:v3
sudo docker run -d -p 25565:25565 --name minecraft scorb/demo_wp_minecraft
Dafür gibt es viele Möglichkeiten, hier zwei Beispiele:

  1. Du kannst die default-server.properties der gestarteten Instanz verändern
    • Bau eine SSH-Verbindung zur EC2-Instanz auf
    • Verbind dich mit dem laufenden Docker Container
      sudo docker exec -i -t mc /bin/bash
    • Verändere die server.properties im Verzeichnis „/minecraft“
    • Restarte den Dockercontainer
      sudo docker stop minecraft
      sudo docker start minecraft
  2. Verwende dein eigenes Docker Image mit server.properties deiner Wahl
    • Bau dir ein eigenes Docker Image, hier ist ein Ansatz für das Dockerfile:
      FROM scorb/demo_wp_minecraft:latest
      ADD server.properties /minecraft/
      
    • Verknüpfe dein Image im Bootstrap-File „bootstrap.sh“ => guckst du Frage 2