スモールスタートのWEBシステム構成案
PoCなどでスモールスタートのWEBシステムを構築する際に、コストやセキュリティなども考慮してベターと思われる構成案をメモしておきます。
あくまでの2023/11時点の個人の見解です。また、あくまでも一案なので参考程度に見ていただければと思いますし、今後変わっていくと考えています。
想定しているWEBシステム
利用者にはクラウド上で利用してもらう(ブラウザで使う)
UIはある程度動的な変化が必要(クリックすると画面遷移無しで変化)
ある程度のデータ量があり検索パターンが複数ある(全文検索なども)
以上の想定をベースとし以下を記載します。なお、「画像を保存する場所が必要だな」となればS3を使うように組み替えたりとなるイメージです。
全体図
ひとまずAWSをベースとするものです。TargetGroupなどある程度省略して記載しています。この内容がシンプルに見えるかは理解度次第かと思います。
説明
アプリケーション
アプリケーションフレームワークとして「Remix」を選択しています。
理由としては、以下のようなイメージです。
動的なUIが必要とのこと
HTMLに加えてJavaScriptが必要
Node(Rails他) + React(Vue他)でもいいが、両方ともJavaScript(TypeScript)で書けるまとまったフレームワークだと楽
Remixにしとくか
フレームワークの特色があるので理解は必要かと思います。
なお、内容にもよりますが「t3.nano」インスタンスでも十分動作します。
データベース
検索が必要であれば「Elasticsearch」にしておけば、困ることはぼぼ無いのではないでしょうか。
最近テーブル設計もインデックス設計も出来ていない状態のものにぶち当たることもあったので、そういうノウハウが少ないところにもElasticsearchは適したソリューションだと思います。クエリ操作の間違いも影響範囲が限定されるかもです。
(せっかくAWSベースなら)AWS Opensearchも悪くはないかと思いますが、気にかる方は色々見てみるといいかと思います。
Elastic CloudでElasticsearchを構成しているのは、なんといってもUpgradeが楽にできることです。Elasticsearchはそれなりの頻度でバージョンアップが進んでいますが、それに追随していくのもElastic Cloudならば楽です。
とは言っても検証してからUpgradeするのでなかなか追いつきませんが・・
コストも最低限のElasticsearch, Kibanaで$18/月前後だったかと思います。
なお、AWSとElastic CloudはVPCにPrivateLink接続をしておくと、セキュリティが向上します(コストもかかりますが、できればしておいた方がいい)
ドメイン、DNS、ロードバランサー、WAF
この辺り、AWSでまとめてしまえば楽です。
ドメイン購入、DNS設定までシンプルですし、ロードバランサーに指定するSSL証明書もCertificate Managerで無料で作成出来ます。
また、WAFはコストがかかりますが設定しておくべきです。
不正アクセスをルールで防いだり、アプリケーション的に不正と考えられるようなアクセスをIPアドレス指定で防いだり出来ます。より良い検証結果の分析のためにも入れておく方がいいと思います。
デプロイフロー
以下の流れを開発者の「git push」だけで実行出来ます。
GitHubへPushされる
GitHubへPushされたことをトリガーにCodePipelineが開始される
CodeBuildでDockerコンテナが作製されECRへPushされる、またデプロイ用のアセットがS3に格納される
CodeDeployでEC2にDockerコンテナがPullされ起動される
CodeDeployの中でTargetGroupへの削除・追加が行われる
これらのフローにより、開発者の変更がWEBアプリケーションへ反映されます。ちなみに、開発環境でも各リソース(Elasticsearchなど)はDockerコンテナを使ったりするのでDockerコンテナ(Docker Compose)を使うことに慣れておく方がいいかと考えています。
AWSの構成管理
TerraformでIaCとして管理しておくことで、EC2のインスタンスの増減含めて構成管理が容易になります。
また、AWSのリージョンも「us-east-*」でレスポンス速度が問題なければ日本のリージョンよりも低コストで運用出来ます。
ちなみに、基本的にスモールスタートの状態ではリスクは低いですが、構成によっては(多重化しないなど)更新の際にダウンタイムが発生することは認識しておいた方がいいです。
この記事が気に入ったらサポートをしてみませんか?