Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWS Lambdaを画像変化サーバとして使おうとした話 / AWS Lambda
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kuranari Tomohisa
September 30, 2015
Programming
1.3k
0
Share
AWS Lambdaを画像変化サーバとして使おうとした話 / AWS Lambda
Geeks Night @Money Forward
Kuranari Tomohisa
September 30, 2015
More Decks by Kuranari Tomohisa
See All by Kuranari Tomohisa
英語学習用CLIツールを作った話
kuranari
0
300
21Cafe感謝祭 / 21Cafe
kuranari
0
76
MUGEN MEET UP #1
kuranari
0
69
MUGEN MEET UP #0
kuranari
0
200
Clipboard API
kuranari
0
290
Other Decks in Programming
See All in Programming
GoogleCloudとterraform完全に理解した
terisuke
1
200
要はバランスからの卒業 #yumemi_grow
kajitack
0
170
AWSはOSSをどのように 考えているのか?
akihisaikeda
0
130
Migrations : C'est une question d'hygiène !
vinceamstoutz
0
680
Spec-Driven Development with AI Agents (Workshop, May 2026)
antonarhipov
3
400
Sans tests, vos agents ne sont pas fiables
nabondance
0
140
今さら聞けないCancellationToken
htkym
0
120
ビジネスモデルから紐解く、AI+型駆動開発
hirokiomote
2
520
ふにゃっとしない名前の付け方 〜哲学で茹で上げる、コシのあるソフトウェア設計〜
shimomura
0
120
権限チェックの一貫性を型で守る TypeScript による多層防御
mnch
3
200
cloudnative conference 2026 flyle
azihsoyn
1
200
Hive Metastoreを通して学ぶIceberg REST Catalog ― 仕様から実装まで
okumin
0
210
Featured
See All Featured
Context Engineering - Making Every Token Count
addyosmani
9
890
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.3k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
330
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
360
Designing for Performance
lara
611
70k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
330
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
290
Making the Leap to Tech Lead
cromwellryan
135
9.8k
Deep Space Network (abreviated)
tonyrice
0
150
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Transcript
"84-BNCEBΛ ը૾มαʔόͱͯ͠ ͓͏ͱͨ͠ ஐٱ !LVSBOBSJ@UN (FFLT/JHIU!.POFZ'PSXBSE
ࣗݾհ w ஐٱ !LVSBOBSJ@UN w גࣜձࣾ.6(&/61ΤϯδχΞ w 3BJMTΛத৺ʹ৭ʑͱ
.6(&/61 w %Πϥετɾ%$(ͷΫϥυιʔγϯά
.6(&/61 w %Πϥετɾ%$(ͷΫϥυιʔγϯά w </FX>σβΠϯ੍࡞ͷϓϩδΣΫτཧπʔϧ
w ΫϥυܕϓϩδΣΫτཧπʔϧ w ήʔϜΞηοτ੍࡞ʹศརͳػೳ͕ͨ͘͞Μ IUUQXXXTBWFQUDPN
ϑΝΠϧϓϨϏϡʔ 14%"*ϑΝΠϧ͔ΒαϜωΠϧΛ࡞
"84-BNCEBΛͬͯ ߏͯ͠Έͨ
"84-BNCEBͷಛ w ΠϕϯτΛτϦΨʔʹίʔυΛ࣮ߦͰ͖Δ w ྫ 4ϑΝΠϧ͕Ξοϓϩʔυ͞Εͨ࣌ w ίʔυ࣮ߦ͚࣌ؒͩ՝ۚ ແྉ༻ॆ
w ࣗಈεέʔϦϯά w ݴޠ/PEFKT +BWB
"84-BNCEBΛͬͨߏ 3BJMT͔Β4ʹϑΝΠϧΛ Ξοϓϩʔυ -BNCEB͕࣮ؔߦ * 4͔Β-BNCEBʹ14% ϑΝΠϧಡΈࠐΈ **
14%ˠ+1(ม *** +1(Λ4ʹΞοϓ 4 &$ 3BJMT -BNCEB OPEFKT
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
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
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
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
ઃఆύϥϝʔλ w ΠϕϯττϦΨ 4 %ZOBNP%# FUD w λΠϜΞτ࣌ؒ dඵ
w ϝϞϦྔ d .#
(#͑ͷ14%Λ ϝϞϦ .# ॲཧ࣌ؒඵ Ͱ͚͞Δͷʁ
ݕূ
ϝϞϦ(# λΠϜΞτ࣌ؒඵͰ ॲཧ͖͠ΕΔͷ͔ʜʁ 14% ϑΝΠϧαΠζ ࣮ߦ࣌ؒ ϝϞϦ༻ྔ .# ඵ .#
.# ඵ .# .# ඵ .# .# &SSPS .# .# &SSPS .# ϝϞϦΛ͍͖ͬͯࢮΜͰΔʁ
݁Ռ w "84-BNCEBΛΘͳ͍ํ๏Λ࠾༻ͨ͠ w (#ΫϥεͷϑΝΠϧΛѻ͏߹੍͕Ωπ͍ w ॏ͍όονॲཧΛஔ͖͑ΔͷͰͳ͍Έ͍ͨ