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