スタートアップのインフラ構成(AWS)

サービス立ち上げ段階では、いろいろ悩むことは多いけど、その中のひとつとしてインフラ周り。

ベテランエンジニアが一人いればいいけど、なかなかそうはいかない。

Webアプリケーションの開発経験はあるけど、インフラには詳しくないって人も多いハズ。

自分の場合は、プログラミング経験はあるけど、Webアプリケーションの実装経験がほとんどゼロ、インフラ構築なんてもってのほか。

そんな自分が、たった一人でサービスを立ち上げて、ああすればよかったな、と思うこともいくつかあるので、ノウハウを共有できればと。


前提

規模による、とか、プロジェクト次第、とかって記事は好きじゃないし、(だったら書く意味ない)

PoLの例を参考にしてみる。

ちょっと説明用なので、実際の状況とは違うところもあるけど。

機能

サービス立ち上げ段階なので、まずは最低限の機能をリリースする。

  • ユーザー登録(仮登録、本登録)
  • 課金(無料/有料)
  • 学習コンテンツ(2、3種)
  • LP(1枚)

環境

  • 本番環境
  • 開発環境
  • 管理画面

AWS選定の理由

AWSとその他国産のメリットデメリットはググれば山程出てくるので、そちらを参考にしてもらえれば良い。(GoogleやMicrosoft Azureは、よく知らない。。)

まぁ要は、料金と機能のトレードオフ。

サービス立ち上げ段階では当然利益が無いので、初めは料金が安いなんたらVPSにするかけっこう悩んだけど、後々の移行の手間を考えてAWSにした。

あとは、AWSを使っているサービスはかなり多いので、情報が多いことも。(これも大事)

その上で、如何に安く、また最低限のセキュリティや機能を満たすことができるか。


サーバー構成

必要なものは、これだけ。 - EC2: 1台 - RDS: 1台

12ヶ月以内なら無料枠があるので、この構成ならほぼ無料で使える。

VPCやらセキュリティグループやら未経験の場合全く意味がわからないだろうけど、これは調べて進めるしかない。仕方ない。

さて、問題は環境をどう分けるか。

無料枠の場合、EC2インスタンス1台で720時間以内であれば無料であるが、複数台起動するとインスタンス1台ごとに秒単位で請求される。

1秒だけ起動して即停止したとしても、起動した段階でまず1時間としてカウントされるので注意。

で、まずは本番環境1台と本番環境用DB1台のみ用意する。


環境構築

まずは、EC2にデプロイ用のユーザーを作る。

そして、ここがポイントで、以下のようなディレクトリ構成にする。

home - root
     |
     - deploy
         |- production  # 本番環境
         |- development # 開発環境
         |- management  # 管理画面

メインのドメインからは本番環境に、ほかはサブドメを切って飛ばす。

home - root
     |
     - deploy
         |- production  # 本番環境(example.com)
         |- development # 開発環境(dev.example.com)
         |- management  # 管理画面(mng.example.com)

本番環境と開発環境が同じ領域にあるなんて、、と思うかもしれないが、

初めはこれでいいし、なんかやらかしたら作り直せばいい。

最初から完璧は無理。

金もないし。


開発の進め方

まずローカル環境ですべての機能を完成させる。

そして、開発環境にデプロイ。

開発経験が少なければ大抵開発環境にデプロった段階で問題だらけ。

問題がなければ本番にデプロイ。

サービスが安定しだしたら、EC2を複数台にして環境を分割。


PoLの場合は、初めから環境を分けてたけど、

動作確認のために開発環境を起動して、終わったら停止、で、停止し忘れてまあまあな請求が。。

ってことも少なくなかったので、初めは1台で良いんじゃないかと思った次第。

勿論、最適解ではない。あくまで参考に。

インフラに詳しい知り合いがいるのが一番なんですがね。


AWS

2019-06-01 02:15