• Like
Lambdaによるクラウド型言語の実装
Upcoming SlideShare
Loading in...5
×

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

  • 43 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
43
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Lambdaによる クラウド型言語の実装 Genki&Sugawara
  • 2. お前誰よ • twi%er • @sgwr_dts • github/bitbicket • winebarrel
  • 3. 最近のアクティビティ • Lambda便利ツール作りました • lambchop • h,ps://github.com/winebarrel/lambchop • Please:try:it:out!
  • 4. 本題
  • 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. スループットを計ってみたり h"p://www.slideshare.net/winebarrel/ 200ksec
  • 7. twi$erボット作ってみたり h"ps://github.com/winebarrel/aws6lambda6 tw6bot
  • 8. 僕はこう思ったッス フィルタであって ジョブキューではないのかな…
  • 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. 戻り値を受け取りづらい CW#Logsはともかく テスト実行コンソールのログ取得APIがない 単体ではInvokeに一対一で対応した 実行結果を受け取れない
  • 11. CloudWatch+Logsつらい • 検索機能がない • Log%Groupはfunc-on名 • しかし出力先Log%Streamが不定
  • 12. エラーハンドリングつらい • エラーのグラフはでるけど個別のエラーはログあさるしかない • CloudWatch,Logsで探すのめんどい
  • 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. 中でやってること • tailコマンド実行後に更新されたLog)Streamを全部取得 • 指定時間以降のLog)Eventを取得、ソートして出力 • 以降繰り返し…
  • 15. Pythonのツールでも同じことやってた • kappa • command*line*tool*for*AWS*Lambda. • h8ps://github.com/garnaat/kappa • kappa tailコマンドの実装がほぼ同じ ちょっとつらい…
  • 16. AWSはこう思ったッス(想像) 『おおいなる流れ(Stream)の中では  個々の実行結果などどうでもいいのだ』
  • 17. 現状では個々の実行結果を知るのが厳しい なのでジョブキュー用途にはあまり向いていないような
  • 18. 戻り値を受け取る方法を 考えてみた
  • 19. • アプリがLambdaを実行 • uuidを関数コールIDとして付ける • LambdaはSQSに結果を投げる • uuidもSQSに投げる • 別スレッドがSQSをポーリング • uuidに対応した関数呼び出しに結果を返す
  • 20. なにが楽しいか? • サーバいらずのジョブキューシステムを持てる • 並列実効性が高い(タイムアウト60sだけど) • Nodeならオンデマンドでロジックをぶち込める • Func/on.toString
  • 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. こういうことができる 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. 作ってみた lambleg h"ps://www.npmjs.com/package/lambleg
  • 24. Demo
  • 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. もう少し考えを進めてみた • Pure&JSのコードはだいたいそのまま実行できる • nodeで言語を実装すればもっとシームレスになるのでは?
  • 27. 作ってみた
  • 28. クラウド型言語(仮) Clala h"ps://github.com/winebarrel/clala
  • 29. こんなんです • schemeのサブセット • Lambdaに関数を定義できる • コンテキストをLambdaに持って行ける • (破壊的更新はできません)
  • 30. Demo
  • 31. 所感 • 実験的実装なので未来はないが未来感はある • 非同期な世界とのギャップがつらい • だれか実用的なのを実装してください
  • 32. まとめ • 実行毎の結果をハンドルできると便利そうです • なので機能追加をぜひー • あとタイムアウト時間をのばさせて • あとSNS対応を • ついでにCW&Logsに検索機能をばー
  • 33. Thank&you&for&your&a,en.on.