Etikettarkiv: amazon cloudfront

Optimera Amazon S3 och CloudFront

CC Flickr @ladydragonflyherworld

Jag är en optimeringsnörd, det måste jag erkänna. Jag kan sitta i timmar och optimera små kodsnuttar eller webbsidor tills det att det inte går att göra så mycket mer. Därför brukar jag som bekant använda mig av molntjänster såsom Amazon S3 samt CloudFront för att lagra statisikt innehåll.

För att optimera webbsidor så använder jag bl.a. verktyget Google PageSpeed för att hitta  flaskhalsar och en uppenbar sak som PageSpeed klagade på var att Expire/Cache-headers samt komprimering. Standard så stödjer ej Amazon S3/CloudFront ej komprimering men med hjälp av s3cmd och några extra flaggor så går detta att lösa:

1. Komprimera dina stylesheets och javascript:

$ gzip -9 style.css

2. Ladda upp komprimerade filerna och sätt headers:

$ s3cmd put style.css.gz s3://cloudfront.domän.se/ --mime-type "text/css"  --add-header "Content-Encoding: gzip" --acl-public --add-header "Expires: Sun, 17 Jan 2038, 19:14:07 GMT" --add-header "Cache-Control: max-age=315360000"

Verktyget s3cmd hittas här: http://s3tools.org/s3cmd

Uppdatering: Typo fixad. Tack Emil Stenström.

 

 

Amazon CloudFront – Så kommer du igång

Det är nu fyra dagar sedan som Bloggy tog ett första steg till att bli en ”del av molnet”-tjänst. Det första steget innebär att alla statiska objekt ligger på Amazon CloudFront-tjänsten.

Eftersom jag hade gjort en implementation till Bloggy tidigare som använde sig av SimpleCDN så var det trivialt att byta ut två rader kod så att Bloggy istället använde sig av Amazon CloudFront.

Den PHP-implementation jag använder är denna: undesigned.org.za/2007/10/22/amazon-s3-php-class

Och den kod som jag använder mig för att ladda upp ett objekt i PHP är följande:

require_once "S3.class.php";
$s3 = new S3('accessKey', 'secretKey');
$s3->putObjectFile('file.doc', 'cf.bloggy.se', 'docs/file.doc', S3::ACL_PUBLIC_READ);

Detta förutsätter att jag redan innan skapat en CloudFront bucket med hjälp av s3cmd:

$ s3cmd --configure

Tips: Använder du Amazon S3 istället så bör du lägga till raden ”bucket_location = EU” i din ~/.s3cfg om du vill att dina buckets ska skpas i europa.

$ ./s3cmd mb s3://cloudfront.bloggy.se 

 

 

Bucket 's3://cloudfront.bloggy.se/' created
$ ./s3cmd cfcreate s3://cloudfront.bloggy.se 

Distribution created: Origin:         s3://cloudfront.bloggy.se/ 

DistId:         cf://E3VE9DJIVFQYO3 

DomainName:     d1bq8ovpea0j10.cloudfront.net 

CNAMEs: 

Comment:        http://cloudfront.bloggy.se.s3.amazonaws.com/ 

Status:         InProgress 

Enabled:        True Etag:           

E2N0AVZ9F1WJZL 

 

 

$   

Som ovan visar så är Status: InProgress och efter några minuter så visas Status: Deployed.

Om du vill använda ditt eget domännamn exempelvis cloudfront.bloggy.se (DNS != bucketnamn) så måste detta sättas som CNAME parameter på den bucketen eller så använder du

Andra bra kommandon: s3cmd ls samt s3cmd cfinfo för att visa dina buckets samt status.

För att sedan synkronisera statiska objekt såsom CSS-filer så behöver du enbart göra enligt följande:

$ ./s3cmd sync /var/www/bloggy.se/docs/css/ s3://cloudfront.bloggy.se

Efter fyra dagar så ser min förbrukning/dollars ut så här (klicka på bilden):

amazonJag har tidigare jämfört Amazon S3 med CloufFront.