最近話題の某かぐや姫のアニメ映画にドはまりしてます。
劇中で努力する姿に感化されて、個人開発を推し進めているんですが、インフラ構成がだいたい固まってきたので、いったん書き出してみます。
ざっくりまとめ
- Cloudflare + Lambda + ECR + CockroachDB + R2で、低コスト運用
- devcontainerベースのコンテナを、ほぼそのままLambdaへデプロイできる
こんな人向け
- Webアプリに興味がある人
- 個人開発がローカル環境止まりで、クラウドに上げてみたい人
- 個人開発アプリを低コストで運用したい人
採用したインフラ構成
| 役割 | サービス | 補足 |
|---|---|---|
| DNS | Cloudflare | WAFを兼ねる |
| 認証 | Amazon Cognito | |
| コンピューティング | AWS Lambda | コンテナイメージランタイム |
| コンテナイメージレジストリ | Amazon ECR | |
| DB | CockroachDB | |
| ストレージ | Cloudflare R2 |
こだわりポイント
1. ほぼ無料
個人開発にじゃぶじゃぶ使えるほどお金がないのよ…貧乏なのよ…
(。´・ω・)ん?
| サービス | 無料枠 |
|---|---|
| Cloudflare | 無料 |
| Cognito | 10,000 MAU(月間アクティブユーザー) |
| Lambda |
100万リクエスト 1か月あたり40万GB-秒のコンピューティング時間 |
| ECR | プライベートリポジトリに無料枠なし(GB/月あたりUSD 0.10) |
| CockroachDB |
50 million Request Units 10 GiB storage |
| R2 |
ストレージ 10GB 操作(Class A) 100万回 操作(Class B) 1,000万回 |
なんなのよ…ほとんど無料じゃないのよ…
ということで、ほぼ無料です。ヤッタネ
2. devcontainerをほぼそのまま本番へ持っていける
Web開発以外は詳しくないですが、devcontainer開発環境はとても強力です。
開発環境をコンテナ化することで、各個人の設定に依存せず簡単に開発環境を構築できます。
このコンテナをほぼそのままLambdaにデプロイできます。
Dockerfileに1行追加し、Dockerfile内とLambdaの環境変数を少し設定するだけで、ローカルで動いていたWebコンテナがLambdaでも動きます。
(実際はプロダクション用にビルドし直したり、少し手直しします)
詳細はこちらにあります。
- Lambdaに乗せるために専用の記法を学習する必要がない
- ローカル開発環境とほぼ同じコンテナ環境で動かせるので、「本番だけ動かない」みたいな沼にはまりづらい
この2点だけでも、開発に集中しやすくなるかなと思います。ウレシイ
注意点
Lambda+コンテナイメージを使う以上、コールドスタート時のレイテンシは体感できるレベルで発生します。
(先日社内のハッカソンで試したときは、2〜3秒ほどかかっていました)
一般的なSaaSとしては体験が悪くなりやすいですが、自分用ならまあ問題ないですね。
おわりに
本当はCloudFront、S3、RDSでAWSに固めて、業務に役立つ知識を得たいところなんですが、まずは「クラウドに乗せる」を目標に構成を考えてみました。
とはいえ、オブジェクトストレージとリレーショナルDBは仕事でも活躍しやすいのでLambda以外は割と無難な構成だと思っています。
数年前の自分も、どうクラウドに乗せればいいのか、お金がどのくらいかかるのかで相当足踏みしていたので、誰かの参考になればうれしいです。
また、もっと良いサービスがあるとか、おすすめの組み合わせがあるとかがあれば教えてください!
余談
DynamoDBも無料枠があるし、NoSQL面白そうだなーと思って、ドキュメントを読んでいた時期がありました。
リレーショナルDBとは全く違う思想で、あとから直せない要素(ソートキー・LSI)もあったりで、設計に相当時間がかかりそうだったので諦めました…ヨヨヨ…