EATASのシステム構成

はじめに

GLUGの小林です。 飲食関連メディアのEATASのシステム構成についてご紹介します。 見ての通りAWS上です。比較的オーソドックスなので面白味はないかもしれないです。

構成図

f:id:n06utk:20190305191530p:plain
EATAS構成図

各サービスの説明

細かいところはまた別の記事を書いていきますが、ざっくりと全体的なところを記述します。 LambdaはGoで書いています。特に(深い)理由はありません。

CloudFront

動画のアップロード以外は基本的にCloudFrontで受けています。 画像やjs、cssなどのアセットはキャッシュていますが、会員限定の記事とかを考えると(でもそういう記事は今はないという)キャッシュしづらいのでキャッシュしていません。 今の構成で動的コンテンツでも100request/secは余裕でさばけそうなので、重くなってきたら考えます。

S3+Lambda+MediaConvert

動画アップロードを署名付きURLでS3バケットにアップロード、putObjectのイベントでLambda Functionを起動してMediaConvertでHLS形式に変換しています。 プライベートな動画コンテンツがないためyoutube埋め込みで用が足りてしまい、使われていません...

S3+Athena

CloudFrontのアクセスログをS3に保存してAthenaで解析しています。 パーティションとかはこれでやっています。

EC2

今の所トラフィックがあまりないので特にオートスケールはしてないですが、落ちたときに復活させたいのでオートスケーリンググループで起動しています。 t2.nano*2とかだったりします...

ECS、Fargate

Webアクセスはnginx+php-fpmなタスク定義のサービスで受けています。 オーソドックスにLaravelです。 メール送信などのキュージョブについてはキュージョブ用のタスク定義で起動しています。 こちらもLaravelです。 ジョブについては、元がLaravelなので、Fargateでartisan起動しています。ちょっと前はCloudWatchEventからFargateのタスクを起動しようとするとVPC設定ができないため、Lambda挟んでいましたが、今は直接起動しています。Lambdaにしたい。

RDS

MySQLです。特に珍しくもなんともないです。 memcachedを有効にしてセッション管理に使っています。カテゴリとかのサーバ間で共有する必要のないデータはAPCuに保存しています。 db.t2.microだったりします...

Elasticsearch Service

最初はMySQL全文検索していましたが、検索結果が納得行かないとの意見がありElaticsearch Serviceに変更。

Backlogからの一連の部分

GitHubにしたいところですが、諸事情によりBacklogを使っているため、gitもBacklogなので、API GatewayとLambdaでS3にファイルをおいてCodePipelineを起動しています。 SNSからメールで送信しています。(ここは手抜き) 終了したらCloudWatchEvent経由でSlackへ通知するLambda Functionを起動。 この辺の詳細は別記事にて。