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
550
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
28
推しの成長と発展を寿ぐLT
yu0819ki
1
49
LightningTalkの資料作る時間なかったからおすすめの異世界転生作品を紹介するわ
yu0819ki
2
86
LightningTalkの資料作る時間なかったから カラオケするわ
yu0819ki
0
65
俺と婚活
yu0819ki
2
170
デプロイについて言いたい1つのこと
yu0819ki
0
420
Webシステム不具合調査講座
yu0819ki
1
570
高い学習コストを払ってでも React+Reduxを選ぶその理由
yu0819ki
0
1.1k
やれてなかったからやりたい話
yu0819ki
0
410
Other Decks in Technology
See All in Technology
NgRx Signal Store
rainerhahnekamp
0
150
レガシーをぶっ壊せ。AEONで始めるDevRelの話 / Qiita Night 2024-2-22
aeonpeople
3
1.3k
Next'24 事例セッションの紹介とクラウド資格を活用したキャリア形成について語りMuscle
yasumuusan
1
430
20240418_Google ColabにLLMが搭載されたようなのでPython x データ分析の勉強方法を考えてみる
doradora09
0
120
私が trocco を推す理由
__allllllllez__
1
200
GraphQL 成熟度モデルの紹介と、プロダクトに当てはめた事例 / GraphQL maturity model
mh4gf
7
1.3k
Hands-on Gemini, the Google DeepMind LLM
meteatamel
1
110
Meta Quest 3 で動く桜マシマシ WebXR アプリを IBM Cloud Code Engine と Babylon.js で作った話
1ftseabass
PRO
0
120
Cracking the KubeCon CfP
inductor
2
230
Compose Compiler Metricsを使った実践的なコードレビュー
tomorrowkey
1
220
JSON攻略法.pdf
miyakemito
8
4.9k
継続的な改善 x ⾮連続的な進化
sansantech
PRO
3
140
Featured
See All Featured
A designer walks into a library…
pauljervisheath
200
23k
The Language of Interfaces
destraynor
151
23k
Build your cross-platform service in a week with App Engine
jlugia
225
17k
Producing Creativity
orderedlist
PRO
337
39k
Into the Great Unknown - MozCon
thekraken
10
990
The Invisible Side of Design
smashingmag
294
49k
Statistics for Hackers
jakevdp
789
220k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
2
1.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
7
1k
Building an army of robots
kneath
300
41k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
21
1.6k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
51k
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化できる
ご清聴ありがとうございました