Verwendung der API zum Bereitstellen von Droplets aus einem Master-Snapshot

Einführung

In diesem Tutorial erstellen wir ein Master-Snapshot-Image mit unserer Software und Konfiguration und verwenden dann die DigitalOcean-API, um die Bereitstellung von Droplets mithilfe dieses Images zu automatisieren. In den Beispielen in diesem Lernprogramm wird der offizielle DigitalOcean-API-Client für Ruby verwendet. Https://github.com/digitalocean/droplet_kit[DropletKit].

Voraussetzungen

Erster Schritt: Erstellen Sie Ihr Master-Image

In diesem Tutorial erstellen wir ein Master-Image auf der Basis von LAMP One-Click Image, richten unsere Standardkonfiguration ein und verwenden es dann für Erstellen Sie ein Schnappschuss-Bild. Snapshots kosten 0,05 US-Dollar pro Gigabyte und Monat, je nachdem, wie viel Speicherplatz im Dateisystem belegt ist. Mit der DigitalOcean-API können wir mehrere Instanzen unseres angepassten LAMP-Stacks bereitstellen.

Erstellen Sie ein neues Tröpfchen

Zunächst erstellen wir über das Bedienfeld ein neues Tröpfchen mit dem Namen "+ lamp-master +" und wählen das LAMP-Bild auf der Registerkarte "Anwendungen" aus. Dieses Image liefert uns einen vorgefertigten Ubuntu 14.04 Server mit Apache, MySQL und PHP.

Bei der Erstellung des Tropfens, der zur Erstellung unseres Master-Snapshot-Bildes verwendet wird, ist es wichtig, den kleinsten möglichen Tropfenplan auszuwählen. Sobald wir unseren Schnappschuss erstellt haben, können nur Tröpfchen auf demselben oder einem größeren Plan erstellt werden. Wenn wir beispielsweise unseren Master-Snapshot mit einem 1-GB-Droplet erstellen, können wir ihn zum Starten von Droplets in 1-GB-, 2-GB- oder anderen größeren Plänen verwenden, aber wir können aus diesem Snapshot kein Droplet mit 512 MB RAM starten.

Wenn unser neues Droplet erstellt wurde, stellen Sie mit einem SSH-Client eine Verbindung dazu her.

Anfangskonfiguration

Jetzt, da wir mit unserem neuen Droplet verbunden sind, können wir alle Einstellungen konfigurieren oder alle Pakete installieren, die wir auf allen von unserem Master-Image bereitgestellten Droplets haben möchten. In diesem Fall installieren wir zwei zusätzliche PHP-Module. Locken und Imagemagick.

sudo apt-get update
sudo apt-get install php5-curl php5-imagick

Erstellen des Schnappschusses

Nachdem wir die gewünschte zusätzliche Software hinzugefügt haben, können wir unser Droplet ausschalten und unseren Snapshot erstellen. Während es möglich ist, einen Schnappschuss eines laufenden Systems zu erstellen, stellt das Herunterfahren sicher, dass sich das Dateisystem in einem konsistenten Zustand befindet:

sudo poweroff

Während wir unseren Schnappschuss über das Control Panel erstellen konnten, werden wir für die Zwecke dieses Tutorials die API von diesem Punkt an verwenden, um mit unserem DigitalOcean-Konto zu arbeiten. Diese Beispiele können mit interaktivem Ruby (+ irb +) ausgeführt oder einem Skript hinzugefügt und mit dem Befehl + ruby ​​+ ausgeführt werden. Der erste Schritt besteht darin, den DropletKit-Client einzuschließen.

require 'droplet_kit'
token=''
client = DropletKit::Client.new(access_token: token)

Um einen Schnappschuss von der API zu erstellen, müssen wir die ID für unser Master-Droplet abrufen. Dazu rufen wir den Droplets-Endpunkt der API auf.

droplets = client.droplets.all
droplets.each do |droplet|
 if droplet.name == "lamp-master"
   puts droplet.id
 end
end

Dieser Codeausschnitt ruft den Droplets-Endpunkt der API auf und durchläuft die Droplets in unserem Konto auf der Suche nach einem mit dem Namen "+ lamp-master +". Wenn es gefunden wird, zeigt das Skript die ID-Nummer für dieses Droplet an.

Nachdem wir unsere Droplet-ID-Nummer haben, können wir die API anweisen, einen Snapshot dieses Droplets zu erstellen, indem wir die Droplet-ID an die Snapshot-Aktion des Droplet-Endpunkts übergeben. Zusätzlich zur Droplet-ID übergeben wir einen Snapshot-Namen, der für unser neues Bild verwendet wird. In diesem Fall haben wir beschlossen, unseren Schnappschuss "+ Lampenbild +" zu nennen.

client.droplet_actions.snapshot(droplet_id: '', name: 'lamp-image')

Die Snapshot-Anfrage, die wir gestellt haben, gibt eine Ereignis-ID-Nummer zurück, mit der der Status des Snapshot-Prozesses verfolgt werden kann. This tutorial bietet weitere Informationen zur Verwendung von Ereignis-IDs.

Zweiter Schritt: Bereitstellen von Droplets aus unserem Snapshot

Wir haben jetzt ein Master-Snapshot-Image erstellt, mit dem wir Tröpfchen mit unserer Konfiguration bereitstellen können. Wie bei unserem Droplet müssen wir jetzt die API abfragen, um die Bild-ID für unseren neuen Snapshot zu erhalten.

images = client.images.all(public:false)
images.each do |image|
 if image.name == "lamp-image"
   puts image.id
 end
end

Wie in unserem obigen Beispiel zur Tröpfchenidentifizierung durchläuft dieser Code die Snapshot- und Backup-Images in unserem Konto und zeigt die ID für das Image mit dem Namen "+ lamp-image +" an.

