Meine Amazon-S3-Notizen

Amazon Simple Storage Service (S3) ist einer der wichtigsten Dienste der Amazon Web Services (AWS), welcher das Speichern von Dateien in der Cloud ermöglicht.

Buckets und Objekte

Amazon-S3 speichert die Dateien in sogenannten Buckets. Ein Bucket stellt einen Container für S3-Objekte dar. Buckets kann man sich als Ordner und die S3-Objekte als Dateien vorstellen.

Buckets haben weltweit einen eindeutigen Namen. Ähnlich wie bei dem Domain Name System (DNS) muss der Benutzer beim Anlegen eines Buckets einen bisher nichtexistierenden Namen auswählen. Der Name kann bis zu 63 Zeichen lang sein und kann Buchstaben, Zahlen, Bindestriche und Punkte enthalten.

Ein Bucket kann beliebig viele S3-Objekte enthalten. Ein S3-Objekt kann bis zu 5 Terabyte groß sein. Die Dateien können dabei unterschiedliche Dateitypen (Text- oder Binärdateien) haben. Ein S3-Objekt besteht aus zwei Bestandteilen: Metadaten über die gespeicherte Datei und die Datei selbst. Die Metadaten sind Key-Value-Pairs. Amazon-S3 setzt einige Metadaten automatisch, dazu gehören Attribute wie Date (das aktuelle Datum), Content-Length, Last-Modified und Content-MD5. Zusätzlich zu diesen sogenannten System-Defined-Metadata können auch benutzerspezifische Metadaten angelegt werden, die für die eigene Anwendung wichtig sind.

Wenn man ein neues Objekt anlegt, gibt man einen Schlüssel an, der innerhalb des Buckets eindeutig ist. Diesen Schlüssel kann man sich wie einen Dateinamen vorstellen, der innerhalb eines Ordners eindeutig ist. Der Unicode UTF-8 kodierte Schlüssel darf maximal 1024 Byte lang sein.

Es ist wichtig zu wissen, dass die Buckets nicht verschachtelt werden können. D.h. ein Bucket kann nur S3-Objekte als Inhalt haben.

AWS-Regionen

Um die Latenzzeit der Anwendungen so gering wie möglich zu halten, bietet AWS mehrere Regionen an, in denen die Buckets angelegt werden können. Als Benutzer wählt man beim Anlegen eines Buckets eine Region aus. Bei der Auswahl der Region können unterschiedliche Aspekte eine Rolle spielen. Dazu gehört wie schon erwähnt die Latenzzeit. Um die Latenzzeit gering zu halten, sollte man eine Region auswählen, die sich in der Nähe der Benutzer der Anwendung befindet. Aber auch gesetzliche Regelungen können zur Auswahl einer Region in einem bestimmten Land führen. Hier muss man jedoch auch berücksichtigen, dass die Preise in einigen Ländern höher sein können. So sind die Preise für Regionen in den USA oft günstiger als die Regionen in anderen Ländern. Außerdem können zusätzliche Regionen ausgewählt werden, um die Daten redundant an einer geografisch entfernten Ort zu kopieren. Damit können die Daten im Notfall aus einer anderen Region wiederhergestellt werden (Disaster Recovery).

In Europa gibt es drei Regionen, nämlich in Frankfurt, Irland und London. Pro Region existieren mehrere Standorte, die als Availability Zones bezeichnet werden. Nach dem Anlegen werden die Buckets auf mehrere Availability Zones in der ausgewählten Region redundant verteilt.

Ein Bucket verlässt die beim Anlegen angegebene Region nicht. Es ist aber möglich, bei Bedarf ein Bucket explizit in eine andere Region zu kopieren.

Versionierung

Die Versionierung ist standardmäßig deaktiviert und kann pro Bucket aktiviert werden. Wenn für ein Bucket die Versionierung aktiviert wird, wird allen neuen Objekten automatisch die Eigenschaft Version-Id zugewiesen. Wenn ein vorhandenes S3-Objekt erneut hochgeladen wird, wird eine neue Version des Objekts angelegt. Bei Bedarf kann man auch eine vorherige Version als aktuellste Version wiederherstellen.

Verwalten von Buckets und Objekten

