(SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014
-
Upload
amazon-web-services -
Category
Technology
-
view
1.697 -
download
2
description
Transcript of (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014
![Page 1: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/1.jpg)
November 14, 2014 | Las Vegas, NV
Tim Hunt, Sr. Product Manager, Amazon S3
![Page 2: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/2.jpg)
![Page 3: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/3.jpg)
![Page 4: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/4.jpg)
S3
Events
SNS topic
SQS queue
Lambda function
Notifications
Foo() {…}
-- Preview --
![Page 5: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/5.jpg)
Integration – A new surface on the
Amazon S3 “building block” for event-
based computing
Speed – typical time to send
notifications is less than a second
Simplicity – Avoids proxies or polling
to detect changesProxy
List/Diff
Notifications
or
![Page 6: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/6.jpg)
![Page 7: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/7.jpg)
S3 Lambda
Foo() {…}
Notification
![Page 8: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/8.jpg)
![Page 9: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/9.jpg)
![Page 10: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/10.jpg)
![Page 11: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/11.jpg)
![Page 12: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/12.jpg)
![Page 13: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/13.jpg)
![Page 14: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/14.jpg)
![Page 15: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/15.jpg)
![Page 16: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/16.jpg)
// read values from the event
// sanity check: validate that source and destination are different buckets
// make sure it‘s a jpg or png
![Page 17: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/17.jpg)
// read values from the event
var srcBucket = event.Records[0].s3.bucket.name;
var srcKey = event.Records[0].s3.object.key;
var dstBucket = srcBucket + "resized";
var dstKey = "resized-" + srcKey;
// sanity check: validate that source and destination are different buckets
// make sure it‘s a jpg or png
![Page 18: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/18.jpg)
// read values from the event
// sanity check: validate that source and destination are different buckets
if (srcBucket == dstBucket) {
return;
}
// make sure it‘s a jpg or png
![Page 19: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/19.jpg)
// read values from the event
// sanity check: validate that source and destination are different buckets
// make sure it‘s a jpg or png
var imageType = srcKey.match(/\.([^.]*)$/)[1];
if (imageType != "jpg" && imageType != "png") {
return;
}
![Page 20: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/20.jpg)
// download image from S3 into buffer
// generate the thumbnail
// Put into S3
function upload(data, next) {
s3.putObject({Bucket: dstBucket, Key: dstKey, Body: data, ContentType: contentType}, next);
![Page 21: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/21.jpg)
// download image from S3 into buffer
function download(next) {
s3.getObject({Bucket: srcBucket, Key: srcKey}, next);
},
// generate the thumbnail
// Put into S3
function upload(data, next) {
s3.putObject({Bucket: dstBucket, Key: dstKey, Body: data, ContentType: contentType}, next);
![Page 22: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/22.jpg)
// download image from S3 into buffer
// generate the thumbnail
function tranform(response, next) {
gm(response.Body).size(function(err, size) {
this.resize(width, height).toBuffer(imageType, function(err, buffer) {
if (err) { next(err);}
else {next(null, response.ContentType, buffer);}
});
});
},
// Put into S3
function upload(data, next) {
s3.putObject({Bucket: dstBucket, Key: dstKey, Body: data, ContentType: contentType}, next);
![Page 23: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/23.jpg)
// download image from S3 into buffer
// generate the thumbnail
// Put into S3
function upload(data, next) {
s3.putObject({Bucket: dstBucket, Key: dstKey, Body: data, ContentType: contentType}, next);
![Page 24: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/24.jpg)
![Page 25: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/25.jpg)
![Page 26: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/26.jpg)
![Page 27: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/27.jpg)
Continued…
![Page 28: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/28.jpg)
![Page 29: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/29.jpg)
SQSS3 EC2
Foo() {…}
DynamoDB
Notification
Web Page
![Page 30: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/30.jpg)
while (true) {
// Long poll for the messages
List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
for (Message message : messages) {
// Process the message
processMessage(message.getBody());
// Delete the message after we are done.
sqs.deleteMessage(myQueueUrl, message.getReceiptHandle());
}
}
Authentication and access control not shown for brevity, but published best practices should be followed.
![Page 31: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/31.jpg)
while (true) {
// Long poll for the messages
List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
for (Message message : messages) {
// Process the message
processMessage(message.getBody());
// Delete the message after we are done.
sqs.deleteMessage(myQueueUrl, message.getReceiptHandle());
}
}
Authentication and access control not shown for brevity, but published best practices should be followed.
![Page 32: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/32.jpg)
while (true) {
// Long poll for the messages
List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
for (Message message : messages) {
// Process the message
processMessage(message.getBody());
// Delete the message after we are done.
sqs.deleteMessage(myQueueUrl, message.getReceiptHandle());
}
}
Authentication and access control not shown for brevity, but published best practices should be followed.
![Page 33: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/33.jpg)
while (true) {
// Long poll for the messages
List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
for (Message message : messages) {
// Process the message
processMessage(message.getBody());
// Delete the message after we are done.
sqs.deleteMessage(myQueueUrl, message.getReceiptHandle());
}
}
Authentication and access control not shown for brevity, but published best practices should be followed.
![Page 34: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/34.jpg)
// Parse the bucket and key from the event notification
// Skip thumbnails to avoid recursion
// Download the file from S3
Authentication and access control not shown for brevity, but published best practices should be followed.
![Page 35: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/35.jpg)
// Parse the bucket and key from the event notification
S3EventNotificationRecord item = S3EventNotificationItem.parseJson(messageBody).getRecords().get(0);
String bucketName = item.getS3().getBucket().getName();
String objectName = item.getS3().getObject().getObjectNameOnly();
String thumbnailFileName = thumbnailPrefix + objectName;
// Skip thumbnails to avoid recursion
// Download the file from S3
Authentication and access control not shown for brevity, but published best practices should be followed.
![Page 36: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/36.jpg)
// Parse the bucket and key from the event notification
if (objectName.startsWith(thumbnailPrefix)) {
return; // Skip thumbnails to avoid recursion
}
// Download the file from S3
Authentication and access control not shown for brevity, but published best practices should be followed.
![Page 37: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/37.jpg)
// Parse the bucket and key from the event notification
// Skip thumbnails to avoid recursion
// Download the file from S3
s3.getObject(new GetObjectRequest(bucketName, objectName), new File(tempFileName));
Authentication and access control not shown for brevity, but published best practices should be followed.
![Page 38: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/38.jpg)
// Read the GPS info from the file
// Put the photo info into DynamoDB for public website display
// Generate a thumbnail and put it into S3
// Notify our web page to add it to the map
Authentication and access control not shown for brevity, but published best practices should be followed.
![Page 39: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/39.jpg)
// Read the GPS info from the file
double[] gps = readGpsFromEXIF(tempFileName);
// Put the photo info into DynamoDB for public website display
// Generate a thumbnail and put it into S3
// Notify our web page to add it to the map
Authentication and access control not shown for brevity, but published best practices should be followed.
![Page 40: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/40.jpg)
// Read the GPS info from the file
// Put the photo info into DynamoDB for public website display
putNewPhotoInDynamo (bucketName, objectName, gps, "http://" +sourceBucketName + ".s3.amazonaws.com/" + thumbnailFileName);
// Generate a thumbnail and put it into S3
// Notify our web page to add it to the map
Authentication and access control not shown for brevity, but published best practices should be followed.
![Page 41: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/41.jpg)
// Read the GPS info from the file
// Put the photo info into DynamoDB for public website display
// Generate a thumbnail and put it into S3
generateThumbnail(tempFileName, thumbnailFileName);
s3.putObject(sourceBucketName, thumbnailFileName, new File(thumbnailFileName));
// Notify our web page to add it to the map
Authentication and access control not shown for brevity, but published best practices should be followed.
![Page 42: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/42.jpg)
// Read the GPS info from the file
// Put the photo info into DynamoDB for public website display
// Generate a thumbnail and put it into S3
// Notify our web page to add it to the map
sqs.sendMessage(sqs.createQueue(realTimeQueueName).getQueueUrl(), key);
Authentication and access control not shown for brevity, but published best practices should be followed.
![Page 43: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/43.jpg)
![Page 44: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/44.jpg)
![Page 45: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/45.jpg)
![Page 46: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/46.jpg)
![Page 47: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/47.jpg)
![Page 48: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/48.jpg)
![Page 49: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/49.jpg)
![Page 50: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/50.jpg)
![Page 51: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/51.jpg)
![Page 52: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/52.jpg)
![Page 53: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/53.jpg)
![Page 54: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/54.jpg)
![Page 55: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/55.jpg)
![Page 56: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/56.jpg)
![Page 57: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/57.jpg)
![Page 58: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/58.jpg)
![Page 59: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/59.jpg)
![Page 60: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/60.jpg)
![Page 61: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/61.jpg)
![Page 62: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/62.jpg)
![Page 63: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/63.jpg)
![Page 64: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/64.jpg)
![Page 65: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/65.jpg)
![Page 66: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/66.jpg)
![Page 67: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/67.jpg)
![Page 68: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/68.jpg)
![Page 69: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/69.jpg)
![Page 71: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/71.jpg)
![Page 72: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/72.jpg)
![Page 73: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/73.jpg)
![Page 74: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/74.jpg)
![Page 75: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/75.jpg)
![Page 76: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/76.jpg)
![Page 77: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/77.jpg)
![Page 78: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/78.jpg)
![Page 79: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/79.jpg)
![Page 80: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/80.jpg)
![Page 81: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/81.jpg)
![Page 82: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/82.jpg)
![Page 83: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/83.jpg)
![Page 84: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/84.jpg)
![Page 85: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/85.jpg)
![Page 86: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/86.jpg)
![Page 87: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/87.jpg)
Amazon
![Page 88: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/88.jpg)
![Page 89: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/89.jpg)
![Page 90: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/90.jpg)
![Page 91: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/91.jpg)
![Page 92: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/92.jpg)
![Page 93: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/93.jpg)
![Page 94: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/94.jpg)
![Page 95: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/95.jpg)
![Page 96: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/96.jpg)
![Page 97: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/97.jpg)
![Page 98: (SDD413) Amazon S3 Deep Dive and Best Practices | AWS re:Invent 2014](https://reader033.fdocuments.in/reader033/viewer/2022052412/5591b1831a28ab1b518b4782/html5/thumbnails/98.jpg)