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.
Lambdaによる
クラウド型言語の実装
Genki&Sugawara
お前誰よ
• twi%er
• @sgwr_dts
• github/bitbicket
• winebarrel
最近のアクティビティ
• Lambda便利ツール作りました
• lambchop
• h,ps://github.com/winebarrel/lambchop
• Please:try:it:out!
本題
Lambdaを触ってみました
• h#p://so)wh.at/search?q=lambda
• AWS;Lambdaで外部のURLをたたく;);h#p://goo.gl/aZkxTy
• AWS;LambdaでMySQL(RDS)に接続する...
スループットを計ってみたり
h"p://www.slideshare.net/winebarrel/
200ksec
twi$erボット作ってみたり
h"ps://github.com/winebarrel/aws6lambda6
tw6bot
僕はこう思ったッス
フィルタであって
ジョブキューではないのかな…
戻り値を受け取りづらい
Developer(Guide(9ページ目
h/p://docs.aws.amazon.com/lambda/latest/dg/lambda=dg.pdf
• context.done()は2つの引数をとる
• 1つ目...
戻り値を受け取りづらい
CW#Logsはともかく
テスト実行コンソールのログ取得APIがない
単体ではInvokeに一対一で対応した
実行結果を受け取れない
CloudWatch+Logsつらい
• 検索機能がない
• Log%Groupはfunc-on名
• しかし出力先Log%Streamが不定
エラーハンドリングつらい
• エラーのグラフはでるけど個別のエラーはログあさるしかない
• CloudWatch,Logsで探すのめんどい
lambchop)tail
• lambda用のtail
• h*ps://github.com/winebarrel/lambchop/
• blob/master/lib/lambchop/tail.rb
• blob/master/lib...
中でやってること
• tailコマンド実行後に更新されたLog)Streamを全部取得
• 指定時間以降のLog)Eventを取得、ソートして出力
• 以降繰り返し…
Pythonのツールでも同じことやってた
• kappa
• command*line*tool*for*AWS*Lambda.
• h8ps://github.com/garnaat/kappa
• kappa tailコマンドの実装がほぼ同...
AWSはこう思ったッス(想像)
『おおいなる流れ(Stream)の中では
 個々の実行結果などどうでもいいのだ』
現状では個々の実行結果を知るのが厳しい
なのでジョブキュー用途にはあまり向いていないような
戻り値を受け取る方法を
考えてみた
• アプリがLambdaを実行
• uuidを関数コールIDとして付ける
• LambdaはSQSに結果を投げる
• uuidもSQSに投げる
• 別スレッドがSQSをポーリング
• uuidに対応した関数呼び出しに結果を返す
なにが楽しいか?
• サーバいらずのジョブキューシステムを持てる
• 並列実効性が高い(タイムアウト60sだけど)
• Nodeならオンデマンドでロジックをぶち込める
• Func/on.toString
Func%on.toString
h"ps://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/
Global_Objects/FuncBon/toString
$ node
> v...
こういうことができる
var lambda_func = lambda(function(args, callback) {
// Run on Lambda
// Any job
callback({key:'val'});
});
lamb...
作ってみた
lambleg
h"ps://www.npmjs.com/package/lambleg
Demo
すでに同じネタをやってる人がいた!orz
Lambdaws
h)ps://github.com/mentum/lambdaws
var λ = require('lambdaws').create;
var calculator = funct...
もう少し考えを進めてみた
• Pure&JSのコードはだいたいそのまま実行できる
• nodeで言語を実装すればもっとシームレスになるのでは?
作ってみた
クラウド型言語(仮)
Clala
h"ps://github.com/winebarrel/clala
こんなんです
• schemeのサブセット
• Lambdaに関数を定義できる
• コンテキストをLambdaに持って行ける
• (破壊的更新はできません)
Demo
所感
• 実験的実装なので未来はないが未来感はある
• 非同期な世界とのギャップがつらい
• だれか実用的なのを実装してください
まとめ
• 実行毎の結果をハンドルできると便利そうです
• なので機能追加をぜひー
• あとタイムアウト時間をのばさせて
• あとSNS対応を
• ついでにCW&Logsに検索機能をばー
Thank&you&for&your&a,en.on.
Lambdaによるクラウド型言語の実装
Upcoming SlideShare
Loading in …5
×

Lambdaによるクラウド型言語の実装

Lambdaによるクラウド型言語の実装

