Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Node.js on AWS Lambda

Node.js on AWS Lambda

AWS Lambda で Node.js 動かしてみる系

yu0819ki

May 25, 2016
Tweet

More Decks by yu0819ki

Other Decks in Technology

Transcript

  1. Intro. Name:   木村 幸弘 a.k.a yu0819ki Birthday:   1985.08.19

    Age:   30 Birthplace: 北海道 Job: 技術総務(非公式) Hobby: 音ゲー、読書、作曲 Motto: パンが無ければ作ればいいじゃない
  2. もくじ • 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で動く(デモ)
  3. AWS  Lambdaについて 【AWS  Lambdaとは】 • みんな大好きサーバーレスアーキテクチャの申し子だよ! • 「イベント」を受けて「何か」をするよ! • 「イベントソース」に「S3になにか作った」「DynamoDB上でなにか消され

    た」「SNSの通知があった」などを登録できるよ! • Java  8,  Node.js  v4/v0.10,  python  2.7  のいずれかでプログラミングできる よ! • 実行時間とメモリサイズでお値段が決まるよ! • 同時実行は100個までだよ! • タイムアウトは最大で5分までしか設定できないよ! • 詳しいことはググったほうが早いよ! • 以下、Lambdaと略したり略さなかったりします
  4. Node.jsについて 【Node.jsとは】 • みんな大好きJavascriptのサーバーサイド実行環境だよ! • 見る人によって環境の違うWebブラウザだと使いにくいES6(ES2015)の機 能を使っても環境依存が起きにくいよ! • class  構文と

    arrow  function  だけでも随分やりやすくなるよ! • あとPromise!消費者金融じゃないよ! • 詳しいことはググったほうが早いよ! • 以下、Nodeと略したり略さなかったりします
  5. 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
  6. 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
  7. 環境変数とdotenvとLambda 【環境変数】 • 実行しているシェルに対して割り当てられている変数 • $PATH  とか • printenv  コマンドなどで確認できる

    • ソースコードに含めたくない情報を突っ込む開発手法(?)がある • パスワードとか秘密鍵とか • HerokuやCircleCIなどのSaaS/PaaSでは、コンフィグで環境変数を設定 できることがある 【Node.jsにおける環境変数】 • process.env  を参照すれば取れる • 実行時に限定した環境変数を指定できる • $  NODE_ENV=production  node • $  echo  $NODE_ENV  //  empty
  8. 環境変数と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  を上書きする
  9. 環境変数とdotenvとLambda 【Lambdaとdotenvとわたし】 • .env  ファイルを zip  に含めてデプロイすればいいじゃん • でもローカルの .env

     は、ローカルで動かすときに使うし・・・ • gulp  で Lambda  のデプロイができるようにした • zip  コマンドと アップロードコマンドに分けてある • Lambda上で動かすときの環境変数を .build_env  として持っておき、 zip  するときにリネーム • 尚、.env,  .build_env  は.gitignore  に入れてあります
  10. Write  Once,  Run  Anywhere. っぽいことを実現する 【Lambdaか否かで何が違う?】 • 「イベント」を引数にした関数が実行される • jQuery的な書き方をすると

    $elem.on('click',  (event)  =>{  someprocess();  }); • MVCだと HTTP  Request  を受けてコントローラとアクションを特定し、そ のアクションを実行する(HTTP  Requestがあった、というイベントと捉 える) • つまりルーティング • CLIだとコマンドオプションを元にプログラムが実行される • つまりルーティング
  11. まとめ • AWS  Lambda  上で動く Node.js  のバージョンは v4.x  なので ちょっと古い

    • 環境変数(っぽいもの)を使おうとするとちょっと面倒 • 工夫次第で環境を選ばないアプリケーションが作れる→既存 アプリケーションもLambda化できる