Nachdem wir die ID-Nummer unseres Images haben, können wir mit der Bereitstellung von Tröpfchen beginnen. Mit dem folgenden Code wird ein neues 2-GB-Droplet mithilfe unseres Master-Snapshots in der Region New York 3 erstellt.

Beachten Sie, dass unser Snapshot-Bild in der Region vorhanden sein muss, die wir für die Erstellung der Tröpfchen angeben. Sie können ein Bild über das Bedienfeld oder über den image endpoint der API in weitere Regionen übertragen.

droplet = DropletKit::Droplet.new(name: 'my-lamp-server', region: 'nyc3', size: '2gb', image: '')
client.droplets.create(droplet)

Dritter Schritt: Anpassung mit Benutzerdaten

Wir können jetzt neue Tröpfchen mit unserer benutzerdefinierten Konfiguration mithilfe der API bereitstellen. Möglicherweise möchten wir unsere neuen Tröpfchen jedoch individuell weiter anpassen. Wir können zusätzliche Anpassungen vornehmen, indem wir Benutzerdaten an unsere Tröpfchen senden, wenn wir sie erstellen.

In diesem Beispiel laden wir eine benutzerdefinierte index.html-Datei auf unser neues Droplet vor, einschließlich des Namens.

sitename = "example.org"
userdata = "
#cloud-config

runcmd:
- echo '<html><head><title>Welcome to #{sitename} </title></head><body><h1>This is #{sitename}</h1></body></html>' > /var/www/html/index.html
"
droplet = DropletKit::Droplet.new(name: sitename, region: 'nyc3', size: '2gb', image: '', user_data: userdata)
client.droplets.create(droplet)

In diesem Beispiel verwenden wir einfach den Befehl "+ echo +" in unserem neuen Droplet, um HTML-Code in eine index.html-Datei im Webstamm abzulegen. Mit anderen Befehlen können Sie neue virtuelle Hosts direkt in Ihrem Droplet konfigurieren, zusätzliche Konfigurationsdetails von einem Remote-Server abrufen oder fast alles tun, was Sie über eine SSH-Verbindung tun können. Hier erfahren Sie mehr über Benutzerdaten.

Schritt vier: Zusammenfügen

Da wir nun Tröpfchen basierend auf unserem Snapshot-Image über die API bereitstellen und deren Inhalt anpassen können, können wir einen Schritt weiter gehen und ein interaktives Skript erstellen, um neue Tröpfchen basierend auf unserem Image zu starten. Im folgenden Skript wird davon ausgegangen, dass wir bereits ein Snapshot-Image erstellt haben und dessen ID verfügbar ist.

require 'droplet_kit'
token=''
client = DropletKit::Client.new(access_token: token)
region = 'nyc3'
image_id = ''
droplet_size = '2gb'

puts "Enter a name for your new droplet:"
sitename = gets.chomp

userdata = "
#cloud-config

runcmd:
- echo '<html><head><title>Welcome to #{sitename} </title></head><body><h1>This is #{sitename}</h1></body></html>' > /var/www/html/index.html
"
sitename.gsub!(/\s/,'-')
droplet = DropletKit::Droplet.new(name: sitename, region: region, size: droplet_size, image: image_id, user_data: userdata)
client.droplets.create(droplet)

Code-Aufschlüsselung

Dieses Skript enthält zunächst den DropletKit-Client und initialisiert eine neue Client-Verbindung mithilfe des von Ihnen bereitgestellten API-Tokens.

require 'droplet_kit'
token=''
client = DropletKit::Client.new(access_token: token)

Anschließend legen wir einige Optionen für unser Droplet fest, einschließlich Region, Droplet-Größe und ID für unser Master-Snapshot-Image.

region = 'nyc3'
image_id = ''
droplet_size = '2gb'

Anschließend fordern wir den Benutzer auf, einen Namen für das neue Droplet anzugeben und diese Informationen in die Benutzerdaten aufzunehmen, die unser Skript für den Erstellungsprozess bereitstellt.

puts "Enter a name for your new droplet:"
sitename = gets.chomp

userdata = "
#cloud-config

runcmd:
- echo '<html><head><title>Welcome to #{sitename} </title></head><body><h1>This is #{sitename}</h1></body></html>' > /var/www/html/index.html
"

Nachdem wir unseren Site-Namen in unsere index.html-Seite aufgenommen haben, müssen wir ihn bereinigen, um sicherzustellen, dass er als Droplet-Name verwendet werden kann. Da Droplet-Namen keine Leerzeichen enthalten dürfen, werden Leerzeichen durch Bindestriche ersetzt.

sitename.gsub!(/\s/,'-')

Dann bringen wir alle diese Variablen zusammen und übermitteln unsere Anfrage zum Erstellen des neuen Tropfens.

droplet = DropletKit::Droplet.new(name: sitename, region: region, size: droplet_size, image: image_id, user_data: userdata)
client.droplets.create(droplet)

Nächste Schritte

Mit der API können wir bei Bedarf benutzerdefinierte Droplets erstellen und unsere eigenen Einstellungen oder Dateien bei der Erstellung einbeziehen. Sie können diese Grundlagen erweitern, indem Sie diesem Skript zusätzliche Funktionen hinzufügen. Mögliche Verbesserungen umfassen.

  • Verwenden des DNS-Endpunkts der API zum automatischen Konfigurieren von DNS-Einträgen für Ihre neuen Droplets, wenn diese gestartet werden.

  • Aufforderung an den Benutzer für zusätzliche Eingaben wie Region oder Tröpfchengröße.

  • Verwenden von runcmd-Aufrufen für Benutzerdaten zum Herunterladen von Webinhalten in Ihre neuen Droplets oder zum Auffüllen von MySQL-Datenbanken.