Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Serverless FrameworkでAWSフルマネージドなツールをいくつか作って得たアーキテクチャ設計の知見 / Serverless at Geeks Who Drink

Serverless FrameworkでAWSフルマネージドなツールをいくつか作って得たアーキテクチャ設計の知見 / Serverless at Geeks Who Drink

Geeks Who Drink - Webの先進技術3連発Edition -

69b93af68320a590f607c296e8edff73?s=128

Ken’ichiro Oyama

July 21, 2017
Tweet

Transcript

  1. Serverless Frameworkで AWSフルマネージドなツールをいくつか作って得た アーキテクチャ設計の知⾒ Kenʼichiro Oyama Fusic Co.,Ltd. 2017.7.21 1

    Geeks Who Drink
  2. Who 2 Geeks Who Drink

  3. k1LoW   Kenʼichiro Oyama   @k1LoW   Fusic Co.,Ltd. エンジニア

      基盤ユニット テックリード   GitHub organizations   fukuokarb / faultline / emacs-jp / etc.   awspecというAWS⽤のテストツールを作っています   https://github.com/k1LoW/awspec 3 Geeks Who Drink
  4. スミマセン。 AWSを知っている前提でお話します。 4 Geeks Who Drink

  5. 5 Geeks Who Drink

  6. Serverless Framework   サーバレスアーキテクチャでアプリケーションを構築する ためのフレームワーク   FaaS (Function as a

    Service。AWSだとAWS Lambda) を中⼼においた開発をサポートするツール   AWSだけでなく他のクラウドベンダが提供しているFaaS にも対応 (Azure Functionsなど)   Node製   だからといってランタイムがNodeに限定されているわけではない   Serverless,Inc.が主導して開発しているオープンソース 6 Geeks Who Drink
  7. Serverless Frameworkとは結局何か   デプロイツール(+オーケストレーションツール)   プログラマブルCFn   いろいろ便利な機能があるし、名前からも「フルスタッ クな何か」に⾒えなくもないが、意外に薄い  

    途中で利⽤をやめることも可能   デプロイツールなので   全く難しくないです   個⼈的にはフロントエンドエンジニアに武器にして欲しい 7 Geeks Who Drink
  8. AWSマネージド   AWSには⾃分で運⽤管理しないといけないサービスと AWSが運⽤管理をある程度肩代わりしてくれるサービス がある   本セッションでは、AWSが運⽤管理をしてくれるサービ スの特徴を「AWSマネージド」と呼ぶ   AWS

    Managed Servicesというサービスのことではない   AWSマネージドなサービスのみで(AWSフルマネージド で)ツールを作ると運⽤管理の負荷が劇的に下がる   「サーバ(というよりもサーバ運⽤管理)」の部分が「レス」になる 8 Geeks Who Drink
  9. 実際にServerless Frameworkでどのような ツールが作れるのか 9 Geeks Who Drink

  10. backslack 10 Geeks Who Drink

  11. backslack   Backlogの操作をSlackに通知するツール   https://github.com/k1LoW/backslack 11 Geeks Who Drink

  12. backslack アーキテクチャ 12 Geeks Who Drink

  13. faultline 13 Geeks Who Drink

  14. faultline   エラートラッキングツール   同様のSaaSだとAirbrake, Bugsnag, Rollbarなど   https://github.com/faultline/faultline 14

    Geeks Who Drink
  15. faultline アーキテクチャ 15 Geeks Who Drink

  16. utsusemi 16 Geeks Who Drink

  17. utsusemi   APIで“動的な更新”が可能な“静的サイト”⽣成ツール   https://github.com/k1LoW/utsusemi 17 Geeks Who Drink

  18. utsusemi アーキテクチャ 18 Geeks Who Drink

  19. hubedit 19 Geeks Who Drink

  20. hubedit   https://hubedit.com   GitHubのプライベートリポジトリをメモツールにするサ ービス   GitHubを使っているので正確にはAWSフルマネージドではない 20 Geeks

    Who Drink
  21. hubedit アーキテクチャ 21 Geeks Who Drink

  22. 他にもちょこちょこ作っています 22 Geeks Who Drink

  23. Serverless Frameworkチョットデキル   Serverless FrameworkでAWSフルマネージドなツール をいくつか作ってきた   プロダクションベースの事例はよく聞くが、OSSなツールはまだ (⽇本では)少ないはず  

    https://github.com/toricls/pingbot など   Serverless Frameworkベースというと結構作った⽅では?   まだ作りたいものはあるのでボチボチ作っていく   普段のWebアプリケーションと実装の考え⽅が違うので 知恵熱がでる 23 Geeks Who Drink
  24. AWSマネージドなサーバレスアーキテクチャ で使えるかもしれない知⾒ 24 Geeks Who Drink

  25. 前提   「サーバレスデザインパターン」みたいな仰々しい ものではなくて、あくまで実装時に得たTips的なも の   ただ、いろいろ試⾏錯誤をして頭をひねって思いつ いたものばかりです   本当にスミマセン。AWSを知っている前提でお

    話します。 25 Geeks Who Drink
  26. 設定値をリクエストに付与する ”POST with config” 26 Geeks Who Drink

  27. POST with config   backslack, faultline   設定値をツール側で保存するだけで管理対象が増えてし まうので、できるだけ値を保持しないのが鉄則  

    APIベースのツールなのであれば、リクエストに必要な 設定を毎回付与してしまえばいいというアイデア   SlackのWebhook URL, チャンネル名など   秘匿が必要な設置値でさえもKMSを利⽤して暗号化して リクエストに付与する 27 Geeks Who Drink
  28. backslack アーキテクチャ(再掲) 28 Geeks Who Drink

  29. 新しい順の⼀覧を実現する “Reversed Timestamp ID” 29 Geeks Who Drink

  30. Reversed Timestamp ID (1/2)   faultline   実は⼀覧を作るのは難しい   RDSはサーバレスアーキテクチャではアンチパターン

      DynamoDBで「テーブルの全てのデータの⼀覧」を作るのはア ンチパターン   今のところS3を使うのを解にしている   Prefixの使い⽅が設計のカギ   /projects/{project}/errors/{message}/occurrences/ {reversedUnixtime}.json 30 Geeks Who Drink
  31. Reversed Timestamp ID (2/2)   S3のオブジェクトはアルファベット順でソートされ ている。`ORDER BY created DESC`

    を実現する にはどうすればいいか   UNIX Timestampを逆カウントにして、ゼロパディ ングすることで実現   (Math.pow(2, 53) - 1) – unixtime   Number.MAX_SAFE_INTEGER - unixtime   IDから⽣成時刻もわかって便利(snowflakeみたい) 31 Geeks Who Drink
  32. 無限にファンアウトしかねない AWS Lambdaをいい感じに制限実⾏する ”Instant Job Queue” 32 Geeks Who Drink

  33. Instant Job Queue (1/2)   utsusemi   AWS Lambdaのfunctionをinvokeしてページをクロー ルして、そのリンク先をまた同じfunctionをinvokeして

    クロールして...   DoSになりかねないファンアウト   Queueを作ってWorkerプロセスを常時起動して待ち受 ける形だとWorkerプロセスの管理が増える   AWS Step FunctionsがAWSの解だけど費⽤が増える 33 Geeks Who Drink
  34. Instant Job Queue (2/2)   Queue (SQS)を作ってクロール開始時にWorkerを起動 して、Workerは指定回数デキューしてクロールしたら値 をエンキューして同じWorkerをinvokeして⾃分⾃⾝を 終了

      キューにたまっているメッセージが0になったらWorkerは⾃分⾃ ⾝を終了(最終的にWorkerは0)   クロールのような常にキューに値がはいるパターンに使える   同時に動かすWorker数や、Workerが処理するメッセー ジの数などが調整できる   FIFOキューにしたら実⾏順番も保証される(かも) 34 Geeks Who Drink
  35. utsusemi アーキテクチャ(再掲) 35 Geeks Who Drink

  36. 意外に使われない機能を使って メタ情報を保存する ”S3 Object Tagging” 36 Geeks Who Drink

  37. S3 Object Tagging (1/2)   utsusemi   クロールして取得したHTMLファイルはS3バケットに保 存  

    じゃあそのファイルの更新⽇時は?Content-Typeは? ETagは?   ファイルシステムならあとでギリ取得できそうなファイルタイプす らS3では難しい   ヘッダ情報などの活⽤できそうな値は保持しなくていいのか   他に保存する場所を作ってしまったら管理対象が増える。。。 37 Geeks Who Drink
  38. S3 Object Tagging (1/2)   S3 Object Taggingを使う   オブジェクトごとにKey-Valueの値を保持できる

      “S3 Object Tagging” はS3の機能の名前   ユーザ情報(オブジェクト)とその住所情報(タ グ)とか、Issue(オブジェクト)とラベル(タグ) など、⽤途は広い気がする 38 Geeks Who Drink
  39. まとめ   結局、サーバレスアーキテクチャでうまく設計するためには「各サ ービスの機能を知っておいたほうがいい」ということ   サーバレスアーキテクチャは、雑に⾔えば「マネージドなサービスをフル 活⽤して管理レスにしようぜ」アーキテクチャ   制約を受け⼊れてうまくステートレスな設計ができれば「スケー ル」「管理レス」という点でかなりインパクト⼤

      サーバレスアーキテクチャで作ったツールはシンプルなSaaSのような感じ (faultline)   Serverless Frameworkはサーバレスアーキテクチャ専⽤ツールと して優秀なので是⾮   ⽇本語フォーラムもはじまっている! https://github.com/serverless-japan/forum 39 Geeks Who Drink
  40. 40 Fusicはテクノロジーが 好きなエンジニアを募集しています > https://fusic.github.io Thank you!