Auch Entwickler brauchen Platz zum Spielen

23. August 2011 /

Tutorial: Dateien auf Amazon S3 unter eigener Subdomain hosten

Der Artikel beschäftigt sich mit der Speicherung, Administration und Optimierung von statischen Inhalten (Bilder, Webseiten, JSON etc.) auf Amazon S3, der simplen und robusten Storage-Lösung des Buchhändlers. Als Zugabe: Koppelung eigener Subdomain an die permanent erreichbare „Wolke“ mit eigenem Datenbestand.

Account erst nach gründlicher Nutzerprüfung
Im Tutorial wird davon ausgegangen, dass ein Amazon ASW Account angelegt und freigegeben wurde. Zur Erinnerung: Nach dem Ausfüllen des Anmeldeformulars samt Kreditkartendaten wird der Antragsteller zunächst mittels Telefonanruf verifiziert. Abschließend sichtet ein Amazon-Mitarbeiter den noch offenen Account manuell. Erst dann erfolgt die Freischaltung.

Die gesamte Prozedur läuft sehr bürokratisch (auf Nummer sicher), kann entsprechend bis zu einem Tag andauern. Als Bestätigung eines freigeschalteten Accounts erhält der Nutzer eine E-Mail mit Informationen zu notwendigen Zugriffsschlüsseln (später findet man diese Werte unter Konto > Kontoaktivität > Sicherheitsnachweise), die der Nutzer für die Verbindung zum Server benötigt.

Neukunden gewährt Amazon einen 12-monatigen Testraum. Kostenlos, jedoch mit begrenztem Kontingent.

Konsole im Web vs. Software
Bei der Verwaltung der Buckets, Ordner, Dateien und Attributen setzt Amazon auf das eigene Webinterface: AWS Management Console. Alternative Lösungen wie Browser-Addons und Softwareansätze der Dritthersteller erleichtern das Arbeiten „in der Cloud“ spürbar. Nachfolgend wird Transmit als Tool zur Kommunikation mit Amazon S3 genutzt.

Transmit als Begleiter bei Amazon S3 Aufgaben
Neben Cyberduck glänzt auch Transmit mit einer Amazon S3 Unterstützung

Hinweis
cdn.domain.de wird in den nachfolgenden Beschreibungen, Abbildungen als Projekt-Beispiel verwendet und gehört gegen Eigenwerte ersetzt.

Bucket anlegen und verknüpfen
Ein Bucket ist eine systemweit einmalige Kennzeichnung – eine Art Projekt-Gruppierung, Subdomain auf S3. Buckets dürfen ausschließlich auf der Hauptebene erstellt werden. Ein Bucket kann Ordner und Dateien beinahe uneingeschränkter Tiefe enthalten.

Für das Vorhaben ein Bucket mit der eigenen Subdomain zu verknüpfen, sollte der Bucket-Name identisch zu der gewünschten Subdomain sein: Ein Bucket mit dem Namen cdn.domain.de ist – nach einem DNS-Eintrag beim Hoster seines Vertrauens – in der Lage, auf den Aufruf der Subdomain cdn.domain.de zu reagieren und mit anvisierten Inhalten zu antworten. Für diesen Zweck reicht eine CNAME-Anpassung der Subdomain (cdn.domain.de) auf s3-external-3.amazonaws.com. (Der Punkt am Ende gehört dazu).

Bei der Einrichtung eines Bucket stellt sich zwangsläufig die Frage nach geeignetem Server-Standort. Das hängt vom jeweiligen Projekt ab: Sind europäische Nutzer die Zielgruppe, so ist Irland das passende Land für die Auslieferung der Daten.

Unkomplizierte Definition eines Amazon S3 Bucket
Unkomplizierte Definition eines Amazon S3 Bucket

Verzeichnisse und Files hochladen
Ist ein Bucket erstellt, kann die Dateistruktur auf den unendlichen Amazon S3 Speicher übertragen werden. In diesem Sinne „benimmt“ sich Amazon S3 wie ein gewöhnlicher FTP-Server. Man navigiert zwischen den Verzeichnissen, kopiert, fügt ein.

Wichtiger Aspekt: Jede Datei ist nach dem Upload ohne Leserechte für die Öffentlichkeit und nur für den Eigentümer einsehbar. Also nicht vergessen eingeschränkte Rechte hoch zu stufen. Voraussetzung dafür ist natürlich der Wille, bestimmte Objekte public zu haben. Die bequemere Variante einer automatisierten Rechte-Korrektur befindet sich weiter unten.

Manuelle Umstellung der Leserechte auf Amazon S3
Manuelle Umstellung der Leserechte auf Amazon S3

Dateipfade ermitteln
Nach erfolgreichen Uploads und korrekt gesetzten Leserechten sind die Dateien im Web öffentlich zugänglich. Den „echten“ Amazon S3 Link zu einer Datei liefert das eingesetzte Tool, auch Transmit. Im Amazon Webinterface: nach der Markierung einer Datei und nachfolgendem Klick auf die Schaltfläche Properties innerhalb der Aktionsleiste kommt der Verweis zum Vorschein.

