WavebreakMediaMicro - Fotolia
Images für Azure erstellen: Tipps und Tricks zu Packer
Viele Admins wollen ihre Images für die Cloud gerne standardisieren. Dafür bietet sich das Tool Packer an. Wir zeigen, wie es sich bedienen lässt und was dabei zu beachten ist.
Admins, die lieber ihre eigenen Windows-Server-Images in Microsoft Azure ausrollen, stoßen trotz aller guten Absichten immer wieder auf lästige Probleme. Wo treten sie am häufigsten auf und was lässt sich dagegen unternehmen?
Um beispielsweise eine Konsistenz der bereitgestellten Images zu erreichen – und um unnötige Anfragen an den Help Desk zu vermeiden – lassen sich mit Management-Werkzeugen wie Packer so genannte Golden Images erstellen. Diese können leicht an die jeweiligen Einsatzzwecke angepasst werden. Das Packer-Tool hilft Admins, den Build-Prozess zu automatisieren und ihre Windows-Server-Images leichter zu verwalten. Dazu bietet Packer verschiedene Möglichkeiten, um die Erstellung der Images zu skripten und um damit passende Builds für unterschiedliche Plattformen und Einsatzzwecke anzufertigen. Anschließend können Admins zum Beispiel Code Repositories nutzen, um dort ihre Konfigurationen abzuspeichern. Andere IT-Mitarbeiter an entfernten Standorten eines Unternehmens können dann darauf zugreifen und so für eine Einheitlichkeit der Images in der eigenen IT sorgen.
Konstruktion eines Packer-Images für Azure
Um zu zeigen, wie Packer funktioniert, nutzen wir das Tool, um ein Image mit Windows Server zu erstellen. Laden und installieren Sie zunächst die zu Ihrem Betriebssystem passende Packer-Version auf Ihren Rechner. Tipps zur Installation von Packer finden Sie auf der Webseite des Projekts.
Danach legen Sie fest, wo das neue Image abgelegt werden soll. Der Builder von Packer kann Images für verschiedene Dienste wie zum Beispiel Azure, AWS (Amazon Web Services), Docker und VMware erstellen. Im Folgenden demonstrieren wir, wie sich ein Image mit Windows Server bauen lässt, das dann in Azure eingesetzt werden kann.
Um ein Image für Azure zu erstellen, müssen aber zunächst ein paar wichtige Bedingungen erfüllt sein. Dazu zählen:
- Ein Service Principal, damit Packer sich gegenüber Azure authentifizieren kann,
- ein Storage-Account, um das fertige Image aufzunehmen,
- den Resource Group Name für diesen Storage-Account,
- die Subscription-Nummer für Azure,
- die Mieter-ID für das genutzte Azure Active Directory sowie
- einen Storage-Container, um das fertige VHD-Image später darin zu speichern.
Überprüfen der Instruktionen zum Bauen des Images
Nun ist es an der Zeit, das Template für das geplante Image aufzusetzen. Jedes Packer-Image benötigt eine JSON-Datei, die als Template bezeichnet wird, und die dem Programm genau sagt, wie das Image aufgebaut und wo es gespeichert werden soll. Das folgende Beispiel zeigt ein Template, mit dem sich ein Azure-Image erstellen lässt. Wenn Sie es verwenden wollen, speichern Sie es unter dem Namen „WindowsServer.Azure.json“ ab.
{
"variables": {
"client_id": "",
"client_secret": "",
"object_id": ""
},
"builders": [{
"type": "azure-arm",
"client_id": "{{user `client_id`}}",
"object_id": "{{user `object_id`}}",
"client_secret": "{{user `client_secret`}}",
"resource_group_name": "labtesting",
"storage_account": "adblabtesting",
"subscription_id": "d660a51f-031d-4b8f-827d-3f811feda5fc",
"tenant_id": "bb504844-07db-4019-b1c4-7243dfc97121",
"capture_container_name": "vhds",
"capture_name_prefix": "packer",
"os_type": "Windows",
"image_publisher": "MicrosoftWindowsServer",
"image_offer": "WindowsServer",
"image_sku": "2016-Datacenter",
"location": "East US",
"vm_size": "Standard_D2S_v3"
}]
}
Bevor Sie ein Template produktiv einsetzen, sollten Sie es zunächst mit dem Validierungskommando von Packer prüfen. Wichtig ist dabei zu beachten, dass sensible Informationen wie client_id und client_secret erst beim Validieren des Templates übergeben und nicht direkt in ihm gespeichert werden sollten. Verwenden Sie dann den folgenden Befehl, zum Testen des Templates:
packer validate -var 'client_id=value' -var 'client_secret=value' WindowsServer.Azure.json
Mögliche Probleme beim Erstellen eines Images mit Packer
Nachdem der Validierungsbefehl keine Fehler ergeben hat, erstellen wir das Image mit fast dem gleichen Befehl. Ersetzen Sie jetzt jedoch die Platzhalter „XXXX“ mit Ihren Daten:
packer build -var 'client_id=XXXX' -var 'client_secret=XXXX' -var 'object_id=XXXX' WindowsServer.Azure.json
Beim ersten Durchlauf kann es zu Fehlern kommen, wenn das Setup noch nicht vollständig ausgereift ist. So traten bei unseren Tests mehrere Probleme auf.
Der erste Fehler wies darauf hin, dass der Storage-Account und das Erstellen des Images in derselben Azure-Region stattfinden müssen. Die zweite Fehlermeldung bezog sich auf eine Ressource, die nicht gefunden werden konnte. Ein weiteres Problem trat auf, weil nicht genug Speicherplatz vorhanden war. Die entsprechenden Fehlermeldungen waren dabei jeweils deutlich zu verstehen, so dass die Probleme schnell behoben werden konnten.
Der folgende Fehler war jedoch schwerwiegender:
==> azure-arm: ERROR: -> Forbidden : Access denied
==> azure-arm:
==> azure-arm: ...failed to get certificate URL, retry(0)
Das deutet darauf hin, dass eine falsche object_id gewählt wurde. Suchen Sie in diesem Fall nach der richtigen ID in Ihren Azure-Einstellungen. Sobald alles stimmt, finden Sie das fertige VHD-Image anschließend in Azure zur weiteren Verwendung.
Folgen Sie SearchDataCenter.de auch auf Twitter, Google+, Xing und Facebook!