Azure Cloud API Projekt Setup
In diesem Tutorial zeige ich euch mein Azure Cloud API Projekt Setup. Damit habe ich meine .NET API Applikation samt Datenbank in wenigen Schritten von einem lokalen Ubuntu Server in die Azure Cloud verlegt.
Azure Cloud API Projekt Setup
Vor einige Wochen habe ich beschrieben wie ich meinen Entwicklungssystem als Ubuntu Server für eine .NET API Schnittstelle samt PostgreSQL Datenbank konfiguriert habe. Durch Einsatz geringer Kosten kann man dieses Setup auch in der Azure Cloud abbilden. Warum Azure? Da ich in meiner täglichen Arbeit mittlerweile auch fast ausschließlich mit der Azure Cloud zu tun habe möchte ich nun meine private Projekt auch dorthin migrieren, natürlich mit möglichst geringen Kosten. Alternativ dazu kann man auf einem anderen Cloud Service hosten.
Anforderungen
Um eine REST API Schnittstelle in der Azure Cloud abzubilden benötigt man folgende Ressourcen:
- Datenbank Server
- Datenbank
- AppService
Datenbank in Azure erstellen
Ich beginne mit der Erstellung der Datenbank. Im Azure Portal erstelle ich dazu eine neue Ressource und wähle eine SQL-Datenbank. Ich habe folgende Settings gesetzt:
Bei der Nutzungsbasierten Bezahlung habe ich für das Projekt eine neue Ressourcengruppe erstellt und diese weise ich dem Projekt hinzu. Danach legt man einen Datenbanknamen fest. Der muss eindeutig sein und darf keine Leerzeichen enthalten. In meinem Fall entscheide ich mich für PROJEKTNAME-sql-db. Es ist generell eine gute Idee alle Ressourcen mit einem fest gelegten Namensschema zu erstellen. Als nächstes wählt man den Datenbankserver aus. Gibt es noch keinen, dann muss einer neu erstellt werden:
Beim Datenbankserver halte ich mich an mein Namensschema und benenne ihn mit PROJEKTNAME-sql-server. Für den Server muss man eine Authentifizierungsmethode festlegen. Im einfachsten Fall ist das ein SQL-Authentifizierung, bei der definiert man einen Benutzernamen und ein Passwort.
Der Rest er Einstellungen setze ich für minimale Kosten. Das heißt der Workload wird auf Entwicklung gesetzt (die Datenbank wird nach einer Stunde gestoppt und benötigt danach immer einige Sekunden für den ersten Request). Bei der Redundanz bleibe ich bei der lokalen Sicherung. Bei der Umgebung (Compute + Speicher) wähle ich folgende Einstellung:
Als Dienstebene ist Basic die günstigste Lösung für 5€ im Monat. Die Speichergröße ist mit maximal 2 GB festgelegt. Das reicht für meine Entwicklungsdatenbank bei weitem aus.
AppService in Azure erstellen
Das .NET API Projekt wird auf einem AppService gehostet. In Azure ist das die einfachste und gleichzeitig auch günstigste Möglichkeit. Ich lege deshalb eine neue WebApp Ressource an:
Als Ressourcengruppe wähle ich wie bei der Datenbank PROJEKTNAME, damit sind alle Kosten für das Projekt gruppiert. Als Name wähle ich PROJEKTNAME, eventuell macht es hier auch Sinn nach dem Namensschema „-web-app“ hinzuzufügen. Veröffentlichen werde ich das Projekt vom Code über Visual Studio, Als Runtime wähle ich die aktuelle LTS Version von .NET und als Betriebssystem Linux. Bei der Region nimmt man idealerweise die physisch nächste.
Nachdem es noch keinen AppService Plan gibt erstelle ich diesen auf diesem Weg. Beim Tarifplan wähle ich Free F1. Damit ist das Hostig gratis. Man hat nur sehr begrenzte Leistung, aber für die Entwicklung eines kleineren Projekts ist das völlig ausreichend. Später kann man den Plan jederzeit ändern und höhere Leistung freischalten.
Bei der Bereitstellung kann man Continuous Deployment aktivieren und ein Projekt auf GitHub verknüpfen. Das macht bei einem Produktiv- oder Testsystem Sinn, da es nur ab dem kostenpflichtigen Plan verfügbar ist lasse ich das vorerst aus.
Bei der Überwachung der App ist Application Insights sehr nützlich. Nutzt man den „Free F1“ Plan kann man Insights auch gratis nutzen um so Laufzeitfehler besser zu finden.
Datenbankzugriff konfigurieren
Beim Punkt Netzwerk von der SQL Server Ressource muss man vor der Nutzung der Datenbank noch deren Zugriffsrechte konfigurieren. Ohne Konfiguration kann niemand darauf zugreifen.
Bei den Firewallregeln füge ich automatisch die aktuelle IP Adresse meines Rechners hinzu. So kann ich die App lokal bauen und testen, trotzdem aber die Datenbank von Azure nutzen. Bei den Ausnahmen wähle ich die Checkbox damit auch die WebApp Zugriff auf die Azure SQL Datenbank bekommt.
Deployment
Unter Visual Studio kann man das Projekt direkt deployen. Dazu findet man im Kontexmenü den Punkt Publish. Dieser öffnet einen Dialog in dem man das Ziel wählt. In diesem Fall ist das Azure.
Das Ziel lässt sich weiter spezifizieren, in meinem Fall ist das ein AppService auf einem Linux Betriebssystem.
Im nächsten Schritt muss man sich nun mit dem Microsoft Account auf Azure anmelden. Der Dialog lädt die verfügbaren Ressourcen und zeigt diese an. Bei mir gibt es bei der Auswahl nur mein Projekt mit dem zuvor angelegten WebApp App Service.
Da es sich beim Projekt um eine API handelt wähle ich im nächsten Schritt die API Ressource von Azure.
Den Rest vom Assistenten kann man durchklicken. Nun ist das Deployment fertig konfiguriert und kann nun auf einen Knopfdruck direkt in Visual Studio gebaut und auf Azure geladen werden.
Kostenanalyse
Da die .NET Applikation nur als Entwicklungsressource angelegt ist hat man keine laufenden Kosten. Die Leistung ist stark eingeschränkt und man muss vermutlich ab einem späteren Zeitpunkt auf ein zahlungspflichtiges Setup wechseln. Bis dahin zahlt man nur für die Datenbank. Bei der Datenbank habe ich mich für die billigste Option entschieden die mich aktuell gerade mal 5€ im Monat kostet.
Fazit
In diesem Tutorial habe ich gezeigt wie man eine .NET API Applikation für die Entwicklung mit minimalen Kosten in der Azure Cloud hostet.