Help us understand the problem. What is going on with this article?

個人開発でDBコストを抑えるならEC2という選択肢もある

記事を書く背景

どうも、個人開発でwalicaというサービス作っている者です。

walicaは、2018年にサービスリリースしまして、今では月間3,000人が使っている、そこそこ使われるサービスになっています。

ところで、月間PV4万くらいですが、マネタイズには失敗しているので
リリースしてから16ヶ月、赤字が続いています。 😂😂😂

広告収入がやや伸びてきていますが、赤字の主な原因はインフラ費用です。

また、普段は自分のブログで淡々と記事を書いているのですが、今回Qiitaで記事を書くことで、デメリットの指摘などのフィードバックコメントをいただきたいと思っています。

自分はインフラにそこまで詳しくないので、コメントや記事の修正を通してコスト最適化に重点を置いた個人開発のベストプラクティスについて議論できたら幸いです。

発生したインフラ費用の内訳 (2018年当時)

DB (RDS | MySQL)           ... $23 / month
Webサーバ (EC2 t2.micro)    ... $27 / month
ドメイン                      ... 3067円 / year

上記の後、Webサーバは費用を $7 / monthまで節約でき、大きな問題も無いですが今回は記事から割愛します。

今まで使ったDBサービスと価格、リージョン

AWS以外にも、 Heroku, Manifold などの複数のDaaS1からDBリソースをレンタルしました。

Amazon RDS for MySQL 2

料金: $23
リージョン: us-east

Heroku Clear DB

料金: 5MBまで$0
リージョン: us-east

Manifold JAWS DB

料金: 250MBまで$5
リージョン: us-east

ただし、 CREATE DATABASEで複数のデータベースを作る権限が無い
= 5ドルで1つのDB。 2つ使いたいなら10ドルかかる

EC2という選択肢

manifoldを長いこと使っていたのですが、walica以外のサービスを開発するにあたって、さらにDBが必要になりました。manifoldでは前述のように、データベースを複数追加する権限が無いので、サービスを作るたびに$5払いたくないなぁ💸💸💸という意識がありました。

あと、国内の利用者が多いので、Tokyoリージョン使いたい🗾という気持ちもあったので、AWSを使うことにしました。

結果

EC2最高でした。少なくともコスト面ではベストです。

料金: $8.7
容量: 4GB
リージョン: 東京

(
  いずれ2つ以上のDBを利用する
  OR
    1GB以上DB使いたい
  OR
    Tokyoリージョン使いたい
)
 AND
  DB安く済ませたい

上記の条件にヒットするならば、使うべきです。
$8.7で4GBは神🙏🙏🙏🙏🙏

注意点

RDSなどのマネージド・サービスと比較すると、EC2は自分でカバーしないといけない部分があります。

主な範囲は下記です。

- パッチ適用
- オートスケール
- バックアップ
- ディスク暗号化
- モニタリング

それなりに多いですが、個人開発レベルだといくつか必要なものを自分でやっていけばいいと思っています。
インフラめんどくさくて、開発に集中したい OR お金はある という人だったらRDSの方が良いです。

DB作成手順のまとめ

まず、sshでEC2に接続できる状態にしましょう。
このへんは調べればわんさか出てくるので、割愛します。
ちなみにデフォルトだと4GBですが、EC2インスタンス作成時に設定できるEBSの容量の値を変えると、DBが大きくなります。
スクリーンショット 2020-03-07 9.33.45.png

1. ssh接続する

ssh ec2-user@{ec2の ipv4 publicアドレス} 

2. yumを更新

sudo su
yum update

3. 言語設定を日本語にする

echo "LANG=ja_JP.UTF-8" > /etc/sysconfig/i18n

4. タイムゾーンを変更する

ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

5. MySQL 8.0をインストール

CentOS7にMySQL8.0をインストール

6. 自分のPCからMysqlに接続できるようにする

How to grant all privileges to root user in MySQL 8.0
※セキュリティ的な驚異にさらされるので、設定は上記のそのままにせず慎重に!

7. mysqlで接続できたら成功!

mochida@mbp ~ % mysql -h {host ip} -u {username} -p                    
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 77
Server version: 8.0.19 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

最後に

インフラガチ勢のコメント待ってます。
「自分はこういうの使ってるよ」とか「そのやり方だとこういうリスクがあるよ」とか教えていただけると幸いです🙇🙇🙇

追記① - 記事叩き フィードバック

たくさんのご意見いただきありがとうございます。
返信はできていませんが、全て目を通しています。

Twitterにもたくさんの意見があったので転載しておきます。
お前を見ているぞ 👮👮👮

※ スクショ消してほしかったら言ってください

image.png
@shonansurvivorsさんのツイート

image.png
@kochos5さんのツイート

image.png
f3571n4l3n73さんのツイート

image.png
@__timakin__さんのツイート

image.png
@a_yasuiさんのツイート

image.png
@Michin0sukeさんのツイート

image.png
@Keisuke69さんのツイート

image.png
@webuilder240さんのツイート

image.png
@otchyさんのツイート

image.png
@Kengo_TODAさんのツイート

追記②

タイトルが過激かつ否定されまくっていたので修正しました😭😭😭

x 個人開発でDBコストを抑えるならEC2一択
o 個人開発でDBコストを抑えるならEC2という選択肢もある

追記③

Aurora Serverless 調べてみました!
サーバレスなので、起動時間大丈夫かなと思ったのですが、やはりかなり遅そうです。
個人的には500ms以下じゃないとアプリには使いたくないですね...

[AWS]Aurora Serverless for PostgreSQLが休止状態から起動するまでの時間を調べた


  1. Database As A Service 

  2. 容量に対して従量課金ですが、当時、5MB程度の利用でした。。 

kyogom
ガジェット系に飛びつく系男子。 なにかと自動化したがる。
https://kyogom.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした