Wie Automatisieren Sie die Erstellung von AWS-Virtuelle Maschinen von der Kommandozeile aus

0
39

Es ist einfach zum starten neuer Instanzen aus der EC2-Konsole, aber manchmal müssen Sie automatisieren die Aufgabe von einem shell-Skript. In diesem Fall werden die AWS CLI verfügt über umfangreiche Befehle zum starten von Instanzen von der Befehlszeile aus.

Was Sie Benötigen

Um zu beginnen, müssen Sie die AWS CLI installiert und konfiguriert mit einem IAM-Benutzer, die Zugriff auf neue Instanzen zu erstellen.

Es sei denn, Sie wollen, automatisieren die Erstellung von Ihnen, müssen Sie eine vorhandene Sicherheitsgruppe mit den Regeln bereits konfiguriert. Während das web-interface erstellt eine neue Gruppe für jede Instanz standardmäßig, können Sie die Wiederverwendung von security-Gruppen für eine beliebige Anzahl von Instanzen. Halten Sie im Verstand, obwohl, dass ein port geöffnet in eine Sicherheitsgruppe öffnen-Anschluss an jede Instanz.

Wenn Sie möchten, erstellen Sie eine neue Sicherheitsgruppe von der Befehl Linie, können Sie erstellen und öffnen Sie die ports mit den folgenden Befehlen:

aws ec2 erstellen-security-group-group-name NewSecurityGroup –Beschreibung “Erstellt von CLI”
aws ec2 autorisieren-security-group-ingress-group-name NewSecurityGroup –protocol tcp –port 22 –cidr-0.0.0.0/0

Je nachdem welche route Sie wählen, müssen Sie notieren Sie sich die security-group-ID. Sie finden diese über die Befehlszeile Beschreibung der security-Gruppe:

aws ec2-beschreiben-security-groups-group-Namen EC2SecurityGroup

Die Karte info über die Gruppe, einschließlich der Gruppen-ID.

Sie müssen merken Sie sich die Namen der key-pair-Mädchen, die Sie verwenden, um den Zugriff auf die Instanzen. Der Einfachheit halber werden Sie wahrscheinlich wollen, um die Verwendung der gleichen Schlüssel-paar, anstatt einen neuen zu erstellen für jede neue Instanz ein, die Sie erstellen.

Sie benötigen einen AMI zu starten Sie das Bild aus. Dies kann ein frisch AMI, wie Amazon Linux 2-oder Ubuntu Server LTS 18.04, oder Sie können Ihre eigenen benutzerdefinierten AMI mit software vorinstalliert. (mehr dazu weiter unten).

Sie müssen wissen, Ihre Subnetz-ID. Sie wollen starten Sie alle Instanzen im selben Subnetz und auf jeden Fall in der gleichen availability zone, als es die Kosten für die übertragung von Daten zwischen den Zonen. Finden Sie die Subnetz-ID aus der AWS-EC2-Konsole oder von der Befehlszeile aus mit jq:

aws ec2-describe-Instanzen | jq ‘.Reservierungen[0].Instances[0].NetworkInterfaces[0].SubnetId’

Erstellen Sie Instanzen von der Befehlszeile aus

Starten Sie Instanzen mithilfe der run-instances-Befehl. Dieser Befehl hat eine Menge von Optionen, aber diejenigen, die Ihnen wichtig sind:

aws ec2-run-instances
–image-id ami-00000000
–count 1
–instance-type t2.micro
–key-name MyKeyPair
–security-group-ids sg-00000000
–Subnetz-id Subnetz-00000000
–tag-Daten ” ResourceType=Instanz,Tags=[{Schlüssel=Name,Wert=cli-erzeugt}]’

Haben Sie zu ersetzen die AMI-ID key-pair-Mädchen-Namen, security-group-ID und subnet-ID mit Ihren eigenen Werten. Das Finale — – tag-Spezifikation-Richtlinie weist den Namen der Instanz, die Sie ändern möchten, wie gut.

Dies startet ein basic-t2.micro-micro-instance in Ihrem Konto ist standardmäßig region. Dieser Befehl gibt eine Menge von JSON-Daten:

