< ServerlessConf Tokyo 2018 LT >
FaaSのインターフェースに見るサーバーレス
Aki @ nekoruri
サーバーレス定義ガチ勢の方から来ました
• 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
みんなだいすき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
「インターフェース」にはそのFaaSの設計思想が詰まっている
• どんなふうに使って欲しいのか・何を重視しているのか・そもそもなにであるのか
• インターフェースでメガクラウド3社(AWS、Azure、GCP)を比較してみます
• 各社共通のNode 8
• HTTPトリガー
スライドURL:bit.ly/faas20180929
Serverlessを支える技術 第2版:gum.co/serverless2
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
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クエリなどを行い追加データを持ってこれる
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
まとめ
• AWS: 全体的に「自分で設定する余地」が大きい、AWSらしいビルディングブロック感がある
まだ方向性が定まっていなかった時期
• Azure: Input/Output bindingの活用により、「シンプルなことをシンプルに、関数らしく」書ける
binding機構自体の「変態さ」もある(今回は割愛)
• GCP: インターフェース自体のシンプル(単純さ)を追求
Googleらしい割り切り感
スライドURL:bit.ly/faas20180929
Serverlessを支える技術 第2版:gum.co/serverless2

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

  • 1.
    < ServerlessConf Tokyo2018 LT > FaaSのインターフェースに見るサーバーレス Aki @ nekoruri
  • 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.
    みんなだいすきFunction as aService • 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.
  • 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.
    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.
    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.
    まとめ • AWS: 全体的に「自分で設定する余地」が大きい、AWSらしいビルディングブロック感がある まだ方向性が定まっていなかった時期 •Azure: Input/Output bindingの活用により、「シンプルなことをシンプルに、関数らしく」書ける binding機構自体の「変態さ」もある(今回は割愛) • GCP: インターフェース自体のシンプル(単純さ)を追求 Googleらしい割り切り感 スライドURL:bit.ly/faas20180929 Serverlessを支える技術 第2版:gum.co/serverless2