はじめに
スタートアップや自社開発企業でインフラ環境を0から構築する際、よくある構成を列挙してみました。
※この記事は個人の見解に基づいています。もし偏見があるように感じられたら、申し訳ございません。
※クラウドは、AWS前提とさせてください。
全体構成図
環境構成
dev, prod用のAWSアカウントが必要なので、二つあるといいかなと思いました。
理想は、金銭的に余裕があればですが、stg用のアカウントも欲しいです。
IaC
Terraformが使いやすく、いいかなと思いました。
手動で実行した方が早いので、スキルさえあればそんなにヒューマンエラーが発生するものでもないです。
そのため、最初のうちは無理してGitHub Actionsなど使って自動化する必要はないかなと思ってます。
コンテナリポジトリ
ECRがいいかなと思いました。
タグはlatestで管理せずに、GitHub ActionsのHash値と紐づけることで、障害対策やロールバックがしやすくなります。
フロントエンドサーバー
静的サイトやSEOを検討しない構成であればS3+CloudFront、SSRやSEOを考慮する場合は、Fargateがいいかなと思いました。
他のサードパーティツールも良いですが、高額な場合もありますし、AWS内で完結する方が作業しやすいです。
GitHub Actionsから自動でCI/CDを行うのが良いと思います。
バックエンドサーバー
ECS Fargateがいいかなと思いました。
GitHub Actionsから自動でCI/CDを行うのが良いと思います。
デプロイ手法は基本Blue/Greenを用いて、バッチ系などの用途はローリングアップデートがいいかなと思いました。
認証サーバー
Amazon Cognitoでいいかなと思いました。
Auth0などの方が色々できてメリットが大きいという話を聞いたことがありますが、結構高いです。
Git
GitHubがいいかなと思いました。
AWSにCode4兄弟のサービスなどありますが、フロント・バックエンドエンジニアは、基本GitHubを使っているためです。
CI/CD
GitHub Actionsがいいかなと思いました。
AWSにCode4系のサービスなどありますが、フロント・バックエンドエンジニアは、基本GitHubを使っているためです。
データベース
Auroraがいいかなと思いました。
RDSと比べて、性能や耐久性が良いためです。
Aurora Serverlessを利用すると、自動スケーリングしてくれます。
ライターエンドポイント、リーダーエンドポイントは使い分けて、開発する方が将来的にスケーリングなどに役立ちますが、
最初のうちは、アプリ開発のスピードを高めるために、ライターエンドポイントのみでのいいかなと思いました。
NoSQL
DynamoDBのオンデマンドモードでいいかなと思いました。
インフラ的な運用保守がほぼ発生せず、開発しやすいです。
データレイク基盤
S3でいいかなと思いました。
Athenaを用いて、SQLを実行します。
DBからデータをS3へ転送する仕組みをつくればよさそうです。
DWH基盤
特に希望がなければ、S3(Athenaを利用)、データサイエンティストの好みで、Redshift/Bigquery/Snowflakeがいいかなと思いました。
データ分析の環境は、特に正解・不正解がないので、どのサービスを選んでも正解だと思ってます。
そのため、データサイエンティストの好みで良いです。
ETLツール
バッチ処理はGlueやAthane、ストリーミング処理はLambdaやKinesisを使うのがいいかなと思いました。
BIツール
データサイエンティストの好みで決めればいいかなと思います。
AWSならQuickSight、サードパーティであれば、TablauやLookerなど。
データ分析の環境は、特に正解・不正解がないので、どのサービスを選んでも正解だと思ってます。
そのため、データサイエンティストの好みで良いです。
生成AI
BedrockやSageMakerを利用するのがいいかなと思いました。
金額がめちゃくちゃ高いので、リザーブドインスタンスやAWSの営業さんとの相談は必須かと思います。