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
Lambda + Apex 事例紹介 ~ 全ては AWS コスト削減のために ~ / Case...
Search
Yoshiaki Yoshida
March 10, 2017
Technology
2
6.4k
Lambda + Apex 事例紹介 ~ 全ては AWS コスト削減のために ~ / Case Study of Lambda and Apex
Lambda + Apex 事例紹介
~ 全ては AWS コスト削減のために ~
Yoshiaki Yoshida
March 10, 2017
Tweet
Share
More Decks by Yoshiaki Yoshida
See All by Yoshiaki Yoshida
技術ブロガーを育てる!ブログメンタリングで何を教えているのか / Passion for Blog Mentoring
kakakakakku
8
37k
プログラミング初心者に教えるときは「身近な比喩」が重要なのだ! / Metaphor is Important for Beginner Programmer
kakakakakku
2
5.6k
プロジェクトの成功を支える ZenHub と モブプログラミング / ZenHub and Mob Programming
kakakakakku
1
5.8k
楽しく!アウトプットを習慣化しよう / Let's Enjoy Output
kakakakakku
3
6.8k
さぁ!今すぐプロジェクトリーダーに立候補しよう / Be a Project Leader
kakakakakku
3
9.1k
プロジェクトをリードする技術 (Kyash 社 再演) / Project Leading is Skill for Kyash
kakakakakku
4
2.2k
プロジェクトをリードする技術 / Project Leading is Skill
kakakakakku
43
47k
Mackerel で ECS をどこまでモニタリングできるのか / Monitoring ECS with Mackerel
kakakakakku
0
13k
[2018/01/30] Redash 初心者向けハンズオン / Redash Meetup #0.1
kakakakakku
0
2.4k
Other Decks in Technology
See All in Technology
オブザーバビリティプラットフォーム開発におけるオブザーバビリティとの向き合い / Hatena Engineer Seminar #34 オブザーバビリティの実現と運用編
arthur1
0
160
alecthomas/kong はいいぞ
fujiwara3
6
1.2k
Amazon CloudWatchのメトリクスインターバルについて / Metrics interval matters
ymotongpoo
3
300
【CEDEC2025】ブランド力アップのためのコンテンツマーケティング~ゲーム会社における情報資産の活かし方~
cygames
PRO
0
150
2025新卒研修・HTML/CSS #弁護士ドットコム
bengo4com
2
3k
MCPと認可まわりの話 / mcp_and_authorization
convto
2
330
[MIRU2025]Preference Optimization for Multimodal Large Language Models for Image Captioning Tasks
keio_smilab
PRO
0
130
経理出身PdMがAIプロダクト開発を_ハンズオンで学んだ話.pdf
shunsukenarita
1
260
増え続ける脆弱性に立ち向かう: 事前対策と優先度づけによる 持続可能な脆弱性管理 / Confronting the Rise of Vulnerabilities: Sustainable Management Through Proactive Measures and Prioritization
nttcom
1
230
Datasets for Critical Operations by Dataform
kimujun
0
130
Recoil脱却の現状と挑戦
kirik
3
480
MCPに潜むセキュリティリスクを考えてみる
milix_m
1
920
Featured
See All Featured
The Language of Interfaces
destraynor
158
25k
Code Reviewing Like a Champion
maltzj
524
40k
Writing Fast Ruby
sferik
628
62k
Side Projects
sachag
455
43k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
We Have a Design System, Now What?
morganepeng
53
7.7k
The Pragmatic Product Professional
lauravandoore
35
6.8k
Embracing the Ebb and Flow
colly
86
4.8k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
1k
Transcript
-BNCEB "QFYࣄྫհ dશͯ"84ίετݮͷͨΊʹd !LBLBLBLBLLV ࣾษڧձ
:PTIJBLJ:PTIJEB !LBLBLBLBLLV ‣ .BLVBLF$ZCFS"HFOU$SPXE'VOEJOH *OD ‣ 8FC0QFSBUJPOT&OHJOFFSٕ݉ज़ใ ‣ "84 3VCZ
$FSUJpFE4DSVN.BTUFS ‣ ϓϩάϥϛϯάߨࢣͷࣄΛ࢝Ί·ͨ͠ ‣ IUUQLBLBLBLBLLVIBUFOBCMPHDPN
ʘ࠷ۙ$ZCFS"HFOU%FWFMPQFST#MPHʹهࣄग़ͯ͠·͢ʗ IUUQTEFWFMPQFSTDZCFSBHFOUDPKQCMPHBSDIJWFT IUUQTEFWFMPQFSTDZCFSBHFOUDPKQCMPHBSDIJWFT
ʘϙουΩϟετσϏϡʔ͠·ͨ͠ʗ IUUQMFBOBHJMFGNFQJTPEF
None
"84-BNCEB ͬͯ·͔͢ʁ
։ൃڥͷ "84ίετݮʹͬͯ·͢
։ൃڥͷ "84ίετݮʹͬͯ·͢ ʁʁʁ
"848FMM"SDIJUFDUFE'SBNFXPSL
"848FMM"SDIJUFDUFE'SBNFXPSL $PTU0QUJNJ[BUJPO1JMMBS 5JNFCBTFEBQQSPBDI &YBNQMFTPGBUJNFCBTFEBQQSPBDIJODMVEFGPMMPXJOH UIFTVO UVSOJOHPGG%FWFMPQNFOUBOE5FTU JOTUBODFTPWFSUIFXFFLFOE GPMMPXJOH RVBSUFSMZPSBOOVBMTDIFEVMFT FH
#MBDL'SJEBZ
"848FMM"SDIJUFDUFE'SBNFXPSL $PTU0QUJNJ[BUJPO1JMMBS 5JNFCBTFEBQQSPBDI &YBNQMFTPGBUJNFCBTFEBQQSPBDIJODMVEFGPMMPXJOH UIFTVO UVSOJOHPGG%FWFMPQNFOUBOE5FTU JOTUBODFTPWFSUIFXFFLFOE GPMMPXJOH RVBSUFSMZPSBOOVBMTDIFEVMFT FH
#MBDL'SJEBZ ؆୯ʹݴ͏ͱ ʮि։ൃ༻ΠϯελϯεΛࢭΊΑ͏ʯ
.PO 5VF 5IV 8FE 'SJ 4BU 4VO
.PO 5VF 5IV 8FE 'SJ 4BU 4VO
*OTUBODFIPVSTXFFL ݮͯ͠·͢
ΞʔΩςΫνϟհ
-BNCEB $MPVE8BUDI &WFOUT DSPO࣮ߦ &$ &$ &$ TUBSUTUPQ ϝϯςφϯεPOPGG <࣮ߦϑϩʔ>
-BNCEB $MPVE8BUDI &WFOUT DSPO࣮ߦ &$ &$ &$ TUBSUTUPQ ϝϯςφϯεPOPGG <࣮ߦϑϩʔ>
ΠϯελϯεΛૢ࡞͢Δ ‣ "844%,GPS+BWB4DSJQU ‣ TUBSU*OTUBODFT QBSBNT\^ DBMMCBDL ‣ TUPQ*OTUBODFT
QBSBNT\^ DBMMCBDL ‣ -BNCEB'VODUJPOͰΠϕϯτ͝ͱʹॲཧΛذ͍ͯ͠Δ ‣ \BDUJPOlTUBSU^ˠΠϯελϯεىಈ ‣ \BDUJPOlTUPQ^ˠΠϯελϯεఀࢭ QBSBNTʹ*OTUBODF*ETΛઃఆͯ͠ ෳΠϯελϯεΛૢ࡞͢Δ
-BNCEB $MPVE8BUDI &WFOUT DSPO࣮ߦ &$ &$ &$ TUBSUTUPQ ϝϯςφϯεPOPGG <࣮ߦϑϩʔ>
"84$MPVE8BUDI&WFOUT ϞχλϦϯά ͚ͩ͡Όͳ͍Αʁ
εέδϡʔϦϯά࣮ߦ ‣ +FOLJOT͍ͨ͠ ‣ "84$MPVE8BUDI&WFOUT ‣ DSPOࣜͰઃఆͨ͠εέδϡʔϦϯάͰ-BNCEBΛىಈͰ͖Δ ‣ ཁҙϙΠϯτ ‣
DSPOࣜ ‣ 65$લఏ
DSPOࣜ ݄༵࣌ؒ .0/'3* ΤϥʔʹͳΔ ยํΛ ʹ͢Δඞཁ͕͋Δ
65$લఏ ຊ࣌ؒlՐਫۚz TUPQ*OTUBODFT
.PO 5VF 5IV 8FE 'SJ 4BU 4VO
65$લఏ .0/'3* ײతʹཧղ͠ʹ͍͘ ຊ࣌ؒlՐਫۚz TUPQ*OTUBODFT
-BNCEB $MPVE8BUDI &WFOUT DSPO࣮ߦ &$ &$ &$ TUBSUTUPQ ϝϯςφϯεPOPGG <࣮ߦϑϩʔ>
"84-BNCEB Ͳ͏ͬͯ σϓϩΠ͢Δʁ
-BNCEB $MPVE8BUDI &WFOUT DSPO࣮ߦ &$ &$ &$ TUBSUTUPQ ϝϯςφϯεPOPGG NFSHF
IPPL BQFYEFQMPZ <࣮ߦϑϩʔ> <σϓϩΠϑϩʔ>
None
"QFY ‣ -BNCEBཧπʔϧʢϏϧυˍσϓϩΠʣ ‣ ؔ࿈4FSWFSMFTT'SBNFXPSL -BNWFSZ "844".ͳͲ ‣ -BNCEBʹಛԽ͍ͯ͠ΔͨΊඇৗʹബ࣮͘͞Ε͍ͯΔ ‣
υΩϡϝϯτॆ࣮͍ͯ͠Δ ‣ 5FSSBGPSN࿈ܞ ‣ ABQFYJOGSBAίϚϯυAUFSSBGPSNAίϚϯυͷϥούʔ
"QFYίϚϯυհ ‣ BQFYJOJUॳظԽ͢Δʢ*".3PMFͱ*".1PMJDZͷࣗಈੜؚΉʣ ‣ BQFYEFQMPZ-BNCEB'VODUJPOΛσϓϩΠ͢Δ ‣ BQFYJOWPLF-BNCEB'VODUJPOΛ࣮ߦ͢Δ ‣ BQFYMPHT G
$MPVE8BUDI-PHTΛ֬ೝ͢Δ ‣ BQFYEPDTυΩϡϝϯτΛࢀর͢Δ
{ "name": "project-name", "description": "project-name", "memory": 128, "timeout": 300, "role":
"", "environment": { "DEBUG_SHIM": "true" } } "QFYઃఆϑΝΠϧ project.json -BNCEB'VODUJPOͷϝϞϦͱλΠϜΞτઃఆͰ͖Δ
"QFYઃఆϑΝΠϧ { "name": "project-name", "description": "project-name", "memory": 128, "timeout": 300,
"role": "", "environment": { "DEBUG_SHIM": "true" } "hooks": { "build": "cp ../../package.json . && npm install" } } project.json OQNϥΠϒϥϦΛؚΊΔ͜ͱͰ͖Δ
$JSDMF$*͔ΒσϓϩΠ͢Δ machine: timezone: Asia/Tokyo dependencies: post: - curl https://raw.githubusercontent.com/apex/ apex/master/install.sh
| sudo sh deployment: master: branch: master commands: - apex deploy test: pre: - npm install eslint --save-dev override: - ./node_modules/.bin/eslint . circle.yml NBTUFSʹϚʔδ͞ΕͨΒ ࣗಈతʹσϓϩΠ͢Δ &4-JOUΛ ࣮ߦ͢Δ
-BNCEB $MPVE8BUDI &WFOUT DSPO࣮ߦ &$ &$ &$ TUBSUTUPQ ϝϯςφϯεPOPGG NFSHF
IPPL BQFYEFQMPZ <࣮ߦϑϩʔ> <σϓϩΠϑϩʔ>
ؾ͖·ͨ͠ʁ
-BNCEB $MPVE8BUDI &WFOUT DSPO࣮ߦ &$ &$ &$ TUBSUTUPQ ϝϯςφϯεPOPGG NFSHF
IPPL BQFYEFQMPZ <࣮ߦϑϩʔ> <σϓϩΠϑϩʔ> 4FSWFSMFTT "SDIJUFDUVSF
ͬͱৄ͘͠ʂ
BQFYBQFY
BQFYBQFY
BQFYBQFY
XJUI(PTVQQPSU
-BNCEBαϙʔτݴޠ ‣ /PEFKT ‣ +BWB ‣ 1ZUIPO ‣ $ SF*OWFOUͰ
3VCZͱ(PMBOHαϙʔτͷ ൃද͕ແͯ͘ ΨοΧϦͨ͠ਓଟ͍Ͱ͠ΐ͏
JOEFYKTΛಡΜͩ
var child = require('child_process') var byline = require('./byline') /** *
Callback for the request. */ var callback /** * Child process for binary I/O. */ var proc = child.spawn('./main', { stdio: ['pipe', 'pipe', process.stderr] }) proc.on('error', function(err){ console.error('[shim] error: %s', err) process.exit(1) }) proc.on('exit', function(code, signal){ console.error('[shim] exit: code=%s signal=%s', code, signal) process.exit(1) }) index.js ࢠϓϩηεͰ (P NBJO Λಈ͔ͯ͠ ϓϩηεؒ௨৴Λ͢Δ ඪ४ೖྗ TUEJO ඪ४ग़ྗ TUEPVU ඪ४Τϥʔग़ྗ TUEFSS
/** * Newline-delimited JSON stdout. */ var out = byline(proc.stdout)
out.on('data', function(line){ if (process.env.DEBUG_SHIM) console.log('[shim] parsing: `%s`', line) var msg = JSON.parse(line) callback(msg.error, msg.value) }) /** * Handle events. */ exports.handle = function(event, ctx, cb) { callback = cb ctx.callbackWaitsForEmptyEventLoop = false proc.stdin.write(JSON.stringify({ "event": event, "context": ctx })+'\n'); } index.js (Pͷඪ४ग़ྗΛฦ͢ \ ʢதུʣ FOWJSPONFOU\ %(@4)*.USVF ^ ^ ։ൃதσόοάϞʔυ ʹ͓ͯ͘͠ͱศར
؆ུԽ͢Δͱ
JOEFYKT BQFYTIJN NBJOHP 45%*/ 45%065 JOWPLF DIJME@QSPDFTTTQBXO 45%&33
Ͳ͏ͯ͠-BNCEBͰ (PΛಈ͔͍ͨ͠ͳΒ͑Δ͔ʁ ʢެࣜαϙʔτΛͬͯྑͦ͞͏ʣ
"845JQTհ ࣌ؒ༨ͬͨΒ
BXTMPHT $MPVE8BUDI-PHTΛ؆୯ʹॲཧͰ͖Δ$-* ʢϑΟϧλ Υον ࣌ࢦఆͳͲʣ
HJUTFDSFUT *".ΫϨσϯγϟϧͷޡίϛοτΛࢭ͢Δπʔϧ ʢҰݴͰݴ͑HJUIPPLTʣ
SPBEXPSLFS 3PVUFͷઃఆΛ*OGSBTUSVDUVSFBT$PEFԽ͢Δ ʢݸਓυϝΠϯͷཧʹͬͯΔʣ
QJDVMFU ηΩϡϦςΟάϧʔϓΛ*OGSBTUSVDUVSFBT$PEFԽ͢Δ
·ͱΊ
-BNCEB "QFYศརʂ