Bereitstellen von Anwendungen in der Cloud
Nachdem eine Cloudanwendung entworfen und entwickelt wurde, können Sie sie in die Bereitstellungsphase für die Freigabe auf den Clients verschieben. Die Bereitstellung kann in mehreren Stufen erfolgen. Dabei umfasst jede Stufe eine Reihe von Überprüfungen, mit denen sichergestellt werden soll, dass die Ziele der Anwendung erfüllt werden.
Vor der Bereitstellung einer Cloudanwendung in der Produktion sollten Sie sie anhand einer Prüfliste mit wichtigen und empfohlenen bewährten Methoden bewerten. Beispiele hierfür sind die Bereitstellungsprüflisten von AWS und Azure. Viele Cloudanbieter bieten zur Unterstützung bei der Bereitstellung eine umfassende Liste mit Tools und Diensten, wie etwa in diesem Artikel zu Azure.
Bereitstellungsprozess
Die Bereitstellung einer Cloudanwendung ist ein iterativer Prozess, der sich vom Ende der Entwicklung bis zur Freigabe der Anwendung auf den Produktionsressourcen erstreckt:
Abbildung 1: Prozess der Codebereitstellung
Üblicherweise verfügen Cloudentwickler über mehrere gleichzeitig ausgeführte Versionen ihrer Anwendungen, um die Bereitstellung der Anwendung in verschiedene Phasen zu leiten:
- Testen
- Staging
- Produktion
Alle drei Phasen sollten dabei idealerweise über identische Ressourcen und Konfigurationen verfügen. So können Entwickler die Anwendung testen und bereitstellen und dabei die Wahrscheinlichkeit für Inkonsistenzen aufgrund einer Änderung in der Umgebung und Konfiguration minimieren.
Leiten von Anwendungsänderungen
In einem typischen Szenario für die Entwicklung von Agile-Anwendungen (wie in der Abbildung oben) werden Anwendungen von mehreren Technikern und Entwicklern verwaltet. Diese arbeiten mithilfe eines Mechanismus zur Verfolgung von Problemen und Fehlern an deren Behebung. Die Änderungen am Code werden über ein System aus Coderepositorys (z. B. svn
, mercurial
oder git
) verwaltet, das aus getrennt verwalteten Verzweigungen für die Freigabe von Code besteht. Nach der Durchführung von Codeänderungen, Überprüfungen und Genehmigungen kann der Code in die Test-, Staging- und Produktionsphase geleitet werden. Dafür stehen unterschiedliche Möglichkeiten zur Verfügung:
Benutzerdefinierte Skripts: Mithilfe von benutzerdefinierten Skripts können Entwickler die neueste Codeversion abrufen und bestimmte Befehle ausführen, mit denen die Anwendung erstellt und in den Produktionszustand gebracht wird.
Vorgefertigte VM-Images: Entwickler können zum Bereitstellen der Anwendung auch einen virtuellen Computer mit der erforderlichen Umgebung und Software bereitstellen und konfigurieren. Nach der Konfiguration kann eine Momentaufnahme des virtuellen Computers erstellt und in ein VM-Image exportiert werden. Das Image kann für verschiedene Systeme zur Cloudorchestrierung bereitgestellt werden, durch die es automatisch für eine Produktionsumgebung bereitgestellt und konfiguriert wird.
Continuous Integration-Systeme: Zur Vereinfachung der unterschiedlichen Bereitstellungsaufgaben können Aufgaben, die auf den verschiedenen Computern der Produktionsinfrastruktur ausgeführt werden müssen (wie etwa das Abrufen der neuesten Version aus einem Repository, das Erstellen von Anwendungsbinärdateien und das Ausführen von Testfällen) mithilfe von Continuous Integration-Tools (CI) automatisiert werden. Beispiele für beliebte CI-Tools sind Jenkins, Bamboo und Travis. Azure Pipelines ist ein speziell für die Arbeit mit Azure-Bereitstellungen konzipiertes CI-Tool.
Verwalten von Ausfallzeiten
Bestimmte Änderungen an der Anwendung können ein teilweises oder vollständiges Beenden der Anwendungsdienste erforderlich machen, damit die Änderungen am Back-End der Anwendung integriert werden können. Dafür planen Entwickler in der Regel eine bestimmte Tageszeit ein, um die Unterbrechung für die Benutzer der Anwendung so gering wie möglich zu halten. Bei Anwendungen, die für Continuous Integration konzipiert wurden, können diese Änderungen live in Produktionssystemen ausgeführt werden, wodurch die Anwendungsclients nur kurz oder gar nicht unterbrochen werden müssen.
Redundanz und Fehlertoleranz
Bewährte Methoden für die Bereitstellung von Anwendungen setzen normalerweise eine kurzlebige Cloudinfrastruktur voraus, die jederzeit nicht verfügbar sein oder geändert werden kann. So kann etwa das Beenden von virtuellen Computern, die in einem IaaS-Dienst bereitgestellt werden, nach Ermessen des Cloudanbieters je nach SLA geplant werden.
Anwendungen müssen auf Hartcodierung oder die Annahme von statischen Endpunkten für verschiedene Komponenten, wie etwa Datenbanken und Speicherendpunkte, verzichten. Gut konzipierte Anwendungen sollten idealerweise zum Abfragen und Ermitteln von Ressourcen sowie zum Herstellen einer dynamischen Verbindung Dienst-APIs verwenden.
In Ressourcen oder Verbindungen können jederzeit schwerwiegende Fehler auftreten. Wichtige Anwendungen müssen so entworfen werden, dass sie auf diese Art von Fehlern vorbereitet sind und Failoverredundanzen enthalten.
Viele Cloudanbieter teilen ihre Rechenzentren in Regionen und Zonen ein. Eine Region ist ein bestimmter geografischer Standort, an dem sich ein komplettes Rechenzentrum befindet, während eine Zone einen einzelnen Abschnitt innerhalb eines Rechenzentrums darstellt, der zum Zwecke der Fehlertoleranz von den anderen isoliert ist. So können beispielsweise zwei oder mehr Zonen in einem Rechenzentrum mit einer separaten Infrastruktur für Stromversorgung, Kühlung und Konnektivität ausgestattet sein, damit sich ein Fehler in einer Zone nicht auf die Infrastruktur der anderen auswirkt. Clouddienstanbieter stellen in der Regel Clients und Entwicklern Informationen zu den Regionen und Zonen zur Verfügung, damit Anwendungen entworfen und entwickelt werden, die diese Isolationseigenschaft nutzen.
Auf diese Weise können Entwickler ihre Anwendung so konfigurieren, dass Ressourcen aus mehreren Regionen oder Zonen verwendet werden. Dies führt zu einer verbesserten Verfügbarkeit der Anwendung und zu einer zonen- bzw. regionenübergreifenden Fehlertoleranz. Die Systeme müssen so konfiguriert werden, dass der Datenverkehr zwischen den Regionen und Zonen weitergeleitet und ausgeglichen wird. Auch DNS-Server können so konfiguriert werden, dass sie auf Domänensuchanforderungen bestimmter IP-Adressen in jeder Zone je nach Ursprung der Anforderung antworten. Dies ist eine Möglichkeit zum Lastenausgleich basierend auf der geografischen Nähe von Clients.
Sicherheit und Härtung in der Produktion
Internetanwendungen sollten in einer öffentlichen Cloud immer mit der nötigen Vorsicht ausgeführt werden. Es ist allseits bekannt, dass in Cloud-IP-Bereichen wertvolle Inhalte gespeichert werden. Daher ist es wichtig, dass alle in der Cloud bereitgestellten Anwendungen die bewährten Methoden für das Sichern und Härten von Endpunkten und Schnittstellen befolgen. Die folgenden grundlegenden Prinzipien sollten Sie befolgen:
- Die gesamte Software sollte in den Produktionsmodus umgestellt werden. Der Großteil der Software unterstützt für lokale Tests den „Debugmodus“ und für die tatsächliche Bereitstellung den „Produktionsmodus“. Anwendungen im Debugmodus lassen häufig eine große Menge an Informationen an Angreifer durch, die durch das Senden von fehlerhaften Eingaben Hackern ein leichtes Angriffsziel schaffen. Unabhängig davon, ob Sie ein Webframework wie Django und Rails oder eine Datenbank wie Oracle verwenden, müssen Sie unbedingt die entsprechenden Richtlinien für die Bereitstellung von Produktionsanwendungen befolgen.
- Der Zugriff auf nicht öffentliche Dienste sollte auf bestimmte interne IP-Adressen mit Administratorzugriff beschränkt sein. Stellen Sie sicher, dass sich Administratoren nicht direkt über das Internet bei einer wichtigen Ressource anmelden können, ohne ein internes Launchpad aufzurufen. Konfigurieren Sie Firewalls mit IP-Adresse und portbasierten Regeln, um nur das Minimum an erforderlichen Zugriffen zuzulassen, insbesondere über SSH und andere Tools für Remoteverbindungen.
- Befolgen Sie das Prinzip der geringsten Rechte. Führen Sie alle Dienste als Benutzer mit den geringsten Rechten aus, der die erforderliche Rolle ausführen darf. Beschränken Sie die Verwendung von Stammanmeldedaten auf bestimmte manuelle Anmeldungen durch Systemadministratoren, die kritische Probleme im System debuggen oder konfigurieren müssen. Dies gilt auch für den Zugriff auf Datenbanken und Verwaltungsbereiche. Generell sollten Sie Zugriffe durch ein langes, zufällig gewähltes Schlüsselpaar aus einem öffentlichen und privaten Schlüssel schützen, das an einem eingeschränkt zugänglichen und verschlüsselten Speicherort sicher hinterlegt ist. Alle Kennwörter sollten strenge Sicherheitsanforderungen erfüllen.
- Verwenden Sie bekannte Methoden, Tools und Systeme zum Erkennen und Verhindern von Eindringversuchen (IDS/IPS), Security Information & Event Management (SIEM), Firewalls auf Anwendungsebene sowie Systeme zum Schutz vor Schadsoftware.
- Richten Sie einen Patchingzeitplan ein, der mit dem Zeitpunkt von Patchreleases durch den Hersteller des von Ihnen verwendeten Systems übereinstimmt. Hersteller wie Microsoft haben häufig einen festen Releasezyklus für Patches.