Amazon S3
Für Fortgeschrittene
Steffen Krause– Technical Evangelist
@sk_bln
Mehr als nur ein „Simple“ Storage Service
Ein umfassendes, verteiltes modernes Speichersystem
Grundlage für viele verschiedene Architekturen
Amazon S3
“Spotify needed a storage solution that
could scale very quickly without
incurring long lead times for upgrades.
This led us to cloud storage, and in that
market, Amazon Simple Storage
Service (Amazon S3) is the most
mature large-scale product.
Amazon S3 gives us confidence in our
ability to expand storage quickly while
also providing high data durability.”
Emil Fredriksson, Operations Director
Find out more at : aws.amazon.com/solutions/case-studies/spotify/
Minecraft Realms and AWS S3
Minecraft Welten und Spielstatus
sind in Amazon S3 gespeichert.
Das System nutzt S3
Versionierung und gibt dem
Administrator die Möglichkeit, auf
eine frühere Version
zurückzurollen. Das Team hat
effiziente Uploads durch Nutzung
von S3 Multipart Upload
implementiert.
Details: aws.typepad.com/aws/2014/01/hosting-minecraft-realms-on-aws.html
Sie speichern in S3
AWS speichert mit 99,999999999%
Dauerhaftigkeit
Sehr skalierbarer Web-
Zugriff auf Objekte
Mehrere redundante Kopien
innerhalb einer Region
Sie speichern in S3
AWS speichert mit 99,999999999%
Dauerhaftigkeit
Aber es ist mehr als ein
Simple Storage Service
Objekte in S3
Billionen Objekte
(1012)
Mehr als 2 Millionen
Anfragen pro Sekunde
Was ist S3?
Hoch skalierbare Datenspeicherung
Zugriff über APIsEin Web Store, kein Dateisystem
Schnell
Hochverfügbar und dauerhaft
Kostengünstig
Ein Web Store, kein Dateisystem
Write Once,
Read Many
(WORM)
Eventually
Consistent
Konzept-Diagramm, nicht tatsächliche Implementierung
Region
Availability Zone
Indexing Storage
Load balancers
Web servers
Availability Zone
Indexing Storage
Load balancers
Web servers
Ein Web Store, kein Dateisystem
Write Once,
Read Many
(WORM)
Eventually
Consistent
Region
Availability Zone
Indexing Storage
Load balancers
Web servers
Availability Zone
Indexing Storage
Load balancers
Web servers
Konzept-Diagramm, nicht tatsächliche Implementierung
Ein Web Store, kein Dateisystem
Write Once,
Read Many
(WORM)
Eventually
Consistent
Region
Availability Zone
Indexing Storage
Load balancers
Web servers
Availability Zone
Indexing Storage
Load balancers
Web servers
Konzept-Diagramm, nicht tatsächliche Implementierung
Ein Web Store, kein Dateisystem
Write Once,
Read Many
(WORM)
Eventually
Consistent
Region
Availability Zone
Indexing Storage
Load balancers
Web servers
Availability Zone
Indexing Storage
Load balancers
Web servers
Konzept-Diagramm, nicht tatsächliche Implementierung
Ein Web Store, kein Dateisystem
Write Once,
Read Many
(WORM)
Eventually
Consistent
Region
Availability Zone
Indexing Storage
Load balancers
Web servers
Availability Zone
Indexing Storage
Load balancers
Web servers
Konzept-Diagramm, nicht tatsächliche Implementierung
Ein Web Store, kein Dateisystem
Write Once,
Read Many
(WORM)
Eventually
Consistent
Region
Availability Zone
Indexing Storage
Load balancers
Web servers
Availability Zone
Indexing Storage
Load balancers
Web servers
Konzept-Diagramm, nicht tatsächliche Implementierung
Ein Web Store, kein Dateisystem
Write Once,
Read Many
(WORM)
Eventually
Consistent
Region
Availability Zone
Indexing Storage
Load balancers
Web servers
Availability Zone
Indexing Storage
Load balancers
Web servers
Konzept-Diagramm, nicht tatsächliche Implementierung
Ein Web Store, kein Dateisystem
Write Once,
Read Many
(WORM)
Eventually
Consistent
Region
Availability Zone
Indexing Storage
Load balancers
Web servers
Availability Zone
Indexing Storage
Load balancers
Web servers
Konzept-Diagramm, nicht tatsächliche Implementierung
Ein Web Store, kein Dateisystem
Write Once,
Read Many
(WORM)
Eventually
Consistent
Ein Web Store, kein Dateisystem
Write Once,
Read Many
(WORM)
Eventually
Consistent
*außer US-STANDARD Region
Neue Objekte
Updates
Deletes
Daten werden synchron in mehreren Einrichtungen
gespeichert ehe SUCCESS zurückgegeben wird
Read-after-write consistency*
Schreiben dann lesen: Möglich dass Key nicht existiert
Schreiben dann auflisten: Key kann in der Liste fehlen
Überschreiben dann lesen: Alte Daten können
zurückgegeben werden
Löschen dann lesen: Alte Daten können zurückgegeben
werden
Löschen dann auflisten: Gelöschter Key kann noch in Liste
enthalten sein
Ein Web Store, kein Dateisystem
Write Once,
Read Many
(WORM)
Eventually
Consistent
Ein regionaler Dienst
Ihre Daten verlassen nie die Region
Es sei denn, Sie bewegen die Daten
Speicherklassen
Kontrollieren die Art, wie S3 die Daten hält
Standard
Bietet 99,999999999%
Dauerhaftigkeit und 99,99%
Verfügbarkeit der Objekte
innerhalb eines Jahres
Entworfen, um den
gleichzeitigen Verlust der Daten
in zwei Einrichtungen zu
überdauern
Amazon S3 Speicherklassen
Reduced
Redundancy Storage
Reduziert die Kosten durch
Datenspeicherung mit geringerer
Redundanz als der Standard
Storage
Bietet 99,99% Dauerhaftigkeit und
99,99% Verfügbarkeit der Objekte
innerhalb eines Jahres
Standard
Bietet 99,999999999%
Dauerhaftigkeit und 99,99%
Verfügbarkeit der Objekte
innerhalb eines Jahres
Entworfen, um den
gleichzeitigen Verlust der Daten
in zwei Einrichtungen zu
überdauern
Amazon S3 Speicherklassen
Glacier
Geeignet für Datenarchivierung, wo
Daten selten zugegriffen werden und
eine Zugriffszeit von mehreren
Stunden akzeptabel ist
Verwendet den sehr kostengünstigen
Amazon Glacier Storage-Dienst, wird
aber von Amazon S3 verwaltet
Reduced
Redundancy Storage
Reduziert die Kosten durch
Datenspeicherung mit geringerer
Redundanz als der Standard
Storage
Bietet 99,99% Dauerhaftigkeit und
99,99% Verfügbarkeit der Objekte
innerhalb eines Jahres
Standard
Bietet 99,999999999%
Dauerhaftigkeit und 99,99%
Verfügbarkeit der Objekte
innerhalb eines Jahres
Entworfen, um den
gleichzeitigen Verlust der Daten
in zwei Einrichtungen zu
überdauern
Amazon S3 Speicherklassen
Glacier
Suitable for archiving data,
where data access is infrequent
and a retrieval time of several
hours is acceptable
Uses the very low-cost Amazon
Glacier storage service, but
managed through Amazon S3
Objekte, die Sie lange Zeit
archivieren wollen
z.B. Digitales Archiv von
alten Filmen und
Sendungen
Standard
Designed to provide
99.999999999% durability
and 99.99% availability of
objects over a given year
Designed to sustain the
concurrent loss of data in
two facilities
Objekte, die hohe
Dauerhaftigkeit haben
sollen
z.B. Master-Kopie eines
Films
Reduced
Redundancy Storage
Reduces costs by storing data
at lower levels of redundancy
than the Standard storage
Designed to provide 99.99%
durability and 99.99%
availability of objects over a
given year
Objekte, bei denen Sie
sich den Verlust leisten
können oder die wieder
erstellt werden können
z.B. verschiedene Formate
des Filmes
Amazon S3 Speicherklassen
Namensräume
Objektbenennung, Buckets & Keys
Amazon S3 Namensraum
Global eindeutig
Bucket Name + Objektname (Key)
Amazon S3 Namensraum
Amazon S3
Bucket Bucket
Objekt Objekt ObjektObjekt
Bucket
Objekt Objekt
Amazon S3 Namensraum
Amazon S3
jones-docshare media.mydomain.com
beach.jpg img1.jpg style.cssdrafts/rpt.doc
yourdomain.com
swf/mediaplayer.swf img/banner1.jpg
Amazon S3 Namensraum
Objekt-Key
Eindeutig innerhalb des Bucket
Amazon S3 Namensraum
Max. 1024 Bytes UTF-8 Einschließlich „Path“-Prefixe
Objekt-Key
Eindeutig innerhalb des Bucket
Amazon S3 Namensraum
assets/js/jquery/plugins/jtables.js
Das ist ein Objekt-Key
Max. 1024 Bytes UTF-8 Einschließlich „Path“-Prefixe
Objekt-Key
Eindeutig innerhalb des Bucket
Durchsatz-Optimierung
S3 partitioniert automatisch basiert auf Key Prefix:
2134857/gamedata/start.png
2134857/gamedata/resource.rsrc
2134857/gamedata/results.txt
2134858/gamedata/start.png
2134858/gamedata/resource.rsrc
2134858/gamedata/results.txt
2134859/gamedata/start.png
2134859/gamedata/resource.rsrc
2134859/gamedata/results.txt
Objekt Keys:Bucket:
mynewgame
Durchsatz-Optimierung
2134857/gamedata/start.png
2134857/gamedata/resource.rsrc
2134857/gamedata/results.txt
2134858/gamedata/start.png
2134858/gamedata/resource.rsrc
2134858/gamedata/results.txt
2134859/gamedata/start.png
2134859/gamedata/resource.rsrc
2134859/gamedata/results.txt
mynewgame
Inkrementelle
Game Id
S3 partitioniert automatisch basiert auf Key Prefix:
Objekt Keys:Bucket:
Durchsatz-Optimierung
2134857/gamedata/start.png
2134857/gamedata/resource.rsrc
2134857/gamedata/results.txt
2134858/gamedata/start.png
2134858/gamedata/resource.rsrc
2134858/gamedata/results.txt
2134859/gamedata/start.png
2134859/gamedata/resource.rsrc
2134859/gamedata/results.txt
mynewgame
mynewgame/2
Partition:
S3 partitioniert automatisch basiert auf Key Prefix:
Objekt Keys:Bucket:
Durchsatz-Optimierung
7584312/gamedata/start.png
7584312/gamedata/resource.rsrc
7584312/gamedata/results.txt
8584312/gamedata/start.png
8584312/gamedata/resource.rsrc
8584312/gamedata/results.txt
9584312/gamedata/start.png
9584312/gamedata/resource.rsrc
9584312/gamedata/results.txt
mynewgame
Umgekehrte
Game Id
S3 partitioniert automatisch basiert auf Key Prefix:
Objekt Keys:Bucket:
Durchsatz-Optimierung
7584312/gamedata/start.png
7584312/gamedata/resource.rsrc
7584312/gamedata/results.txt
8584312/gamedata/start.png
8584312/gamedata/resource.rsrc
8584312/gamedata/results.txt
9584312/gamedata/start.png
9584312/gamedata/resource.rsrc
9584312/gamedata/results.txt
mynewgame
mynewgame/7
mynewgame/8
mynewgame/9
Partitionen:
S3 partitioniert automatisch basiert auf Key Prefix:
Objekt Keys:Bucket:
Verschlüsselung
Absicherung von ruhenden Daten
Server Side Encryption
Automatische Verschlüsselung von
ruhenden Daten
Dauerhafte
S3 Schlüssel-Speicherung
Einfach
zusätzlicher
PUT Header
Starkes
AES-256
Voll verwaltet
Kein eigenes Schlüsselmanagement notwendig
Benutzerdefinierte
Schlüssel möglich
Alternativ: Clientseitige Verschlüsselung über das AWS Java SDK oder beliebige andere Bibliotheken
Serverseitige Verschlüsselung
Bucket
High level design
Daten
Serverseitige Verschlüsselung
Daten Bucket Verschlüsseltes Objekt
Schlüssel pro Objekt
Verschlüsseltes Objekt
High level design
Serverseitige Verschlüsselung
Daten Bucket Verschlüsseltes Objekt
Verschlüsselter
Schlüssel pro
ObjektSchlüssel pro Objekt
Verschlüsseltes Objekt
Master-Schlüssel
High level design
Serverseitige Verschlüsselung
Daten Bucket Verschlüsseltes Objekt
Verschlüsselter
Schlüssel pro
Objekt
Schlüssel-
Management
(Monatliche Rotation)
Schlüssel pro Objekt
Verschlüsseltes Objekt
Master-Schlüssel
High level design
docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html
Zugriffskontrolle
Sie entscheiden, wer was tun darf
Secure by Default
Sie entscheiden, was freigegeben wird
Policies für Buckets und Objekte
Policies, ACLs & IAM
Verwenden Sie S3 Policies, ACLs oder
IAM um Regeln zu definieren
IAM
Detailliert
Administrierung als Teil des
rollenbasierten Zugriffs
Anwenden von Policies auf S3
auf Rollen-, Benutzer- und
Gruppenebene
Allow
Actions
PutObject
Resource
arn:aws:s3:::mybucket/*
Bob Jane
Bucket PoliciesIAM kontra
Detailliert
Administrierung als Teil des
rollenbasierten Zugriffs
Anwenden von Policies auf S3
auf Rollen-, Benutzer- und
Gruppenebene
Detailliert
Anwenden von Policies auf Bucket-
Ebene in S3
Benutzereinschränkungen ohne die
Verwendung von IAM
Allow
Actions
PutObject
Resource
arn:aws:s3:::mybucket/*
Bob Jane
Allow
Bob, Jane
Actions
PutObject
Resource
arn:aws:s3:::mybucket/*
mybucket
Bucket Policies ACLskontraIAM kontra
Detailliert
Administrierung als Teil des
rollenbasierten Zugriffs
Anwenden von Policies auf S3
auf Rollen-, Benutzer- und
Gruppenebene
Detailliert
Anwenden von Policies auf Bucket-
Ebene in S3
Benutzereinschränkungen ohne die
Verwendung von IAM
Grob
Zugriffskontroll-Regeln auf
Bucket und/oder Objektebene
in S3
Allow
Actions
PutObject
Resource
arn:aws:s3:::mybucket/*
Bob Jane
Allow
Bob, Jane
Actions
PutObject
Resource
arn:aws:s3:::mybucket/*
mybucket
Allow
Everyone, Bob, Jane
Actions
Read
mybucket myobject
{"Statement":[{
"Effect":"Allow",
"Principal":{"AWS":["4649-6425", "5243-0045"]},
"Action":"*",
"Resource":"/mybucket/*",
"Condition":{
"IpAddress":{"AWS:SourceIp":"176.13.0.0/12"}
}}]}
Zugriffskontrolle – Bucket Policy
{"Statement":[{
"Effect":"Allow",
"Principal":{"AWS":["4649-6425", "5243-0045"]},
"Action":"*",
"Resource":"/mybucket/*",
"Condition":{
"IpAddress":{"AWS:SourceIp":"176.13.0.0/12"}
}}]}
Zugriffskontrolle – Bucket Policy
Zugelassene Accounts
{"Statement":[{
"Effect":"Allow",
"Principal":{"AWS":["4649-6425", "5243-0045"]},
"Action":"*",
"Resource":"/mybucket/*",
"Condition":{
"IpAddress":{"AWS:SourceIp":"176.13.0.0/12"}
}}]}
Zugriffskontrolle – Bucket Policy
Ressource
{"Statement":[{
"Effect":"Allow",
"Principal":{"AWS":["4649-6425", "5243-0045"]},
"Action":"*",
"Resource":"/mybucket/*",
"Condition":{
"IpAddress":{"AWS:SourceIp":"176.13.0.0/12"}
}}]}
Zugriffskontrolle – Bucket Policy
Zugelassene Quelladresse
Lifecycle Management
Automatische Verwaltung der Objekte
Lifecycle Management
Lifecycle Management
Objekt-Löschung
Dauerhafte Löschung von Objekten aus S3
Lifecycle Management
Objekt-Löschung
Dauerhafte Löschung von Objekten aus S3
Objekt-Archivierung
Verschieben von Objekten von S3
nach Glacier
Glacier
Dauerhaftes Langzeitarchiv
Dauerhaftes Glacier Archiv
Dauerhaft
Entworfen für 99,999999999%
Dauerhaftigkeit der Archive
Kosteneffizient
Write-Once, Read-Never.
Kosteneffiziente Langzeitspeicherung
Bezahlung für Datenzugriff
Logs
✗Zugänglich aus S3
Objekte
verfallen und
werden aus
S3 gelöscht
Zeit
Verfall
Logs
Txns
✗Zugänglich aus S3
Objekte
verfallen und
werden aus
S3 gelöscht
Zeit
Zugänglich aus S3
Objekt-Übergang
nach Glacier
VerfallÜbergang
Logs
Txns
✗Zugänglich aus S3
Objekte
verfallen und
werden aus
S3 gelöscht
Zeit
Zugänglich aus S3
Objekt-Übergang
nach Glacier
Wiederherstellung
der Objekte für
x Stunden
VerfallÜbergang
Logs
Txns
✗Zugänglich aus S3
Objekte
verfallen und
werden aus
S3 gelöscht
Zeit
Zugänglich aus S3
Objekt-Übergang
nach Glacier
Wiederherstellung
der Objekte für
x Stunden
3-5
Stunden
Objekt in S3 RRS
für x Stunden
VerfallÜbergang
3-5 Stunden Zugriffszeit
Wir gehen davon aus, dass Sie nicht oft
zugreifen
using (client = new AmazonS3Client()){
var lifeCycleConfiguration = new LifecycleConfiguration()
{
Rules = new List<LifecycleRule>
{
new LifecycleRule
{
Id = "Archive and delete rule",
Prefix = "projectdocs/",
Status = LifecycleRuleStatus.Enabled,
Transition = new LifecycleTransition()
{
Days = 365,
StorageClass = S3StorageClass.Glacier
},
Expiration = new LifecycleRuleExpiration()
{
Days = 3650
}
}
}
};
using (client = new AmazonS3Client()){
var lifeCycleConfiguration = new LifecycleConfiguration()
{
Rules = new List<LifecycleRule>
{
new LifecycleRule
{
Id = "Archive and delete rule",
Prefix = "projectdocs/",
Status = LifecycleRuleStatus.Enabled,
Transition = new LifecycleTransition()
{
Days = 365,
StorageClass = S3StorageClass.Glacier
},
Expiration = new LifecycleRuleExpiration()
{
Days = 3650
}
}
}
};
Übergang nach
Glacier nach 1 Jahr
using (client = new AmazonS3Client()){
var lifeCycleConfiguration = new LifecycleConfiguration()
{
Rules = new List<LifecycleRule>
{
new LifecycleRule
{
Id = "Archive and delete rule",
Prefix = "projectdocs/",
Status = LifecycleRuleStatus.Enabled,
Transition = new LifecycleTransition()
{
Days = 365,
StorageClass = S3StorageClass.Glacier
},
Expiration = new LifecycleRuleExpiration()
{
Days = 3650
}
}
}
};
Lösche Objekt
nach 10 Jahren
DEMO
Lifecycle Policies
POST /ObjectName?restore HTTP/1.1
Host: BucketName.s3.amazonaws.com
Date: date
Authorization: signatureValue
Content-MD5: MD5
<RestoreRequest xmlns="http://s3.amazonaws.com/doc/2006-3-01">
<Days>NumberOfDays</Days>
</RestoreRequest>
POST /ObjectName?restore HTTP/1.1
Host: BucketName.s3.amazonaws.com
Date: date
Authorization: signatureValue
Content-MD5: MD5
<RestoreRequest xmlns="http://s3.amazonaws.com/doc/2006-3-01">
<Days>NumberOfDays</Days>
</RestoreRequest>
202 Accepted
200 OK
409 Conflict Restoration already in progress
Object already restored, number of days updated
Restore request accepted
Response codes:
Website Hosting
Statische Sites direkt aus S3
Es ist ein Web Dienst…
…also können wir Web-Inhalte
ausliefern
Einstellung Default Documents
Umleitung von Anfragen
{
"Version":"2008-10-17",
"Statement":[{
"Sid":"PublicReadGetObject",
"Effect":"Allow",
"Principal": {
"AWS": "*"
},
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::example-bucket/*"
]
}
]
}
{bucket-name}.s3-website-{region}.amazonaws.com
e.g. mybucket.s3-website-eu-west-1.amazonaws.com
s3-{region}.amazonaws.com/{bucket-name}/{object-key}
e.g. s3-eu-west-1.amazonaws.com/mybucket/img.png
{bucket-name}.s3-{region}.amazonaws.com/{object-key}
e.g. mybucket.s3-eu-west-1.amazonaws.com/img.png
Website Adressierung
Normale Adressierung
DEMO
Website Hosting
R53
Recordset für:
aws-exampl.es
Website Bucket Name:
bucket
Recordset für:
Website Bucket Name:
bucket
Error.
html
Index
.html
R53
www.aws-exampl.es aws-exampl.es
aws-exampl.es
Website Bucket Name:
bucket
Recordset für:
Website Bucket Name:
bucket
Error.
html
Index
.html
R53
www.aws-exampl.es aws-exampl.es
aws-exampl.es
Website Redirect nach:
aws-exampl.es
Website Bucket Name:
bucket
Recordset für:
Website Bucket Name:
bucket
Error.
html
Index
.html
R53
www.aws-exampl.es aws-exampl.es
aws-exampl.es
aws-exampl.es
Ein Record ‘Alias’ zur S3 Website:
aws-exampl.es @
s3-website-eu-west-1.amazonaws.com
docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html
Website Redirect nach:
Website Bucket Name:
bucket
Recordset für:
Website Bucket Name:
bucket
Error.
html
Index
.html
R53
www.aws-exampl.es aws-exampl.es
aws-exampl.es
aws-exampl.es
aws-exampl.es @
s3-website-eu-west-1.amazonaws.com
CNAME für www. nach:
www.aws-exampl.es.s3-website-eu-west-
1.amazonaws.com
docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html
Ein Record ‘Alias’ zur S3 Website:
Website Redirect nach:
docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html
Zeitbeschränkte URLs
Kontrollieren Sie, wie lange Objekte zugreifbar sind
Signierte URLs
Bieten zeitbeschränkten Zugriff
auf Objekte
Zugriffsrechte
Für Objekte in nichtöffentlichen
Buckets um Zugriff auf Objekte
nach Zeitbeschränkung zu
verhindern
https://ianmas-aws.testbucket.s3.amazonaws.com/testfile.txt
?Signature=JHCa39GV1fKRKkEnAWzI88lH7f8%3D
&Expires=1391425438
&AWSAccessKeyId=AKIAIRBKBJ3ZAYAXFC2Q
>>> import boto
>>> conn = boto.connect_s3()
>>> conn.generate_url(300, 'GET', bucket='ianmas-aws.testbucket',
key='testfile.txt')
'https://ianmas-
aws.testbucket.s3.amazonaws.com/testfile.txt?Signature=QUWA%2BGOohFeJ
5pdEzxtdaIFIA6w%3D&Expires=1391425142&AWSAccessKeyId=AKIAIRBKBJ3ZAYAX
FC2Q’
>>> conn.generate_url(300, 'GET', bucket='ianmas-aws.testbucket',
key='testfile.txt', force_http=True)
'http://ianmas-
aws.testbucket.s3.amazonaws.com/testfile.txt?Signature=tALx9KeeSisDSC
0N7KlM%2BIDFZXI%3D&Expires=1391425562&AWSAccessKeyId=AKIAIRBKBJ3ZAYAX
FC2Q'
Erster Parameter ist
Link-Lebenszeit in
Sekunden
Erzwinge nicht-SSL-Link
Fehler: Link Expired
AccessDenied
Request has expired
70297390BE427DC7
2014-02-03T11:03:58Z
I0rI0OWUCnBttFSpEw6Mx4u8uRHgtOSw9k2euDW37skFCU7HH0ulSkUGGaUbn2vg
2014-02-03T11:08:22Z
Objekt-Versionierung
Erhalt der Objektgeschichte
Persistent
Auch Historie von
gelöschten Objekten
bleibt erhalten
Auf Bucket-Ebene
Erhält automatisch alle
Versionen des Objekts
Persistent
Auch Historie von
gelöschten Objekten
bleibt erhalten
Auf Bucket-Ebene
Erhält automatisch alle
Versionen des Objekts
Persistent
Auch Historie von
gelöschten Objekten
bleibt erhalten
Auf Bucket-Ebene
Erhält automatisch alle
Versionen des Objekts
>>> import boto
>>> conn = boto.connect_s3()
>>> bucket = conn.get_bucket(’mybucket')
>>> versions = bucket.list_versions()
>>> for version in versions:
... print version.name + version.version_id
...
myfile.txt jU9eVv800OlP4PQx6zskMEyPIoExne57
myfile.txt xOJzMvMmGv0Bx2v4QpIypbkkH2XE2yyq
myfile.txt 8cjozv9Hmkzum8xj.8q8BZxR5CuXnzon
Object
Versions
-IDs
>>> key = bucket.get_key('myfile.txt',
version_id='8cjozv9Hmkzum8xj.8q8BZxR5CuXnzon’)
>>> key.get_contents_as_string()
'this is version 1 of my file’
Inhalte einer
Version abrufen
>>> key = bucket.get_key('myfile.txt',
version_id='8cjozv9Hmkzum8xj.8q8BZxR5CuXnzon’)
>>> key.get_contents_as_string()
'this is version 1 of my file’
>>> key = bucket.get_key('myfile.txt',
version_id='xOJzMvMmGv0Bx2v4QpIypbkkH2XE2yyq’)
>>> key.get_contents_as_string()
'this is version 2 of my file’
>>> key = bucket.get_key('myfile.txt',
version_id='8cjozv9Hmkzum8xj.8q8BZxR5CuXnzon’)
>>> key.get_contents_as_string()
'this is version 1 of my file’
>>> key = bucket.get_key('myfile.txt',
version_id='xOJzMvMmGv0Bx2v4QpIypbkkH2XE2yyq’)
>>> key.get_contents_as_string()
'this is version 2 of my file’
>>> key.generate_url(600)
'https://mybucket.s3.amazonaws.com/myfile.txt?Signature=ABCD&
Expires=1358857379&AWSAccessKeyId=AB&
versionId=xOJzMvMmGv0Bx2v4QpIypbkkH2XE2yyq'
Erstellen einer 10
Minuten zugreifbaren
URL für die ältere
Version
Metadaten
System- und Benutzer-generiert
Name Beschreibung Änderbar?
Date Object creation date No
Content-Length Object size in bytes No
Content-MD5 Base64 encoded 128bit MD5 digest No
x-amz-server-side-encryption Server side encryption enabled for object Yes
x-amz-version-id Object version No
x-amz-delete-marker Indicates a version enabled object is deleted No
x-amz-storage-class Storage class for the object Yes
x-amz-website-redirect-location Redirects request for the object to another object
or external URL
Yes
System-Metadaten
Benutzer-Metadaten
{your metadata key in here}
Key-Value Paare, die mit den Objekten gespeichert werden
>>> key.set_metadata(’my_tag', ’my metadata')
>>> key.get_metadata(’my_tag')
’my metadata'
CloudFront
Content Delivery von weltweiten Edge Locations
CloudFront
Edge Locations
Dallas(2)
St.Louis
Miami
JacksonvilleLos Angeles (2)
Palo Alto
Seattle
Ashburn(3)
Newark
New York (3)
Dublin
London(2)
Amsterdam (2)
Stockholm
Frankfurt(2)
Paris(2)
Singapore(2)
Hong Kong (2)
Tokyo (2)
Sao Paulo
South Bend
San Jose
Osaka
Milan
Sydney
Madrid
Seoul
Mumbai
ChennaiMarseille
Warsaw
Manila
Taipei
Rio de
Janeiro
Globale Content-Verteilung
Download
Herunterladen von statischen und
dynamischen Objekten
Streaming
RTMP Streaming direkt aus
Mediendateien in S3
Edge Access
Control
Optionaler CNAME
Cache Control
S3 Bucket
Weiterleitung
S3 Bucket
Optionaler CNAME
Logging nach S3
<html>
<script type='text/javascript'
src=’http://d2ew7gdzogp20x.cloudfront.net/jwplayer/jwplayer.js'></script>
<body>
<div id='player'></div>
<script type='text/javascript'>
jwplayer('player').setup({
file: "rtmp://s1eat02wfxn38u.cloudfront.net/cfx/st/montage-medium.mp4",
width: "480",
height: "270",
});
</script>
</body>
</html>
Streaming Distribution
Download Distribution
Zusammenfassung
S3 – flexibler Web Storage
Applikations-Backends
Einfach mit dem S3 SDK
einzubinden
Bootstrapping
Skripte für EC2 Instance
Bootstrapping in S3
Applikationslogs
Logs speichern und mit
EMR analysieren
Web content
Serve content and distribute
globally
Documentation
Store documents with
versioning and security
models
Backups & Archive
Storage Gateway,
Dritthersteller-Werkzeuge
aws.amazon.com/de
skrause@amazon.de
@sk_bln
Codebeispiele: github.com/ianmas-aws/s3-masterclass
• Anfangen mit dem Free Tier:
http://aws.amazon.com/de/free/
• 25 US$ credits für neue Kunden:
http://aws.amazon.com/de/campaigns/account/
• Twitter: @AWS_Aktuell
• Facebook: http://www.facebook.com/awsaktuell
• Webinare: http://aws.amazon.com/de/about-aws/events/
• Slides: http://de.slideshare.net/AWSAktuell
• Demo-Serie auf Youtube:
http://aws.typepad.com/awsaktuell/techsnacks-videos-deutsch.html
Ressourcen

Webinar S3 für Fortgeschrittene