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.

Railsエンジニアが サーバーレスアーキテクチャに 手を出したよ - 川崎Ruby会議01

2,377 views

Published on

川崎Ruby会議01 で発表した資料です

Published in: Engineering
  • Be the first to comment

Railsエンジニアが サーバーレスアーキテクチャに 手を出したよ - 川崎Ruby会議01

  1. 1. Railsエンジニアが サーバーレスアーキテクチャに 手を出したよ 川崎Ruby会議01 清水 雄太 @pachirel
  2. 2. 自己紹介 • 清水 雄太 @pachirel • クックパッドでアプリケーションエンジニア (Rails, iOS少々) • 去年から、ソラコムでSIMを焼いています • Kawasaki.rb には1年前、川崎市への引越しを機に参加 愛犬のまろ♂
  3. 3. 自己紹介 清水 雄太 Yuta Shimizu @pachirel よく使う言語 Ruby, HTML & CSS & Javascript (Alt JS) ときどき書く言語 Swift Ruby歴 4年くらい Kawasaki.rb は約1年前に川崎市に引っ越したのを機に参加 最近のお仕事 直近の業務内容
  4. 4. エンジニアリング(物理)
  5. 5. 本題
  6. 6. 注意 • サーバーレスアーキテクチャに手を出した話をします • Ruby(Rails)の話はほとんどありません 🙇
  7. 7. なぜサーバーレスアーキテクチャの話? • Kawasaki.rb はいつもRuby以外の発表も多いから • 最近Rubyを書けていないから • サーバーサイド=RailsくらいRailsびいきだった自分にとって、技術の 選択肢が増えたから
  8. 8. 転職がきっかけ • RoRな会社から、AWSな会社(スタートアップ)へ転職 • エンジニアの人数が一桁減った 数十人 -> 数人 • 今までは専属チームがやってくれていたAWSのリソース管理・運用を、 自分たちでやる必要がある • 限られた人数と時間。ちょっとした便利サービスを作ろうと思った時 に、自分でEC2インスタンスを立てて設定したり、監視したりするのが 面倒 • なるべくマネージドサービスを使おう • 結果的に、サーバーレスな構成を採用することも。
  9. 9. サーバーレスアーキテクチャ • AWS Lambda (Function as a Service) のリリースを機に盛り上がってき た • 他社クラウドも提供 Azure Functions (preview), Google CloudFunctions (Alpha release), IBM OpenWhisk (preview) • OpenWhisk はオープンソースで公開されている • https://github.com/openwhisk/openwhisk • 自分でホスティングするというよりは、動作を把握したり、改善するためと認識してます。 • 自分でサーバーを管理しない=ベンダーが提供するサービスを利用 • 楽できるが、ベンダーロックインのリスクもある • マイクロサービス、Distributed Computing と関連
  10. 10. https://developer.ibm.com/openwhisk/
  11. 11. 実際に作った例 (シンプルなワークフロー管理 bot) • 問題 • 上司に決裁を取りたいが、外出が多くてなかなか捕まらない • そこで、スマホから確認して対応してもらえるSlackに書き込んで承認をもらっ ていたが、流れてしまうので後からまとめて見られず不便 • 決裁システムを入れるほどの規模でもないし、コストもかかる
  12. 12. 実際に作った例 (シンプルなワークフロー管理 bot) 申請者 承認者 管理者 Slack AWS Lambda Dynamo DBAPI Gateway Outgoing webhook 申請 承認 一覧の取得 !submit title !approve ID !list approved 2016-08 HTTP POST Invoke R/W
  13. 13. (補足) Slack の outgoing webhook • 特定の文字列パターンの入力をフックに、Slackから外部サーバーに POSTリクエストを送ることができる。 • JSONのレスポンスを返せば、返事ができ、簡単なBotが作れる。 Slack External Service Slack External Service Incoming webhook 例) github の通知とか Outgoing webhook
  14. 14. AWS API Gateway • AWS Lambda をHTTPで叩けるようにするための存在 • REST API を定義できて、それぞれのメソッドに対応するLambda Functionを登録することができる • リクエストのValidationや、Bodyの内容をLambdaの入力形式に合うよ うに変換したりすることができる。 • リクエスト回数、データ転送量に応じた課金
  15. 15. AWS Lambda • 「仮想サーバーを借りる 」EC2よりダイレクトに、 「関数を実行するリソース (CPU, メモリ) を借りる 」 ことができる • 課金は以下によって決まる • リクエスト回数 • コンピューティング時間(使用メモリ*実行時間) • 実行環境は Node.js, Python, Java
  16. 16. Node.js, Python, Java 😇
  17. 17. (余談)JRubyがあるじゃないか • AWS Lambda JavaでJRuby • http://qiita.com/c9katayama/items/653e10ce32aa3036418d • Gradle でビルドして、 zip ファイルに圧縮 • 他の方も頑張ってた • http://pprakash.me/tech/2015/11/29/executing-ruby-code-in-aws-lambda/ • 今回はここを掘り下げることはできませんでした(Rubyの勉強会なの に・・・🤕 この記事に気づいたの今朝だし...)
  18. 18. AWS Lambda を使う方法 • Webコンソールから • 最初はこれが分かりやすいと思います • 公式のCLI • サードパーティのライブラリを使う • Apex 等
  19. 19. AWS Dynamo DB • No SQLデータベース • ほとんど設定しないで使える、お手軽なデータストア • R/Wスループットとデータ容量で課金 • スループットを使い切るとエラーになるので注意
  20. 20. 感想 • 良かった点 • Slackからコマンドで操作できるので、他のアプリが不要 • Lambda は実行回数に応じた課金なので、安価 • 決裁の回数は月に数十回程度なので、ほぼ無料(Lambdaはアカウントあたり、毎月 1,000,000 回の呼び出し、400,000 GB-秒のコンピューティング時間が無料利用枠) • 改善点 • 「コマンドを打つ」のがエンジニアでない人にとっては慣れが必要 • ときどきコマンドに遅延が発生する(月に1度あるかないか、数分) • 原因不明:Lambdaの実行時間はログ上でも短いので、Lambdaの起動に時間がかかっ ている?SlackのOutgoing Webhook に遅延がある?
  21. 21. (余談) Slack Buttons • Slackのメッセージにたいして、インタラクティブに応答できる新機能 • Slack App を作成する必要がある • OAuth認証を実装しないといけない • Slack Appは基本的に公開されることを想定しているので、社内用にちょろっと使 う
  22. 22. 使いどころ • まずはシンプルな社内ツールがオススメ • リクエスト数が多くない -> サーバー立てるよりまず安い • APIが少ないので、後述のツールを使わなくてもなんとかなる • 常時コネクションを張るような用途には使えない • hubot とか
  23. 23. 学び • Ruby使えない JRuby なら使えるらしいのでチャレンジしたい • Boto3 に釣られて Python 選んだら、 対応バージョンが 2.7。 Python日本語 処理の闇を垣間見る • Java / Node.js のほうが良いかも • AWSのWEBコンソールを直接触るのは慣れるまでにしておいたほう がよい • 心をこめた手動デプロイや設定変更がつらい • とはいえ、最初から JSON で設定するには項目が多く、土地勘がないとつら い • サードパーティ製のCLIを使って楽したい (Serverless, Apex) • もう少し複雑なアプリケーションにチャレンジしてみたい • AWS以外のクラウドも触ってみたい
  24. 24. サードパーティ製のCLI http://serverless.com/
  25. 25. まとめ • サーバーを立てなくてもAPIサーバーが安価に作れる • Ruby にネイティブ対応したらいいな・・・ • ちょっとしたHackの選択肢の1つになれば幸いです
  26. 26. ご清聴ありがとうございました
  27. 27. References • http://qiita.com/zerobase/items/3bc0d15980b472af841d • http://martinfowler.com/articles/serverless.html

×