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
590
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
31
推しの成長と発展を寿ぐLT
yu0819ki
1
71
LightningTalkの資料作る時間なかったからおすすめの異世界転生作品を紹介するわ
yu0819ki
2
95
LightningTalkの資料作る時間なかったから カラオケするわ
yu0819ki
0
84
俺と婚活
yu0819ki
2
190
デプロイについて言いたい1つのこと
yu0819ki
0
450
Webシステム不具合調査講座
yu0819ki
1
590
高い学習コストを払ってでも React+Reduxを選ぶその理由
yu0819ki
0
1.2k
やれてなかったからやりたい話
yu0819ki
0
420
Other Decks in Technology
See All in Technology
Amazon Bedrock 2025 年の熱いアップデート (2025/3 時点)
icoxfog417
PRO
3
380
20250304_赤煉瓦倉庫_DeepSeek_Deep_Dive
hiouchiy
2
140
Global Databaseで実現するマルチリージョン自動切替とBlue/Greenデプロイ
j2yano
0
200
RaspberryPi CM4(CM5も)面白いぞ!
nonnoise
1
250
書籍『入門 OpenTelemetry』 / Intro of OpenTelemetry book
ymotongpoo
8
580
Cracking the Coding Interview 6th Edition
gdplabs
14
28k
開発者体験を定量的に把握する手法と活用事例
ham0215
0
150
Amazon Q Developerの無料利用枠を使い倒してHello worldを表示させよう!
nrinetcom
PRO
2
130
MLflowはどのようにLLMOpsの課題を解決するのか
taka_aki
0
160
最近のSRE支援ニーズ考察 | sogaoh's LT @ Road to SRE NEXT@札幌
sogaoh
PRO
1
160
ABWG2024採択者が語るエンジニアとしての自分自身の見つけ方〜発信して、つながって、世界を広げていく〜
maimyyym
1
230
LangGraph × Bedrock による複数の Agentic Workflow を利用した Supervisor 型のマルチエージェントの実現/langgraph-bedrock-supervisor-agent
ren8k
3
360
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
244
12k
BBQ
matthewcrist
87
9.5k
KATA
mclloyd
29
14k
Documentation Writing (for coders)
carmenintech
69
4.6k
Making Projects Easy
brettharned
116
6k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
The Language of Interfaces
destraynor
156
24k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.5k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.4k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
52k
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化できる
ご清聴ありがとうございました