{
“OwnerId”: “(patientennummer) 123456789012”,
“ReservationId”: “r-5875ca20”,
“Groups”: [
{
“GroupName”: “meine-sg”,
“GroupId”: “sg-903004f8”
}
],
“Instanzen”: [
{
“Überwachung”: {
“State”: “deaktiviert”
},
“PublicDnsName”: null,
“Plattform”: “windows”,
“State”: {
“Code”: 0,
“Name”: “pending”
},
“EbsOptimized”: false,
“LaunchTime”: “2013-07-19T02:42:39.000 Z”,
“PrivateIpAddress”: “10.0.1.114”,
“ProductCodes”: [],
“VpcId”: “vpc-1a2b3c4d”,
“InstanceId”: “ich-5203422c”,
“ImageId”: “ami-173d747e”,
“PrivateDnsName”: ip-10-0-1-114.ec2.interne,
“KeyName”: “MyKeyPair”,
“SecurityGroups”: [
{
“GroupName”: “meine-sg”,
“GroupId”: “sg-903004f8”
}
],
“ClientToken”: null,
“SubnetId”: “Subnetz-6e7f829e”,
“InstanceType”: “t2.micro”,
“NetworkInterfaces”: [
{
“Status”: “in-use”,
“SourceDestCheck”: true,
“VpcId”: “vpc-1a2b3c4d”,
“Beschreibung”: “Primary network interface”,
“NetworkInterfaceId”: “eni-a7edb1c9”,
“PrivateIpAddresses”: [
{
“PrivateDnsName”: “ip-10-0-1-114.ec2.interne”,
“Primär”: true,
“PrivateIpAddress”: “10.0.1.114”
}
],
“PrivateDnsName”: “ip-10-0-1-114.ec2.interne”,
“Anlage”: {
“Status”: “angehängt”,
“DeviceIndex”: 0,
“DeleteOnTermination”: true,
“AttachmentId”: “eni-attach-52193138”,
“AttachTime”: “2013-07-19T02:42:39.000 Z”
},
“Groups”: [
{
“GroupName”: “meine-sg”,
“GroupId”: “sg-903004f8”
}
],
“SubnetId”: “Subnetz-6e7f829e”,
“OwnerId”: “(patientennummer) 123456789012”,
“PrivateIpAddress”: “10.0.1.114”
}
],
“SourceDestCheck”: true,
“Platzierung”: {
“Tenancy”: “Standard”,
“GroupName”: null,
“AvailabilityZone”: “us-west-2b”
},
“Hypervisor”: “xen”,
“BlockDeviceMappings”: [
{
“DeviceName”: “/dev/sda1”,
“Ebs”: {
“Status”: “angehängt”,
“DeleteOnTermination”: true,
“VolumeId”: “vol-877166c8”,
“AttachTime”: “2013-07-19T02:42:39.000 Z”
}
}
],
“Architektur”: “x86_64”,
“StateReason”: {
“Message”: “ausstehend”,
“Code”: “pending”
},
“RootDeviceName”: “/dev/sda1”,
“VirtualizationType”: “hvm”,
“RootDeviceType”: “ebs”,
“Tags”: [
{
“Value”: “MyInstance”
“Key”: “Name”
}
],
“AmiLaunchIndex”: 0
}
]
}

Sie werden wahrscheinlich wollen, um Rohr diese in eine Datei und speichern Sie Sie für später auf. Sie können verwenden Sie ein Dienstprogramm wie jq, um die Arbeit mit JSON auf der Kommandozeile, oder importieren Sie es in ein Python-oder Knoten-script für den einfachen Zugriff.

Nachdem die Instanz erstellt wurde, werden Sie in der Lage sein, den Zugang Via SSH von seiner öffentlichen IP-Adresse oder eine private IP-Adresse wenn Sie einen OpenVPN-server laufen in Ihrem Subnetz.

Einrichten eines Install-Skript

AWS ermöglicht Ihnen das übergeben ein install-Skript, um die Instanz, ran an den Start. In diesem Skript können Sie automatisch, um die Konfiguration der Maschine, die Sie benötigen, zu tun, wie die Installation und Konfiguration von Programmen.

Übergeben Sie das Skript von der Kommandozeile, werden Sie wollen, verwenden Sie die –user-data-option, und übergeben Sie die Datei mit file://:

aws ec2-run-instances
–image-id ami-00000000
–count 1
–instance-type t2.micro
–key-name MyKeyPair
–security-group-ids sg-00000000
–Subnetz-id Subnetz-00000000
–tag-Daten ” ResourceType=Instanz,Tags=[{Schlüssel=Name,Wert=cli-erzeugt}]’
–user-data file://startup_script.sh

Dies wird nur einmal ausgeführt, und nicht bei jedem Neustart.

Erstellen einer Benutzerdefinierten AMI

Amazon Machine Images (AMIs) sind eine einfache Möglichkeit zum erstellen von Kopien von Servern mit software vorinstalliert, so dass Sie nicht haben ausführen ein install-Skript jedes mal. Dies kann Ihre boot-Prozess viel schneller, da Sie nicht haben, zu warten, bis die software zu installieren, auf neue Instanzen.

Um eine zu erstellen, werden Sie wahrscheinlich wollen, um von vorne zu beginnen, um sicherzustellen, dass alles korrekt ist, können Sie allerdings nur verwenden Ihre vorkonfigurierte server als Vorlage.

Wenn Sie beginnen, von Grund auf, erstellen Sie einen neuen t2.micro-Instanz mit einem base-AMI wie Amazon Linux 2 dienen als Ausgangspunkt. Konfigurieren Sie es mit allen Programmen, die Sie brauchen, und sicherzustellen, dass alles wie gewünscht funktioniert.

Dann, aus dem AWS-EC2-Konsole mit der rechten Maustaste auf die Instanz und wählen Sie “Bild” > “Image Erstellen”:

Dieser erstellt automatisch ein AMI basiert auf Ihrer Instanz. Sie können auch erstellen AMI basieren auf snapshots, aber dieser Assistent erstellt einen snapshot zu erstellen, die AMI mit.

Sie AMI kann nehmen ein bisschen zu schaffen, aber sobald es fertig ist Sie in der Lage sein, um es in die AMI-Registerkarte die EC2-Konsole. Sie können die AMI-ID und verwenden Sie es, um neue Instanzen zu erstellen, basierend darauf, dass AMI. Sie können es auch verwenden, als Basis für eine Autoskalierender Gruppe starten Vorlage, die in unserer Anleitung, um mit den AMIs.