Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS Lambdaを画像変化サーバとして使おうとした話 / AWS Lambda

AWS Lambdaを画像変化サーバとして使おうとした話 / AWS Lambda

Geeks Night @Money Forward

Kuranari Tomohisa

September 30, 2015
Tweet

More Decks by Kuranari Tomohisa

Other Decks in Programming

Transcript

  1. MBNCEBؔ਺ var  async  =  require('async');   var  AWS    

     =  require('aws-­‐sdk');   var  gm        =  require('gm').subClass({  imageMagick:  true  });   var  s3        =  new  AWS.S3();       exports.handler  =  function(event,  context)  {      var  srcBucket  =  event.Records[0].s3.bucket.name;      var  srcKey        =  decodeURIComponent(event.Records[0].s3.object.key);      var  dstBucket  =  srcBucket  +  "resized";      var  dstKey        =  "resized-­‐"  +  srcKey.replace(/\..*$/,  ".jpg");          async.waterfall([          function  download(next)  {              s3.getObject({  Bucket:  srcBucket,  Key:  srcKey  },  next);          },          function  transform(response,  next)  {              gm(response.Body).toBuffer("jpg",  function(err,  buffer)  {                  next(null,  response.ContentType,  buffer);              });          },          function  upload(contentType,  data,  next)  {              s3.putObject({  Bucket:  dstBucket,  Key:  dstKey,     ɹɹɹɹɹɹɹɹɹɹɹ  Body:  data,  ContentType:  contentType  },  next);          }],  function  (err)  {  context.done();  });   }; ࢀߟIUUQEPDTBXTBNB[PODPNKB@KQMBNCEBMBUFTUEHXBMLUISPVHITFWFOUTBENJOVTFSIUNM
  2. MBNCEBؔ਺ var  async  =  require('async');   var  AWS    

     =  require('aws-­‐sdk');   var  gm        =  require('gm').subClass({  imageMagick:  true  });   var  s3        =  new  AWS.S3();       exports.handler  =  function(event,  context)  {      var  srcBucket  =  event.Records[0].s3.bucket.name;      var  srcKey        =  decodeURIComponent(event.Records[0].s3.object.key);      var  dstBucket  =  srcBucket  +  "resized";      var  dstKey        =  "resized-­‐"  +  srcKey.replace(/\..*$/,  ".jpg");          async.waterfall([          function  download(next)  {              s3.getObject({  Bucket:  srcBucket,  Key:  srcKey  },  next);          },          function  transform(response,  next)  {              gm(response.Body).toBuffer("jpg",  function(err,  buffer)  {                  next(null,  response.ContentType,  buffer);              });          },          function  upload(contentType,  data,  next)  {              s3.putObject({  Bucket:  dstBucket,  Key:  dstKey,     ɹɹɹɹɹɹɹɹɹɹɹ  Body:  data,  ContentType:  contentType  },  next);          }],  function  (err)  {  context.done();  });   }; ϥΠϒϥϦϩʔυ ࢀߟIUUQEPDTBXTBNB[PODPNKB@KQMBNCEBMBUFTUEHXBMLUISPVHITFWFOUTBENJOVTFSIUNM
  3. MBNCEBؔ਺ var  async  =  require('async');   var  AWS    

     =  require('aws-­‐sdk');   var  gm        =  require('gm').subClass({  imageMagick:  true  });   var  s3        =  new  AWS.S3();       exports.handler  =  function(event,  context)  {      var  srcBucket  =  event.Records[0].s3.bucket.name;      var  srcKey        =  decodeURIComponent(event.Records[0].s3.object.key);      var  dstBucket  =  srcBucket  +  "resized";      var  dstKey        =  "resized-­‐"  +  srcKey.replace(/\..*$/,  ".jpg");          async.waterfall([          function  download(next)  {              s3.getObject({  Bucket:  srcBucket,  Key:  srcKey  },  next);          },          function  transform(response,  next)  {              gm(response.Body).toBuffer("jpg",  function(err,  buffer)  {                  next(null,  response.ContentType,  buffer);              });          },          function  upload(contentType,  data,  next)  {              s3.putObject({  Bucket:  dstBucket,  Key:  dstKey,     ɹɹɹɹɹɹɹɹɹɹɹ  Body:  data,  ContentType:  contentType  },  next);          }],  function  (err)  {  context.done();  });   }; ϥΠϒϥϦϩʔυ όέοτ ϑΝΠϧ໊ఆٛ ࢀߟIUUQEPDTBXTBNB[PODPNKB@KQMBNCEBMBUFTUEHXBMLUISPVHITFWFOUTBENJOVTFSIUNM
  4. MBNCEBؔ਺ var  async  =  require('async');   var  AWS    

     =  require('aws-­‐sdk');   var  gm        =  require('gm').subClass({  imageMagick:  true  });   var  s3        =  new  AWS.S3();       exports.handler  =  function(event,  context)  {      var  srcBucket  =  event.Records[0].s3.bucket.name;      var  srcKey        =  decodeURIComponent(event.Records[0].s3.object.key);      var  dstBucket  =  srcBucket  +  "resized";      var  dstKey        =  "resized-­‐"  +  srcKey.replace(/\..*$/,  ".jpg");          async.waterfall([          function  download(next)  {              s3.getObject({  Bucket:  srcBucket,  Key:  srcKey  },  next);          },          function  transform(response,  next)  {              gm(response.Body).toBuffer("jpg",  function(err,  buffer)  {                  next(null,  response.ContentType,  buffer);              });          },          function  upload(contentType,  data,  next)  {              s3.putObject({  Bucket:  dstBucket,  Key:  dstKey,     ɹɹɹɹɹɹɹɹɹɹɹ  Body:  data,  ContentType:  contentType  },  next);          }],  function  (err)  {  context.done();  });   }; ϥΠϒϥϦϩʔυ όέοτ ϑΝΠϧ໊ఆٛ αϜω࡞੒ ࢀߟIUUQEPDTBXTBNB[PODPNKB@KQMBNCEBMBUFTUEHXBMLUISPVHITFWFOUTBENJOVTFSIUNM
  5. ϝϞϦ(# λΠϜΞ΢τ࣌ؒඵͰ ॲཧ͖͠ΕΔͷ͔ʜʁ 14% ϑΝΠϧαΠζ ࣮ߦ࣌ؒ ϝϞϦ࢖༻ྔ .# ඵ .#

    .# ඵ .# .# ඵ .# .# &SSPS .# .# &SSPS .# ϝϞϦΛ࢖͍͖ͬͯࢮΜͰΔʁ