個人開発者(インディーハッカー)にとって、プロダクト開発における最大の課題の一つが「インフラ運用コスト」と「運用保守の手間(メンテナンスフリー化)」です。特に、飲食店向けサービスのように、特定のピークタイムにアクセスが集中し、深夜帯にはアクセスがほぼゼロになる特性を持つシステムでは、固定費がかかる仮想サーバー(EC2やVPSなど)を稼働させるのは非常に非効率的です。
そこで、本プロジェクト「StoreMenu」では、AWS(Amazon Web Services)のサーバーレスアーキテクチャを全面的に採用することで、月額のランニングコストをほぼ無料枠内(数十円〜数百円レベル)に抑えつつ、高いセキュリティと可用性を実現しています。今回はその具体的なインフラ構成の裏側を解説します。
StoreMenuは、静的アセットの配信に Amazon S3 + Amazon CloudFront を使用し、バックエンドの動的APIには Amazon API Gateway + AWS Lambda を組み合わせた「完全サーバーレス構成」を取っています。
フロントエンド(Angular 21)はビルドされたHTML/JS/CSSファイルをAmazon S3に配置し、CloudFrontを通じてグローバルに配信しています。これにより、アクセスが急増してもCloudFrontのキャッシュ機能により、高速かつ負荷を意識せずにユーザーへ画面を提供できます。
また、セキュアなブラウザ保護を実現するため、CloudFrontおよびアプリケーションレベルで Content Security Policy (CSP) や Subresource Integrity (SRI)、Referrer Policy などのセキュリティヘッダを徹底的に設定し、XSS(クロスサイトスクリプティング)や改ざん攻撃から保護しています。
注文処理、お知らせの更新、売上データの登録といった動的なAPI処理はすべて AWS Lambda が担っています。Lambdaはアクセスがあった瞬間のみ起動して実行時間分のみ課金されるため、アイドルコストが完全にゼロになります。
マルチテナント構成のStoreMenuでは、各店舗の売上データやメニュー設定ファイル、お知らせテキストをS3上で店舗ごとに分離して管理しています。これをブラウザから直接アップロード・更新すると、S3バケットの書き込み権限(認証キーなど)をフロントエンドに持たせることになり、重大なセキュリティリスクとなります。
そこでStoreMenuでは、以下のような堅牢なセキュリティプロセスを導入しています。
PutObject 操作に対する 署名付きURL(Presigned URL) を一時的(例:有効期限60秒)に発行。PUT 送信し、S3への書き込みを完了する。この仕組みにより、認証キーをフロントエンドに一切露出させることなく、安全かつ高速に店舗側でのファイルアップロードや設定の更新を実現しています。
開発におけるもう一つのセキュリティ原則は「AWSのアクセスキーやStripeのシークレットキー、JWT認証キーといった秘密情報をコードや environment.ts に埋め込まないこと」です。
StoreMenuでは、これらの機密情報を AWS Systems Manager (SSM) Parameter Store の SecureString 機能を使用して一元管理しています。Lambdaは実行時にSSMからシークレットを動的に読み込みます。SSM Parameter Storeの標準パラメータは追加料金無し(無料)で利用できるため、Secrets Managerなどを利用するよりも運用コストを最小化できるのが個人開発における大きなメリットです。
S3, CloudFront, API Gateway, Lambda, SSMを巧みに組み合わせることで、StoreMenuは「店舗ごとのデータ分離(マルチテナント)」「高いセキュリティ水準」「限りなくゼロに近いランニングコスト」という3つの難題を同時に解決しました。
個人開発でサービスをリリースする際は、安易にVPSなどを立ててしまわずに、AWSなどのサーバーレスリソースを徹底的に活用することをおすすめします。
← ホームへ戻る