Das AWS-CLI-Kommando „EC2“ bietet eine große Auswahl an Möglichkeiten, virtuelle Maschinen in AWS zu erstellen, zu steuern und zu verwalten. Der dritte Teil unseres CLI-Workshops befasst sich mit der Suche nach Ressouren, bzw. allgemein mit den Filtermöglichkeiten der Ausgaben, die „jedes“ CLI-Kommando liefert.
Wir haben uns bisher ausschließlich mit dem AWS-CLI-Kommando „aws ec2“ befasst und dabei unter anderem das Sub-Command „run instances“ kennengelernt. So erstellt beispielsweise
aws ec2 run-instances –image-id <ami-id> –user-data file:///home/ec2-user/UserData.txt –key-name <key-name> –security-group-ids <sg-id> –instance-type t2.micro –subnet-id <subnet-id> –associate-public-ip-address –query ‚Instances[*].InstanceId‘
eine neue EC2-Instanz in mit den hervorgehobenen Provisionierungs-Attributen, wie z. B. Image-ID (ami-id), Security-Group (sg-id) oder Subnetz (subnet-id).
Hat der Admin explizit das Ausgabe-Format „JSON“ gewählt oder es via „aws configure“ voreingestellt, liefert jedes CLI-Kommando ein mehr oder weniger komplexes Array aller in der bei „aws configure“ (oder explizit) angegebenen Default-Region vorhandenen Ressourcen. Das abgebildete Kommando filtert den umfangreichen JSON-Output, sodass dieser nur die Instance-ID der erstellten Instanz enthält.
Verwendet der Admin aber beispielsweise „describe instances“, das einfachste und am häufigsten benötige Sub-Command in EC2, so liefert dieses ohne weitere Filterung sämtliche in der Default-Region vorhanden Instanzen zurück – und zwar jede mit all ihren verfügbaren Attributen. Je nach Anzahl der Instanzen kann das Ausgabe-Array also sehr, sehr groß ausfallen, wie die Abbildung zeigt.
Was sind Reservations?
Bei der Analyse des JSON-Files fällt auf, dass die „oberste Ebene“ nicht durch die Instanzen (Instances) gebildet wird, sondern durch die so genannte „Reservation“. Diese hat nicht etwa etwas mit dem Purchase-Typ „Reserved Instances“ zu tun. Vielmehr kann man das Attribut etwa mit „Erstellungs-Anforderung für EC2-Instanzen“ übersetzen.
So lassen sich ja z. B. mit einem einzigen Sub-Command „create-instances“ (oder auch im entsprechenden Dialog der AWS-Management-Console zum Erstellen von EC2-Instanzen) von ein und demselben AMI in einem einzigen Aufruf durchaus mehrere Instanzen des gleichen Typs erzeugen. Diese hätten dann naturgemäß je eine individuelle Instance-ID, aber alle die gleiche Reservation-ID.
Die Reservation-ID ist also ein eindeutiger Wert, der eine Anforderung zum Starten von EC2-Instanzen angibt. So eine Startanforderung kann von der CLI, AutoScaling oder der AWS Management Console stammen. Jede Anforderung nach EC2-Instanzen liefert entweder keine oder mehrere Instanzen zurück. Klappt die Startanforderung, ist der Rückgabewert eins (oder höher), da eine einzelne Startanforderung in mehrere Reservierungen aufgeteilt werden kann.