ブログ

ryuzeeによるブログ記事。不定期更新

直近開催のScrum Alliance認定スクラムマスター研修のご案内

AWSを使ってスライドを公開するデモアプリを作ってみた話

なんか色々思いついたのでデモアプリを作ってみました。実際に動作しているデモは https://slide.meguro.ryuzee.com/ にあります。

ソースは以下に置いてあります。あくまでサンプルの延長線上なのでValidationが緩かったり、あぶない実装があったりするかもしれませんのでその点はご了承ください。なお、動かすためには、最低でもAmazon S3Amazon SQSが必要です。サーバについては自身の端末でVagrantを使って動作させることもできます。

  • ソース:https://github.com/ryuzee/open-slideshare
  • 開発環境(VagrantやChefのクックブックなど一式):https://github.com/ryuzee/open-slideshare-environment

アーキテクチャー

AWSを使う前提になっていて、以下のようなアーキテクチャーになっています。

  • スライド(パワーポイントやPDF)は、サーバではなく、直接Amazon S3にアップしています。ここではSignature V4のAPIを使って、S3に直接アップロードするためのフォームを生成しています。
  • こうしている理由は、一旦ファイルのアップロードをサーバ側にしてしまうと、そのサーバに状態を持つことになり、Auto Scalingしにくかったり、そもそも同時に多数のアップロードがあった場合に、サーバ側の負荷が高くなりやすいという問題を回避するためです。
  • Amazon S3へのアップロードではAjaxを使っていますが、CORSの制約を外すために、Amazon S3のバケット側での設定が必要です。
  • Ajax経由でのアップロードが完了すると、Amazon S3はステータスコード201を返します。これを受けてjavascriptでゴニョゴニョします。Ajaxを使っていない場合は、success_action_redirectというパラメータを設定してあげることで、アップロード処理の完了後に自動的に指定したURLにリダイレクトすることができます。
  • アップロードが終わると、スライドの変換処理を行ないますが、ここでは、変換のリクエストを蓄積するのにAmazon SQSを使っています。つまり非同期でキューに変換リクエストを溜めておき、ワーカープロセスがそのキューを順番に処理していくというアーキテクチャになります。こうすることでワーカーのサーバだけをたくさん横に並べたりといったスケールアウトが簡単にできるようになります。
  • 実際の変換処理では、OpenOfficeやxpdf、unoconvなどオープンソースのコマンド類をキックしています。そしてスライドの各ページを1枚ずつの画像に変換し、Amazon S3の変換ファイル保存用のバケットにアップロードします。この際、変換した画像は何回でも作り直せるので、低冗長化オプションを使うことで、料金を減らすようにしています。また併せて一覧表示用のサムネイルも生成してアップロードしておきます。
  • アプリケーションのセッション情報は全てMySQLに保存します。

このようにすることで、Webサーバ側では、状態を全く持たないため、負荷に応じてWebサーバの台数を簡単に増やせます。また、そもそもスライド閲覧用のデータは全てAmazon S3側においてあるので、負荷をオフロードするとともに、データの耐久性が向上しています。またキューを使って変換プロセスを疎結合化することで、この部分のスケーラビリティも向上しています。

(お約束ですが、この投稿はぼくが所属する会社とは関係ありませんー)

アジャイル開発チーム向けのコーチングや、技術顧問、Scrum Alliance認定スクラムマスター研修などのトレーニングを提供しています。お気軽にご相談ください(初回相談無料)
前の記事 パワーポイントやPDFをコマンドラインで画像に変換する方法
次の記事 Middlemanで使うと便利なプラグインの一覧

プロダクト開発で、こんな課題を感じていませんか?

  • 何を作るべきか、順位の決め方が定まらない
  • プロダクトの方向性をチームで共有できていない
  • 開発組織の体制や役割がうまく機能していない
  • 開発プロセスが形骸化し、目的を見失っている
  • アジャイルを導入したが、組織に定着しない

プロダクトマネジメント、組織構造、開発プロセスの課題について、組織全体の視点から支援します。

お問い合わせ(初回相談無料)

契約を前提にした相談でなくて構いません。相談に際して事前の整理や準備は不要です。

Aligned ―プロダクト開発におけるステークホルダーとの関係性の築き方
ダイナミックリチーミング 第2版
Tidy First?
脳に収まるコードの書き方
プロダクトマネージャーのしごと 第2版
エンジニアリングマネージャーのしごと
チームトポロジー
スクラム実践者が知るべき97のこと
プロダクトマネジメント
SCRUM BOOT CAMP THE BOOK
みんなでアジャイル
レガシーコードからの脱却
Effective DevOps
変革の軌跡
ジョイ・インク
アジャイルコーチの道具箱
カンバン仕事術
Software in 30 Days
How to Change the World