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
620
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
38
推しの成長と発展を寿ぐLT
yu0819ki
1
95
LightningTalkの資料作る時間なかったからおすすめの異世界転生作品を紹介するわ
yu0819ki
2
120
LightningTalkの資料作る時間なかったから カラオケするわ
yu0819ki
0
110
俺と婚活
yu0819ki
2
210
デプロイについて言いたい1つのこと
yu0819ki
0
490
Webシステム不具合調査講座
yu0819ki
1
630
高い学習コストを払ってでも React+Reduxを選ぶその理由
yu0819ki
0
1.2k
やれてなかったからやりたい話
yu0819ki
0
430
Other Decks in Technology
See All in Technology
スピンアウト講座04_ルーティン処理
overflowinc
0
1k
JEDAI認定プログラム JEDAI Order 2026 受賞者一覧 / JEDAI Order 2026 Winners
databricksjapan
0
270
詳解 強化学習 / In-depth Guide to Reinforcement Learning
prinlab
0
360
Phase08_クイックウィン実装
overflowinc
0
1.5k
ThetaOS - A Mythical Machine comes Alive
aslander
0
130
GitHub Copilot CLI で Azure Portal to Bicep
tsubakimoto_s
0
180
visionOS 開発向けの MCP / Skills をつくり続けることで XR の探究と学習を最大化
karad
1
1.2k
AIエージェント×GitHubで実現するQAナレッジの資産化と業務活用 / QA Knowledge as Assets with AI Agents & GitHub
tknw_hitsuji
0
180
脳が溶けた話 / Melted Brain
keisuke69
1
830
【社内勉強会】新年度からコーディングエージェントを使いこなす - 構造と制約で引き出すClaude Codeの実践知
nwiizo
20
10k
俺の/私の最強アーキテクチャ決定戦開催 ― チームで新しいアーキテクチャに適合していくために / 20260322 Naoki Takahashi
shift_evolve
PRO
1
420
建設DXを支えるANDPAD: 2025年のセキュリティの取り組みと卒業したいセキュリティ
andpad
0
160
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
[SF Ruby Conf 2025] Rails X
palkan
2
850
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.4k
How to make the Groovebox
asonas
2
2k
Un-Boring Meetings
codingconduct
0
230
Become a Pro
speakerdeck
PRO
31
5.9k
What does AI have to do with Human Rights?
axbom
PRO
1
2k
Mind Mapping
helmedeiros
PRO
1
130
Typedesign – Prime Four
hannesfritz
42
3k
Test your architecture with Archunit
thirion
1
2.2k
Testing 201, or: Great Expectations
jmmastey
46
8.1k
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化できる
ご清聴ありがとうございました