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 -

Ken’ichiro Oyama

July 21, 2017
Tweet

More Decks by Ken’ichiro Oyama

Other Decks in Technology

Transcript

  1. 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
  2. Serverless Framework   サーバレスアーキテクチャでアプリケーションを構築する ためのフレームワーク   FaaS (Function as a

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

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

    Managed Servicesというサービスのことではない   AWSマネージドなサービスのみで(AWSフルマネージド で)ツールを作ると運⽤管理の負荷が劇的に下がる   「サーバ(というよりもサーバ運⽤管理)」の部分が「レス」になる 8 Geeks Who Drink
  5. Serverless Frameworkチョットデキル   Serverless FrameworkでAWSフルマネージドなツール をいくつか作ってきた   プロダクションベースの事例はよく聞くが、OSSなツールはまだ (⽇本では)少ないはず  

    https://github.com/toricls/pingbot など   Serverless Frameworkベースというと結構作った⽅では?   まだ作りたいものはあるのでボチボチ作っていく   普段のWebアプリケーションと実装の考え⽅が違うので 知恵熱がでる 23 Geeks Who Drink
  6. POST with config   backslack, faultline   設定値をツール側で保存するだけで管理対象が増えてし まうので、できるだけ値を保持しないのが鉄則  

    APIベースのツールなのであれば、リクエストに必要な 設定を毎回付与してしまえばいいというアイデア   SlackのWebhook URL, チャンネル名など   秘匿が必要な設置値でさえもKMSを利⽤して暗号化して リクエストに付与する 27 Geeks Who Drink
  7. Reversed Timestamp ID (1/2)   faultline   実は⼀覧を作るのは難しい   RDSはサーバレスアーキテクチャではアンチパターン

      DynamoDBで「テーブルの全てのデータの⼀覧」を作るのはア ンチパターン   今のところS3を使うのを解にしている   Prefixの使い⽅が設計のカギ   /projects/{project}/errors/{message}/occurrences/ {reversedUnixtime}.json 30 Geeks Who Drink
  8. 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
  9. Instant Job Queue (1/2)   utsusemi   AWS Lambdaのfunctionをinvokeしてページをクロー ルして、そのリンク先をまた同じfunctionをinvokeして

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

      キューにたまっているメッセージが0になったらWorkerは⾃分⾃ ⾝を終了(最終的にWorkerは0)   クロールのような常にキューに値がはいるパターンに使える   同時に動かすWorker数や、Workerが処理するメッセー ジの数などが調整できる   FIFOキューにしたら実⾏順番も保証される(かも) 34 Geeks Who Drink
  11. S3 Object Tagging (1/2)   utsusemi   クロールして取得したHTMLファイルはS3バケットに保 存  

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

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

      サーバレスアーキテクチャで作ったツールはシンプルなSaaSのような感じ (faultline)   Serverless Frameworkはサーバレスアーキテクチャ専⽤ツールと して優秀なので是⾮   ⽇本語フォーラムもはじまっている! https://github.com/serverless-japan/forum 39 Geeks Who Drink