31
Rails エエエエエエ エエエエエエエエエエエエエエ エエエエエエ エエ Ruby エエ 01 エエ エエ @pachirel

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

Embed Size (px)

Citation preview

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

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

清水 雄太 @pachirel

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

自己紹介• 清水 雄太 @pachirel

• クックパッドでアプリケーションエンジニア( Rails, iOS 少々 )• 去年から、ソラコムで SIM を焼いています• Kawasaki.rb には 1 年前、川崎市への引越しを機に参加

愛犬のまろ♂

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

自己紹介

清水 雄太 Yuta Shimizu @pachirel

よく使う言語 Ruby, HTML & CSS & Javascript (Alt JS)ときどき書く言語 Swift

Ruby 歴 4 年くらい

Kawasaki.rb は約 1 年前に川崎市に引っ越したのを機に参加

直近の業務内容

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

エンジニアリング(物理)

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

本題

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

注意• サーバーレスアーキテクチャに手を出した話をします• Ruby(Rails) の話はほとんどありません

🙇

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

なぜサーバーレスアーキテクチャの話?• Kawasaki.rb はいつも Ruby 以外の発表も多いから• 最近 Ruby を書けていないから• サーバーサイド= Rails くらい Rails びいきだった自分にとって、技術の選択肢が増えたから

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

転職がきっかけ• RoR な会社から、 AWS な会社(スタートアップ)へ転職• エンジニアの人数が一桁減った 数十人 -> 数人• 今までは専属チームがやってくれていた AWS のリソース管理・運用を、自分たちでやる必要がある• 限られた人数と時間。ちょっとした便利サービスを作ろうと思った時に、自分で EC2 インスタンスを立てて設定したり、監視したりするのが面倒• なるべくマネージドサービスを使おう• 結果的に、サーバーレスな構成を採用することも。

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

サーバーレスアーキテクチャ• AWS Lambda (Function as a Service) のリリースを機に盛り上がってきた• 他社クラウドも提供 Azure Functions (preview), Google CloudFunctions

(Alpha release), IBM OpenWhisk (preview)• OpenWhisk はオープンソースで公開されている

• https://github.com/openwhisk/openwhisk• 自分でホスティングするというよりは、動作を把握したり、改善するためと認識してます。

• 自分でサーバーを管理しない=ベンダーが提供するサービスを利用• 楽できるが、ベンダーロックインのリスクもある

• マイクロサービス、 Distributed Computing と関連

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

https://developer.ibm.com/openwhisk/

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

実際に作った例 ( シンプルなワークフロー管理 bot)

• 問題• 上司に決裁を取りたいが、外出が多くてなかなか捕まらない• そこで、スマホから確認して対応してもらえる Slack に書き込んで承認をもらっていたが、流れてしまうので後からまとめて見られず不便• 決裁システムを入れるほどの規模でもないし、コストもかかる

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

実際に作った例 ( シンプルなワークフロー管理 bot)

申請者

承認者

管理者

SlackAWS Lambda Dynamo DBAPI Gateway

Outgoing webhook

申請

承認

一覧の取得

!submit title

!approve ID

!list approved 2016-08

HTTPPOST

Invoke R/W

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

( 補足 ) Slack の outgoing webhook• 特定の文字列パターンの入力をフックに、 Slack から外部サーバーに

POST リクエストを送ることができる。• JSON のレスポンスを返せば、返事ができ、簡単な Bot が作れる。

Slack ExternalService Slack External

Service

Incoming webhook例 ) github の通知とか Outgoing webhook

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

AWS API Gateway• AWS Lambda を HTTP で叩けるようにするための存在• REST API を定義できて、それぞれのメソッドに対応する Lambda

Function を登録することができる• リクエストの Validation や、 Body の内容を Lambda の入力形式に合うように変換したりすることができる。• リクエスト回数、データ転送量に応じた課金

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

AWS Lambda•「仮想サーバーを借りる 」 EC2 よりダイレクトに、「関数を実行するリソース (CPU, メモリ ) を借りる 」ことができる•課金は以下によって決まる• リクエスト回数• コンピューティング時間(使用メモリ*実行時間)

• 実行環境は Node.js, Python, Java

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

Node.js, Python, Java

😇

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

(余談) 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 の勉強会なのに・・・ 🤕この記事に気づいたの今朝だし ... )

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

AWS Lambda を使う方法• Web コンソールから• 最初はこれが分かりやすいと思います

• 公式の CLI• サードパーティのライブラリを使う• Apex 等

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

AWS Dynamo DB• No SQLデータベース• ほとんど設定しないで使える、お手軽なデータストア• R/W スループットとデータ容量で課金• スループットを使い切るとエラーになるので注意

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

感想•良かった点• Slack からコマンドで操作できるので、他のアプリが不要• Lambda は実行回数に応じた課金なので、安価

• 決裁の回数は月に数十回程度なので、ほぼ無料( Lambda はアカウントあたり、毎月 1,000,000 回の呼び出し、 400,000 GB-秒のコンピューティング時間が無料利用枠)• 改善点• 「コマンドを打つ」のがエンジニアでない人にとっては慣れが必要• ときどきコマンドに遅延が発生する(月に 1度あるかないか、数分)

• 原因不明: Lambda の実行時間はログ上でも短いので、 Lambda の起動に時間がかかっている? Slack の Outgoing Webhook に遅延がある?

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

(余談 ) Slack Buttons• Slack のメッセージにたいして、インタラクティブに応答できる新機能• Slack App を作成する必要がある• OAuth 認証を実装しないといけない• Slack App は基本的に公開されることを想定しているので、社内用にちょろっと使う

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

使いどころ• まずはシンプルな社内ツールがオススメ• リクエスト数が多くない -> サーバー立てるよりまず安い• API が少ないので、後述のツールを使わなくてもなんとかなる

•常時コネクションを張るような用途には使えない• hubot とか

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

学び• Ruby 使えない   JRuby なら使えるらしいのでチャレンジしたい

• Boto3 に釣られて Python 選んだら、 対応バージョンが 2.7 。 Python日本語処理の闇を垣間見る• Java / Node.js のほうが良いかも

• AWS の WEB コンソールを直接触るのは慣れるまでにしておいたほうがよい• 心をこめた手動デプロイや設定変更がつらい• とはいえ、最初から JSON で設定するには項目が多く、土地勘がないとつらい• サードパーティ製の CLI を使って楽したい (Serverless, Apex)

• もう少し複雑なアプリケーションにチャレンジしてみたい• AWS 以外のクラウドも触ってみたい

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

サードパーティ製の CLI

http://serverless.com/

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

まとめ• サーバーを立てなくても API サーバーが安価に作れる• Ruby にネイティブ対応したらいいな・・・

• ちょっとした Hack の選択肢の 1 つになれば幸いです

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

ご清聴ありがとうございました

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

References

• http://qiita.com/zerobase/items/3bc0d15980b472af841d• http://martinfowler.com/articles/serverless.html