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
Node.js on AWS Lambda
Search
yu0819ki
May 25, 2016
Technology
0
610
Node.js on AWS Lambda
AWS Lambda で Node.js 動かしてみる系
yu0819ki
May 25, 2016
Tweet
Share
More Decks by yu0819ki
See All by yu0819ki
たまには今日から業務で使える話でもしてみよう
yu0819ki
0
33
推しの成長と発展を寿ぐLT
yu0819ki
1
88
LightningTalkの資料作る時間なかったからおすすめの異世界転生作品を紹介するわ
yu0819ki
2
110
LightningTalkの資料作る時間なかったから カラオケするわ
yu0819ki
0
94
俺と婚活
yu0819ki
2
200
デプロイについて言いたい1つのこと
yu0819ki
0
470
Webシステム不具合調査講座
yu0819ki
1
620
高い学習コストを払ってでも React+Reduxを選ぶその理由
yu0819ki
0
1.2k
やれてなかったからやりたい話
yu0819ki
0
420
Other Decks in Technology
See All in Technology
プロポーザルのコツ ~ Kaigi on Rails 2025 初参加で3名の登壇を実現 ~
naro143
1
200
OpenAI gpt-oss ファインチューニング入門
kmotohas
2
1.1k
能登半島災害現場エンジニアクロストーク 【JAWS FESTA 2025 in 金沢】
ditccsugii
0
230
E2Eテスト設計_自動化のリアル___Playwrightでの実践とMCPの試み__AIによるテスト観点作成_.pdf
findy_eventslides
1
570
神回のメカニズムと再現方法/Mechanisms and Playbook for Kamikai scrumat2025
moriyuya
4
700
AWS IoT 超入門 2025
hattori
0
290
自動テストのコストと向き合ってみた
qa
0
210
社内お問い合わせBotの仕組みと学び
nish01
1
530
これがLambdaレス時代のChatOpsだ!実例で学ぶAmazon Q Developerカスタムアクション活用法
iwamot
PRO
5
780
【Kaigi on Rails 事後勉強会LT】MeはどうしてGirlsに? 私とRubyを繋いだRail(s)
joyfrommasara
0
220
速習AGENTS.md:5分で精度を上げる "3ブロック" テンプレ
ismk
0
100
社内報はAIにやらせよう / Let AI handle the company newsletter
saka2jp
8
1.3k
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Embracing the Ebb and Flow
colly
88
4.8k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
54
3k
How to train your dragon (web standard)
notwaldorf
96
6.3k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Site-Speed That Sticks
csswizardry
11
890
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
Transcript
Node.js on AWS Lambda 2016/5/25 yu0819ki@CyberZ
Intro. Name: 木村 幸弘 a.k.a yu0819ki Birthday: 1985.08.19
Age: 30 Birthplace: 北海道 Job: 技術総務(非公式) Hobby: 音ゲー、読書、作曲 Motto: パンが無ければ作ればいいじゃない
もくじ • AWS Lambdaについて • Node.jsについて • Node.js v4.x で実装済みの主なES2015機能(feature)
• Node.js v6.x で使えるようになる主なES2015機能(feature) • 環境変数とdotenvとLambda • Write Once, Run Anywhere. っぽいことを実現する • Lambdaか否かで何が違う? • LambdaRouter • Lambda上で動く(デモ) • CLIで動く(デモ) • Herokuで動く(デモ)
AWS Lambdaについて 【AWS Lambdaとは】 • みんな大好きサーバーレスアーキテクチャの申し子だよ! • 「イベント」を受けて「何か」をするよ! • 「イベントソース」に「S3になにか作った」「DynamoDB上でなにか消され
た」「SNSの通知があった」などを登録できるよ! • Java 8, Node.js v4/v0.10, python 2.7 のいずれかでプログラミングできる よ! • 実行時間とメモリサイズでお値段が決まるよ! • 同時実行は100個までだよ! • タイムアウトは最大で5分までしか設定できないよ! • 詳しいことはググったほうが早いよ! • 以下、Lambdaと略したり略さなかったりします
Node.jsについて 【Node.jsとは】 • みんな大好きJavascriptのサーバーサイド実行環境だよ! • 見る人によって環境の違うWebブラウザだと使いにくいES6(ES2015)の機 能を使っても環境依存が起きにくいよ! • class 構文と
arrow function だけでも随分やりやすくなるよ! • あとPromise!消費者金融じゃないよ! • 詳しいことはググったほうが早いよ! • 以下、Nodeと略したり略さなかったりします
Node.jsについて 【Node.js v4.x で実装済みの主なES2015機能(feature)】 • 以下、Strictモード('use strict’)前提 • const /
let • const hoge = 'hoge'; hoge = 'fuga'; // TypeError: Assignment to constant variable. • generator • function*() / yield • arrow function • (a) => { return a; } • class構文 • class hoge {} / class fuga extends hoge {} • Promise • promised().then(okFn, ngFn).catch(errFn); • Promise.all([promised1, promised2, promised3]). then(); • 詳しいことは(ry
Node.jsについて 【Node.js v6.x で実装済みの主なES2015機能(feature)】 • デフォルト引数 • function(hoge = 1)
{ return hoge; } • 可変長引数 • function(a, b, ...any) { return any[0]; } • Reflect • Reflect.apply(anyFn, thisArg, args); // anyFn.apply(thisArg, args); • Reflect.construct(AnyClass, args); // returns a instance of AnyClass. • Reflect.construct(require(moduleName), args); // construct by string! • Proxy • ごめん何も試してない • 詳しいことは(ry
環境変数とdotenvとLambda 【環境変数】 • 実行しているシェルに対して割り当てられている変数 • $PATH とか • printenv コマンドなどで確認できる
• ソースコードに含めたくない情報を突っ込む開発手法(?)がある • パスワードとか秘密鍵とか • HerokuやCircleCIなどのSaaS/PaaSでは、コンフィグで環境変数を設定 できることがある 【Node.jsにおける環境変数】 • process.env を参照すれば取れる • 実行時に限定した環境変数を指定できる • $ NODE_ENV=production node • $ echo $NODE_ENV // empty
環境変数とdotenvとLambda 【Lambdaにおける環境変数】 • 設定できる場所が無い • HerokuやCircleCIなどには設定できるのに。。。 • 頑張ればできなくはない • http://qiita.com/mashiro/items/ab4cab5e623397d6b29d
• http://qiita.com/exabugs/items/3926e1f1764c0314ff09 • ソースの改修をせずに変数変えたいって言うならDescriptionもア リだろうけど、しかしそれはDescriptionなんですかとモヤモヤ・・・ 【dotenv】 • 環境変数を .env ファイルにまとめて、アプリケーション側に読み込む仕 組み • Node.js以外にも実装がある • require('dotenv').config(); // process.env を上書きする
環境変数とdotenvとLambda 【Lambdaとdotenvとわたし】 • .env ファイルを zip に含めてデプロイすればいいじゃん • でもローカルの .env
は、ローカルで動かすときに使うし・・・ • gulp で Lambda のデプロイができるようにした • zip コマンドと アップロードコマンドに分けてある • Lambda上で動かすときの環境変数を .build_env として持っておき、 zip するときにリネーム • 尚、.env, .build_env は.gitignore に入れてあります
Write Once, Run Anywhere. っぽいことを実現する 【Lambdaか否かで何が違う?】 • 「イベント」を引数にした関数が実行される • jQuery的な書き方をすると
$elem.on('click', (event) =>{ someprocess(); }); • MVCだと HTTP Request を受けてコントローラとアクションを特定し、そ のアクションを実行する(HTTP Requestがあった、というイベントと捉 える) • つまりルーティング • CLIだとコマンドオプションを元にプログラムが実行される • つまりルーティング
Write Once, Run Anywhere. っぽいことを実現する 【LambdaRouter】 • 肝はルーティングであると • イベントを適切に解釈して、呼ぶべき関数をLambdaに返してやるルー
ターが必要だ • 作った https://github.com/cyber-‐z/lambda-‐router
Write Once, Run Anywhere. っぽいことを実現する デモ
まとめ • AWS Lambda 上で動く Node.js のバージョンは v4.x なので ちょっと古い
• 環境変数(っぽいもの)を使おうとするとちょっと面倒 • 工夫次第で環境を選ばないアプリケーションが作れる→既存 アプリケーションもLambda化できる
ご清聴ありがとうございました