Amazon-S3 ist im Grunde ein Rest-Service. Damit können Buckets und Objekte über eine REST-API verwaltet werden. Es ist aber viel einfacher eine der AWS-SDKs zu verwenden, die von Amazon für verschiedene Technologien wie Java, .NET, iOS, Android, JavaScript, NodeJS, PHP, Python oder Ruby zur Verfügung gestellt werden. Die AWS-SDKs bieten eine API um Operationen auf der Amazon-S3 auszuführen und verwenden dabei die REST-API von Amazon-S3.

Es existiert auch eine SOAP-API, die aber neue Features von AWS nicht unterstützt. Daher wird empfohlen, die REST-API direkt bzw. obengenannte SDKs zu verwenden.

Die Amazon-S3-API erlaubt folgende Aktionen:

  • Erstellen und Löschen von Buckets und das Auflisten der S3-Objekt-Schlüssel in einem Bucket
  • Erstellen, Lesen und Löschen von S3-Objekten

Neben der REST-API und den AWS-SDK kann man die AWS-CLI und AWS-Management-Console verwenden, um die Buckets und Objekte auf der Amazon-S3 zu verwalten.

Statische Webseiten auf Amazon-S3 hosten

Eine statische Webseite besteht in der Regel aus HTML-, CSS-, Bild- und JavaScript-Dateien und benötigt keine serverseitige Ausführung wie beispielsweise das Play Framework, Ruby On Rails oder JSP. Es ist mit Amazon-S3 möglich statische Webseiten zu erstellen. Dazu konfiguriert man einen Bucket für Webhosting und lädt anschließend die Seiteninhalte auf das Bucket hoch. Die Webseite ist dann unter einer URL verfügbar, die wie folgt aufgebaut ist:

<bucket-name>.s3-website-<AWS-region>.amazonaws.com

Man kann die Webseite auch unter einem eigenen Domänennamen laufen lassen.

Storage Classes

Amazon-S3 bietet für das Speichern der Objekte unterschiedliche Möglichkeiten an. Man sollte abhängig von eigenen Anforderungen eine Storage-Class auswählen, die im Folgenden kurz erläutert werden:

  • Standard: Ist gut geeignet für Daten, auf die häufig zugegriffen wird. Bietet Hochverfügbarkeit und geringe Latenz für First-byte. Wenn man beim Hochladen eines Objekts nichts angibt, wird Standard als Storage-Class gesetzt.
  • Standard Infrequent Access (Standard-IA): Ist am besten für Daten geeignet, auf die nicht häufig zugegriffen wird und mindestens 30 Tage gespeichert werden müssen. Mindestgröße der Dateien ist 128 KB. Standard-IA ist für den Zugriff ohne Verzögerung geeignet. Der Preis pro GB und Monat ist günstiger als bei der Standard-Storage-Class.
  • Glacier: Ist für Backups und Archivierung geeignet. Die Kosten sind für Glacier sehr viel günstiger als andere Optionen. Das Holen eines Glacier-Objekts kann bis zur 4 Stunden dauern. Daher ist Glacier für Echtzeitanwendungen nicht geeignet. Beim Holen eines Glacier-Objekts wird eine Kopie des Objekts in Amazon-S3 RRS erstellt. Dabei bleibt das Originalobjekt unverändert. Glacier wird unabhängig von Amazon-S3 auch als Dienst mit eigener API angeboten.
  • Reduced Redundancy Storage (RRS): RRS garantiert weniger Dauerhaftigkeit für die Daten mit einem Verlust von 0,01% pro Jahr. Dafür sind die Kosten deutlich günstiger als die anderen Alternativen. Diese Klasse der Speicherung ist besonders für Daten geeignet, die wiederholbar erzeugt werden können, z.B. Vorschaubilder mit unterschiedlichen Auflösungen oder minifizierte JavaScript-Dateien. Mit einem voraussichtlichen Verlust von 0.01% pro Jahr kann man davon ausgehen, dass innerhalb eines Jahres bei 10.000 Dateien eine Datei verloren geht. Amazon-S3 kann so konfiguriert werden, dass bei einem Verlust eine Benachrichtigung gesendet wird.
Like what you read? Give Ilyas Keser a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.