Adventar のインフラ概要

Adventarを支える技術 Advent Calendar 2019 の16日目です。

今年の Adventar のインフラはほとんど AWS を使って構築しています。AWS 以外だと、 Firebase Authentication や Bugsnag などのサービスも使っていますが、今回は AWS の構成について説明します。

インフラの構成は基本的に terraform で管理していて、コードは以下にあります。API Gateway や Lambda の管理には Serverless Framework、ECS の管理には ecs-cli を使っていたりするので、それらは terraform 外での管理になっています。

https://github.com/adventar/adventar/tree/619f222b9348e1cbfcfe50cc731fb8184e84ab2d/terraform

構成図は以下のような感じです。

f:id:hokaccha:20191216214615p:plain

それぞれ説明していきます。

www.adventar.org

これは最も簡単なシステムで、www.adventar.org というドメインの旧 URL を www なしの adventar.org にリダイレクトするためだけの存在です。S3 には、空の bucket を使ってホスト名のリダイレクトができるという機能があるのでこれを使っています。

https://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html

S3 の設定は簡単で、これだけです。

https://github.com/adventar/adventar/blob/619f222b9348e1cbfcfe50cc731fb8184e84ab2d/terraform/s3.tf#L42-L54

http だけであればこの bucketエイリアスレコードを設定すれば終わりですが、httpsも対応したいので、CloudFront に ACM の証明書を刺して https も受けられるようにしています。

img.adventar.org

画像のリサイズサーバーです。詳細は以下に書きました。

上記の記事でも書いたとおり、DB や API サーバーに依存しないので、構成をシンプルに保つことができます。

adventar.org

ユーザーフェイシングな HTML や静的ファイルのリクエストを受けます。詳細は以下に書きました。

図にもあるように、SSR をしている Lambda が API サーバーへリクエストしています。このリクエストは本来は VPC 内部で Lambda を起動して内部通信するのがいいのですが、めんどくさいのでインターネット経由になっています。

api.adventar.org

API サーバーです。VPC の中に配置した ALB がリクエストを受けて、その後ろにいる ECS がいて、ECS では Fargate でタスクがいて、Envoy と Go による gRPC のサーバーが動いています。DB は同じ VPC に配置されている RDS です。gRPC や Envoy の話は以下に書きました。

バッチジョブ

VPC の中にいる CloudWatch Events と Lambda は、定期実行されるバッチジョブです。詳細は以下に書きました。

まとめ

Adventar の AWS の構成についての概要を書きました。明日はインフラのコストについて書こうと思います。