Pfad einer Amazon S3 Datei in Transmit
Pfad einer Amazon S3 Datei in Transmit

Pfad einer Amazon S3 Datei in der AWS Management Console
Pfad einer Amazon S3 Datei in der AWS Management Konsole

Ein Amazon S3 Datei-Link besitzt immer seine Gültigkeit, auch wenn via DNS-Umstellung eine „Umleitung“ des Aufrufs vorgenommen wurde.

Tipp: Hat man den optionalen DNS-Eintrag hinter sich gebracht und http://cdn.domain.de/ in Transmit als Root-URL hinterlassen, so kann die aktuelle URL der Datei per Klick auf URL kopieren (über dem Eintrag Pfad kopieren im Auswahlmenü) in die Zwischenablage befördert werden. Auf diesem Weg bekommt der Administrator stets den Dateipfad mit hinterlegter Subdomain, ohne sich diese der Originalfassung dazu zu denken. Praktisch!

Nachfolgend noch einige Ratschläge und Hinweise, die bei der Nutzung von Amazon S3 zu beachten wären.

Ungültiges SSL-Zertifikat
Unter Umständen kann es vorkommen, dass diverse Programme mit integrierter Amazon S3 Unterstützung (wie es zum Beispiel Espresso der Fall ist) keine Verbindung zum Amazon-Server oder eben zum gewünschten Bucket herstellen können, weil das SSL-Zertifikat nicht vertrauenswürdig ist. In solchen Fällen muss der Software nachgeholfen werden: Ein Zertifikat für Amazon AWS im Schlüsselbund installieren und mit „Immer vertrauen“ auszeichnen.

Ratschlag: Erfolgt die Verwaltung der Amazon S3 Ordner mittels Transmit, so erscheint beim Verbindungsversuch zum Server ein Sicherheitshinweis. Innerhalb des Dialogs kann das Zertifikat direkt angesehen, installiert und genehmigt werden.

SSL-Zertifikat für Amazon S3 nachträglich installieren
SSL-Zertifikat für Amazon S3 nachträglich installieren

Keine Indexierung der Dateistruktur
Dürfen Suchmaschinen auf Amazon S3 gehostete Dateien keinesfalls in den Index aufnehmen, so reicht ein Zweizeiler in robots.txt (im Hauptverzeichnis gespeichert):

User-agent: *
Disallow: /

Rechte: Uploads veröffentlichen
Jedes auf Amazon S3 erstellte bzw. hochgeladene Element besitzt für die Öffentlichkeit keine Leserechte – Aufruf unbehandelter Dateien im Browser endet mit einem 404-Fehler. Dem Administrator des Accounts sind folgende Wege offen: Entweder nach jedem Upload die Rechte händisch verstellten (bei Massenuploads sehr zeitintensiv, auch wenn rekursiv möglich). Oder im Webinterface unter Properties > Edit bucket policy eine spezielle Policy zu hinterlegen. Diese trägt dafür Sorge, dass alle Elemente nach der Übertragung ohne Zutun public werden. Gilt allerdings nicht für bereits bestehende, vielmehr erst für zukünftig gespeicherte Objekte. Existierende Ordner und Dateien müssten also manuell (nach)behandelt werden, um öffentlich und somit sichtbar im Web zu werden.

Codezeilen zum Einfügen (Bucket Namen anpassen)

{
  "Version": "2008-10-17",
  "Id": "",
  "Statement": [
    {
      "Sid": "AllowPublicRead",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::cdn.domain.de/*"
    }
  ]
}

Ordner und Dateien in Amazon S3 automatisiert öffentlich stellen
Ordner und Dateien in Amazon S3 öffentlich stellen im Editor

Rechteanpassung in Transit für Amazon S3 Dateien
Rechte-Anpassung in Transmit unter Regeln > Zugriffsrechte

Cache-Regelung für Dateien auf Amazon S3
Das Firefox-Addon S3Fox beherrscht es nicht. Die Rede ist von modifizierten Headern fürs HTTP Caching. Durch die gekonnte Steuerung der Header-Informationen einer Datei kann u.a. auch die Cache-Dauer im Browser feiner justiert werden. Nach der Auswahl einer Datei innerhalb der AWS Management Console können einzelne Metainformationen unter Properties hinzugefügt und bearbeitet werden.

Dazu gehört auch der Cache-Control Wert, welcher je nach Definition für einen längeren Aufbewahrungszeitraum der Datei im Browser-Cache zuständig ist. Allein durch eine großzügige Setzung dieses Merkmals können die Datenmenge und die Kosten um bis zu 50 Prozent reduziert werden.

Steuerung des HTTP Cache via Metadaten in Amazon S3
Steuerung des HTTP Cache via Metadaten in Amazon S3

Transmit: Upload-Header für Amazon S3 pro Dateityp
Transmit setzt Upload-Header für Amazon S3 pro Dateityp

Weiter geht’s…
Amazon CloudFront mit Amazon S3 verknüpfen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.