257
227

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2020-03-07

記事を書く背景

どうも、個人開発で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に接続できる状態にしましょう。
このへんは調べればわんさか出てくるので、割愛します。
t3-nanoが安いです。

1. ssh接続する

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

2. MySQL (MariaDB)をインストール

sudo su
yum update
yum install -y mariadb-server
systemctl start mariadb
systemctl enable mariadb
systemctl is-enabled mariadb
mysql_secure_installation
mysql -u root -p

CREATE USER 'remote_access' IDENTIFIED BY '{パスワードを自分で決めたもの}';
GRANT ALL PRIVILEGES ON *.* TO 'remote_access'@'%' WITH GRANT OPTION;

DBサーバーの設定はこれで終了です。

3. mysqlクライアントから接続できたら成功!

ssh接続を切り、自分のPCから接続確認をします。

mochida@mbp ~ % mysql -h {host ip} -u remote_access -p                    
Enter password: {パスワードを自分で決めたもの}

最後に

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

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

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

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

追記②

デフォルトだとメモリが不足することが多々あるので、スワップ領域を設定しておいたほうがいいです。
https://qiita.com/wmx/items/631222f2e5a9e7a59fb4

また、innodb_buffer_pool_sizeを設定しておきましょう
https://tyablog.net/2020/02/22/adjust-mysqld-memory-usage/

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

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が休止状態から起動するまでの時間を調べた

追記④ 2023/1/1

MariaDBの方が簡単なので手順を更新しました。

  1. Database As A Service

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

257
227
13

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
257
227

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?