Lambdaによるクラウド型言語の実装

  1. 1. Lambdaによる クラウド型言語の実装 Genki&Sugawara
  2. 2. お前誰よ • twi%er • @sgwr_dts • github/bitbicket • winebarrel
  3. 3. 最近のアクティビティ • Lambda便利ツール作りました • lambchop • h,ps://github.com/winebarrel/lambchop • Please:try:it:out!
  4. 4. 本題
  5. 5. Lambdaを触ってみました • h#p://so)wh.at/search?q=lambda • AWS;Lambdaで外部のURLをたたく;);h#p://goo.gl/aZkxTy • AWS;LambdaでMySQL(RDS)に接続する;);h#p://goo.gl/33tVg1 • aws)sdkで自分自身にイベントを送る;);h#p://goo.gl/GhBykk • バイナリデータをイベントとして送る;);h#p://goo.gl/Za5EpR • 任意のシステムコマンドを実行する;);h#p://goo.gl/oJ60F8
  6. 6. スループットを計ってみたり h"p://www.slideshare.net/winebarrel/ 200ksec
  7. 7. twi$erボット作ってみたり h"ps://github.com/winebarrel/aws6lambda6 tw6bot
  8. 8. 僕はこう思ったッス フィルタであって ジョブキューではないのかな…
  9. 9. 戻り値を受け取りづらい Developer(Guide(9ページ目 h/p://docs.aws.amazon.com/lambda/latest/dg/lambda=dg.pdf • context.done()は2つの引数をとる • 1つ目がnullのときは成功 • null以外のときは失敗。CW(Logsに出力 • 2つ目の引数が与えられた場合、テスト実行コンソールに出力
  10. 10. 戻り値を受け取りづらい CW#Logsはともかく テスト実行コンソールのログ取得APIがない 単体ではInvokeに一対一で対応した 実行結果を受け取れない
  11. 11. CloudWatch+Logsつらい • 検索機能がない • Log%Groupはfunc-on名 • しかし出力先Log%Streamが不定
  12. 12. エラーハンドリングつらい • エラーのグラフはでるけど個別のエラーはログあさるしかない • CloudWatch,Logsで探すのめんどい
  13. 13. lambchop)tail • lambda用のtail • h*ps://github.com/winebarrel/lambchop/ • blob/master/lib/lambchop/tail.rb • blob/master/lib/lambchop/watch_dog.rb
  14. 14. 中でやってること • tailコマンド実行後に更新されたLog)Streamを全部取得 • 指定時間以降のLog)Eventを取得、ソートして出力 • 以降繰り返し…
  15. 15. Pythonのツールでも同じことやってた • kappa • command*line*tool*for*AWS*Lambda. • h8ps://github.com/garnaat/kappa • kappa tailコマンドの実装がほぼ同じ ちょっとつらい…
  16. 16. AWSはこう思ったッス(想像) 『おおいなる流れ(Stream)の中では  個々の実行結果などどうでもいいのだ』
  17. 17. 現状では個々の実行結果を知るのが厳しい なのでジョブキュー用途にはあまり向いていないような
  18. 18. 戻り値を受け取る方法を 考えてみた
  19. 19. • アプリがLambdaを実行 • uuidを関数コールIDとして付ける • LambdaはSQSに結果を投げる • uuidもSQSに投げる • 別スレッドがSQSをポーリング • uuidに対応した関数呼び出しに結果を返す
  20. 20. なにが楽しいか? • サーバいらずのジョブキューシステムを持てる • 並列実効性が高い(タイムアウト60sだけど) • Nodeならオンデマンドでロジックをぶち込める • Func/on.toString
  21. 21. Func%on.toString h"ps://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/ Global_Objects/FuncBon/toString $ node > var f = function() { console.log('hello'); } undefined > f.toString(); 'function () { console.log('hello'); }'
  22. 22. こういうことができる var lambda_func = lambda(function(args, callback) { // Run on Lambda // Any job callback({key:'val'}); }); lambda_func({key: "val"}, function(retval) { console.log(retval); });
  23. 23. 作ってみた lambleg h"ps://www.npmjs.com/package/lambleg
  24. 24. Demo
  25. 25. すでに同じネタをやってる人がいた!orz Lambdaws h)ps://github.com/mentum/lambdaws var λ = require('lambdaws').create; var calculator = function(a, b, callback) { callback(a+b) }; var cloudedCalculator = λ(calculator); cloudedCalculator(5, 2, function(data) { // Calls the function in the cloud, it doesn't run locally console.log(data); // Prints 7 });
  26. 26. もう少し考えを進めてみた • Pure&JSのコードはだいたいそのまま実行できる • nodeで言語を実装すればもっとシームレスになるのでは?
  27. 27. 作ってみた
  28. 28. クラウド型言語(仮) Clala h"ps://github.com/winebarrel/clala
  29. 29. こんなんです • schemeのサブセット • Lambdaに関数を定義できる • コンテキストをLambdaに持って行ける • (破壊的更新はできません)
  30. 30. Demo
  31. 31. 所感 • 実験的実装なので未来はないが未来感はある • 非同期な世界とのギャップがつらい • だれか実用的なのを実装してください
  32. 32. まとめ • 実行毎の結果をハンドルできると便利そうです • なので機能追加をぜひー • あとタイムアウト時間をのばさせて • あとSNS対応を • ついでにCW&Logsに検索機能をばー
  33. 33. Thank&you&for&your&a,en.on.

×