Erstellen einer statischen Webseite mit Azure.
Azure, Static Website
Wenn man nur eine statische Webseite erstellen moechte, dann bietet Azure hier eine sehr guenstige Alternative zu den normalen Providern. Den Weg hierzu moechte ich hier kurz dokumentieren.
Zuerst wird ein Speicherkonto erstellt. Wichtig ist hier nur, das es ein StorageV2 ist und kein BlobStorage. Es wird dann zwar auch ein BlobStorage erstellt (fuer unstrukturierte Daten), aber es werden nicht die benoetigten Verzeichnisse angelegt.
Der Menuepunkt ‚Statische Webseite‘ fehlt, wenn der falsche Storage ausgewaehlt wurde. Ueber diesen Punkt wird die statische Webseite nun aktiviert und die beiden Einstiegspunkte definiert (index.html und fuer die Fehlerseite). Die Dateien werden in einem spaeterem Schritt hochgeladen.
Das speichern wird damit quitiert, das ein $web Ordner erstellt wurde und es wird ein Endpunkt mitgegeben, ueber welchen sich die Seite bereits aufrufen liese, welcher aber noch nicht unseren Name hat. https://xxxxhomepage.z6.web.core.windows.net/
Als naechstes muss noch der Zugriff auf den $web Ordner angepasst werden, damit alle auch die Seite aufrufen koennen.
Zum Zugriff auf die Webseite verwenden wir ein CDN (Content Delivery Network). Hierzu legen wir zuerst ein Profil an.
Wenn das CDN Profil erstellt ist, dann wird noch der entsprechende Endpunkt eingestellt (Koennte man auch auf einmal machen, wenn man ‚Jetzt neuen CDN-Endpunkt erstellen‘ aktiviert. Das ist dann aber etwas unuebersichtlicher.
Nachdem der CDN konfiguriert ist, kann unsere eigene Domain konfiguriert werden. Diese muss natuerlich via DNS erreichbar sein (d.h. sie muss beim Domainanbieter entsprechend konfiguriert sein). Was durch das gruene Haeckchen ersichtlich ist.
So, als naechstes aktivieren wir noch HTTPS fuer die Webseite. Hierzu die configuration des CDN (den konfigurierten Endpunkt) oeffnen und dann HTTPS fuer benutzerdefinierte Domain aktivieren. Es wird dann ein SSL Zertifikat angefordert und automatisch konfiguriert (es koennen auch eigene Zertifikate verwendet werden).
Fehlt nur noch die automatische Weiterletung von HTTP nach HHTPS. Hierzu muss eine entsprechende Regel erstellt werden.
Somit ist die Seite nun erstellt und laeuft fuer unter 1 Euro :)
Erstellen einer Azure Function mit TimerTrigger.
Azure Function, Timer Trigger, Python
Da Ich Corona bedingt etwas Zeit habe, habe Ich mich mal mit den Azure Functions etwas beschaeftigt. Das Beispiel beschaeftigt sich mit der Luftverschmutzung und die Daten lassen sich hierzu ohne Kosten via REST API vom World Air Quality Index (hier bekommt man auch einen API-key).
Die Entwicklung erfolgt in MS Visual Code und als Sprache wird Python verwendet. Fuer diese Platform stellt Microsoft entsprechende Plug-Ins zur Verfuegung, welche einfach installiert werden koennen.
Ueber das Account-Plugin kann man sich dann an seinem Azure-Konto anmelden und auf die entsprechenden Azure Resourcen zugreifen.
Ueber das Portal koennen Functions zwar angelegt werden, aber ein Code-Editing kann hier nicht erfolgen (zumindest nicht auf Linux und Windows steht nicht mehr zur Auswahl). Man kann die Function auch ueber MS Visual code erstellen, wenn man seine Function deployed.
Wenn man nun also eine neue Function anlegt, dann legt hier Visual Code ueber ein Template die entsprechenden Ordner und Dateien an.
Wichtig ist hierbei die requirements.txt , in welcher die Python-Module aufgefuehrt werden, welche zum ausfuehren des Codes benoetigt werden (hier z.B. das requests modul). Die module koennen mit der benoetigten Versionsnummer versehen werden. In der functions.json werden Trigger und Bindings konfiguriert.
azure-common==1.1.25
azure-cosmosdb-nspkg==2.0.2
azure-cosmosdb-table==1.0.6
azure-functions==1.3.0
azure-nspkg==3.0.2
requests==2.24.0
Ueber das Azure Template wird immer eine __init__.py fuer den entsprechenden Trigger erstellt (z.B. der Timer Trigger). Hier kann dann entsprechend der Code eingefuegt werden (man kann auch andere entry points konfigurieren).
Was macht nun mein Code. Er ruft saemtliche Messstellen alle zwei Stunden ab und speichert diese Werte fuer jede Messstelle in einer Tabelle in Azure ab. Hierzu werden die Storage Table Services verwendet (nicht cosmosDB, wobei die verwendete API die gleiche ist).
Das sieht dann im Storage Explorer wie folgt aus. Jede Messstelle hat eine eindeutige ID, welche ich als PartitionKey verwendet und die Messzeit wird als RowKey verwendet.
Und was macht man dann mit den Daten? Man kann diese ggf. fuer ML verwenden oder einfach ueber PowerBI oder Excel aufbereiten. Als Beispiel habe ich hier Excel genommen. Man kann den Azure Table Storage als Datenquelle auswaehlen.
Und dann in einem Chart entsprechend darstellen.
Schicker ist das ganze natuerlich wenn man es in PowerBi einbindet (und dann z.B. in eine Webpage einbindet).
Das war jetzt ein grober Ueberblick was man mit einer Azure Function machen kann. Ich werde zu den einzelnen Schritten (z.B. lokales debuggen etwas detailierter eingehgen ;).
WordPress on Azure mit Blob als Datenspeicher.
Azure, Blob
Diese Seite wurde frueher als WordPress-Seite auf Azure gehostet. Die Bilddaten welche hier eingebunden wurden, wurden in einem Blob gespeichert. Dazu habe ich das Azure-Plugin installiert. In einem spaeterem Post werde ich noch zeigen, wie man die Bilder auch anderweitig einbinden kann.
Das schoene an dem Plug-in ist, dass beim Upload in den Blob entsprechend automatisch auch die Thumbs automatisch erstellt und abgelegt werden.
Der Zugriff auf die Daten erfolgt ueber HTTPS und nutzt die native URL des Blob. Bei einer anderen Methode koennte man den Content ueber CDN (und DNS) zur Verfuegung stellen.
Ein „Nachteil“ des Plug-Ins ist, dass die Daten im WordPress hinterlegt werden muessen (Key).
Inzwischen habe ich diese Seite aber auch auf eine Notes/Domino DB umgestellt. Auch hierzu werde ich mal einen Beitrag verfassen.
Hosten einer WordPressseite auf Azure.
Azure, WordPress
Nachdem ich bereits gezeigt habe, wie z.B. fuer diese Seite die Bilder in einen Azure-Blob Speicher ausgelagert werden koennen, moechte ich noch kurz zeigen, wie man ein WP auf Azure aufsetzen kann.
Der wohl einfachste weg ist hierbei auf den Marketplace zu gehen und nach einer vorgefertigten Loesung zu suchen. Es gibt hier eine grosse Auswahl.
Ich verwende hier ein Template von Bitnami. Diese sind kostenlos, es werden nur die benoetigten Resourcen bezahlt.
Die einzelnen Punkte kann dann jeder nach seinem Budget ausfuellen und die VM erstellen.
Wenn das deployment abgeschlossen ist, kann die Seite bereits ueber die IP aufgerufen werden, was aber natuerlich nicht wirklich schoen ist. Wir muessen das ganze noch mit unserer Domain verknuepfen.
Damit wir die WP-Seite mit unserem eigenen Domainnamen aufrufen koennen, muessen wir eine entsprechende DNS-Zone erstellen.
Weiterhin muss natuerlich die IP-Adresse bei eurem Provider hinterlegt werden (A und CNAME).
Das Ergebniss sollte dann so aussehen.
Ok, das ist noch etwas unschoen, da das ganze noch ohne SSL ist. Aber das schoene an dem Template von Bitnami ist, das hier ein Script mitgeliefert wird, welches das fuer euch vornimmt.
Das ganze sieht dann nach ein paar Minuten so aus.
Das einrichten einer WP auf Azure dauert nicht mal eine Stunde und ist zumindest im ersten Jahr so gut wie Kostenfrei (es gibt bei einer Neuanmeldung ueber 200 Euro). Die Kosten belaufen sich dann im guenstigsten Fall unter 15 Euro im Monat. Aber man kann die Seite einfach mitwachsen lassen, ohne die Seite neu aufsetzten zu muessen.
Azure Cognitive Services (Computer Vision) kurzer test.
Azure, Cloud, Cognitive
Mit Computer Vision von den Cognitive Services kann man seine Bilder analysieren und z.B. automatisiert mit Tags versehen. Sie sind damit der Gegenpart zu Google’s Cloud Vision API, welche im im anschluss kurz zeigen werde.
Erst einmal im Azure unter Resourcen eine neue entsprechende Resource anlegen.
Wie bei Google auch bekommt man im Monat 5000 aufrufe umsonst. Erster wichtiger Punkt hier fuer einen Test ist der Endpunkt, ueber welchen der Rest-API aufruf erfolgt.
Den Endpunkt findet man auch nochmal unter ‚Schluessel und Endpunkt‘ wenn man die Resource oeffnet. Fuer einen ersten test mache ich den Zugriff ueber den API-Key und nicht ueber eine Authentizierung.
Man kann das ganze nun entweder ueber den API-Explorer testen.
Oder aber mit einem Tool, welches euch das Testen von API’s via HTTP erlaubt. Unter Windows verwende ich hier Postman und auf dem Mac nehme ich dafuer gerne PAW.
Das Image welches wir analysieren moechten, wird im Body als JSON definiert. In diesem Fall hier als ein im Azure-Blob abgelegtes Image. Die API erlaubt es wohl nicht direkt ein Image als base64 encoded mitzuschicken wie es Google’s API erlaubt.
Wenn man das ganze nun abschickt und alles richtig gemacht hat, bekommt man ein JSON als Antwort zurueck.
{
"tags": [
{
"name": "person",
"confidence": 0.99988865852355957
},
{
"name": "indoor",
"confidence": 0.97415751218795776
},
{
"name": "clothing",
"confidence": 0.97318184375762939
},
{
"name": "people",
"confidence": 0.96783852577209473
},
{
"name": "man",
"confidence": 0.95568490028381348
},
{
"name": "human face",
"confidence": 0.93549489974975586
},
{
"name": "woman",
"confidence": 0.92221689224243164
},
{
"name": "group",
"confidence": 0.88860172033309937
},
{
"name": "restaurant",
"confidence": 0.70237845182418823
},
{
"name": "girl",
"confidence": 0.5616992712020874
},
{
"name": "skyscraper",
"confidence": 0.52540498971939087
},
{
"name": "dinner",
"confidence": 0.500309407711029
},
{
"name": "crowd",
"confidence": 0.2949678897857666
},
{
"name": "meal",
"confidence": 0.17130520939826965
},
{
"name": "dining room",
"confidence": 0.095185220241546631
}
],
"requestId": "5efb1b2c-aeac-4f2e-bd3e-85c6bba0d72b",
"metadata": {
"width": 360,
"height": 480,
"format": "Jpeg"
}
}
So, und hier noch das Bild das ich analysiert habe. Ich werde fuer den Google Vision Test das gleiche nehmen.