S3 Buckets: Eine einfache Möglichkeit statische Inhalte auszuliefern

Im Netz haben sich Amazons Simple Storage Service Buckets sehr weit verbreitet. Andere Dienste haben die gleiche Schnittstelle wie AWS S3 Buckets implementiert und so ist es erfreulicherweise möglich auch Open Source Lösungen zu finden, die das gleiche Protokoll wie Amazon implementieren.

Wir verwenden dafür Minio, welches das Erzeugen eigener Buckets erlaubt, wobei wir die Daten auf unseren Servern an der Universität behalten können. Die Installation ist auf Client- wie auf Serverseite sehr einfach und kann für einzelne Arbeitsgruppen angelegt werden. Die Arbeitsgruppen können darin dann ihre eigenen Buckets definieren und statische Inhalte verteilen.

Das Arbeiten mit Buckets ist unglaublich einfach und flott. Außerdem ist die CORS-Policy offener eingestellt, sodass man keine CORS-Probleme haben sollte, wenn man statische Inhalte bspw. für eine Webseite über den Bucket verteilen möchte.

Mögliche Einsatzszenarien sind das Verteilen von CSS oder JavaScript-Dateien für Websites oder das Ablegen von Artefakten im Build-Prozess unserer CI (hier werden auch diverse Buckets schon eingesetzt und Cachen bspw. Build-Artefakte).

Wer eigene Buckets für seine Arbeitsgruppe haben möchte, kann sich bei Thomas melden.

CLI Anwendung

Es gibt CLI-Anwendungen, die die Nutzung von Buckets noch viel bequemer machen. Beispielsweise mc, welches das Kopieren von Dateien direkt über die Konsole ermöglicht.

Beispielszenario:

Wir kompilieren und minimieren eine / mehrere Javascript-Dateien und möchten diese auf unserer Projektseite veröffentlichen. Die minimierte Datei nennt sich example.js und soll in den Bucket static des Lehrstuhls Rechnernetze (cn) gesteckt werden. Der Befehl kann dann bspw. so aussehen:

$ mcli cp resources/public/js/compiled/example.js cn/static/

Die Bucket-Policy vom Bucket static der Gruppe cn soll dabei auf public stehen, damit es keine Beschränkungen beim Zugriff der Dateien gibt. Frontend kann das granular eingestellt werden.

Nun kann die Datei über den Bucket-Host angefragt und in einer HTML hinterlegt werden:

<script src="https://host-des-cn-buckets/static/example.js" type="text/javascript"></script>