Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo

ServerlessConf Tokyo 2018 LT
FaaSのインターフェースに見るサーバーレス

※縦横比 9:48

  • Login to see the comments

FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo

  1. 1. < ServerlessConf Tokyo 2018 LT > FaaSのインターフェースに見るサーバーレス Aki @ nekoruri
  2. 2. サーバーレス定義ガチ勢の方から来ました • Aki (@nekoruri) 『秋葉原生まれ大手町育ちの歌って踊れる江戸っ子フルスタッククラウドエンジニア』 • セキュリティ人材育成:セキュリティ・キャンプ 開発と運用トラック担当P / SecHack365 トレーナー • 同人物書き • 「Serverlessを支える技術 第2版」電子書籍販売中 • 2015年12月からサーバーレスの同人誌を出し続けてはや3年弱 • Microsoft MVP (Azure, 2017/01-) / ProjectDIVA Arcade LV.631 【広告】Serverlessを支える技術 第2版 電子書籍版あります! gum.co/serverless2 【広告】Serverlessを支える技術 第2版 電子書籍版あります! gum.co/serverless2
  3. 3. みんなだいすきFunction as a Service • Serverlessなシステムにおける中心人物(今のところ) • 10年後には「自前Function挟んだら負け」時代が来る、かも……? • Service: AWS Lambda、Azure Functions、Google Cloud Functions、IBM Cloud Functions • OSS: OpenFaaS、Apache OpenWhisk、Kubeless スライドURL:bit.ly/faas20180929 Serverlessを支える技術 第2版:gum.co/serverless2
  4. 4. 「インターフェース」にはそのFaaSの設計思想が詰まっている • どんなふうに使って欲しいのか・何を重視しているのか・そもそもなにであるのか • インターフェースでメガクラウド3社(AWS、Azure、GCP)を比較してみます • 各社共通のNode 8 • HTTPトリガー スライドURL:bit.ly/faas20180929 Serverlessを支える技術 第2版:gum.co/serverless2
  5. 5. AWS Lambda exports.handler = async (event, context, callback) => { // TODO implement const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!') }; return response; // callback(null, response); }; callbackで返したり、 Promiseを返すことも可能 eventは独自形式 HTTPであればAPI Gatewayで「設定できる」 HTTPレスポンスを返す場合も、 API Gatewayで挙動を「変更可能」 全体的に「自分で設定する余地」が大きい AWSらしいビルディングブロック感がある スライドURL:bit.ly/faas20180929 Serverlessを支える技術 第2版:gum.co/serverless2
  6. 6. Azure Functions module.exports = async function (context, req, input1) { if (req.query.name) { context.res = { body: "Hello " + req.query.name + ", ID is " + input1.id }; } else { context.res = { status: 400, body: "Please pass a name" }; } // return { body: "Hello" }; }; async/await対応によりコールバック (context.done)は不要に return で返した値をOutput binding に送る設定もできる トリガーに応じたイベントが渡される Input bindingを引数でも受け取れる (context.bindings.input1 でもOK) HTTレスポンスはcontext.resで返す それ以外のoutput bindingは context.bindings.output1などに入れる Input/Output bindingの活用により、 「シンプルなことをシンプルに、関数らしく」書ける スライドURL:bit.ly/faas20180929 Serverlessを支える技術 第2版:gum.co/serverless2 トリガーの内容を使ってInput bindingで DBクエリなどを行い追加データを持ってこれる
  7. 7. Google Cloud Functions exports.helloWorld = (req, res) => { let message = req.query.message || req.body.message || 'Hello World!'; res.status(200).send(message); }; reqで受け取りresに入れて返す コールバックとかは特にない (強いて言うならres.send()が相当) インターフェース自体のシンプル(単純さ)を追求 スライドURL:bit.ly/faas20180929 Serverlessを支える技術 第2版:gum.co/serverless2
  8. 8. まとめ • AWS: 全体的に「自分で設定する余地」が大きい、AWSらしいビルディングブロック感がある まだ方向性が定まっていなかった時期 • Azure: Input/Output bindingの活用により、「シンプルなことをシンプルに、関数らしく」書ける binding機構自体の「変態さ」もある(今回は割愛) • GCP: インターフェース自体のシンプル(単純さ)を追求 Googleらしい割り切り感 スライドURL:bit.ly/faas20180929 Serverlessを支える技術 第2版:gum.co/serverless2

×