【AWS】さようならALB

Posted by Akkey on 2026/02/15

AWSの運用費が月60$。個人運用にしては高すぎる(と思う)!勉強を兼ねているとはいえ、個人ブログサイト構築でそんなにお金がかかるのか。2026年1月の運用費は以下のとおりでした。

EC2インスタンスはサーバー費として仕方ないとして、やはり問題はELB(ロードバランサー)。チャッピーに聞きながら運用費を下げるべくいろいろ試みましたが、一向に下がらず。結局個人サイトにロードバランサーは不要なんじゃないか説に辿り着き、本日はロードバランサーを削除しコストダウンするべくやって参ります。


🧠 ALBはロードバランサーの仕事をしていなかった

以前の構成はこうでした。

Route53
   ↓
ALB
   ↓
Target Group
   ↓
EC2(1台)

しかし実際はEC2は1台しかなく、スケールアウトもしていない。

👉 ロードバランサーの意味がほぼない。ただのHTTPS用で置いてある状態。

構築した当初はチャッピーに言われるまま、構成してしまいました。先を考えるとこういう構成もありだったのかも。でも、高すぎるんよ!

たぶんALB入れるようなサイトは収益を上げているか業務用なんでしょう。僕のような個人の趣味サイトには合わないんです。いずれアクセス数が増えて収益化するその日まで!さらばALB。


🚀 実施したこと

① Route53をALB指定からElasticIP直指定に変更

AWSコンソールのRoute53サービスに入って、利用しているホストゾーンのAレコードを編集します。今はALBを向いているので、それをIPに変更しました。エイリアスはOFF。IPはSSHで通信する際に利用していたElasticIPを流用しました。

この状態でブラウザから叩くと・・・「この接続ではプライバシーが保護されません」的なエラーが表示されます。EC2に証明書が設定されてないからですね。先に証明書をやっておけばエラーになることないと思いますけど。。まぁ止めても問題ない個人サイトなので!


② EC2に証明書(Let’s Encrypt)導入

httpsで接続するためには証明書が必要ですので、EC2に証明書を設定しなければいけません。でないとhttpsで接続しようとした際に証明書エラーになります。

そのためは「Certbot」という無料のSSL証明書を自動で取得&更新してくれるツールが必要になります。Certbotは Let’s Encrypt という認証局(CA)とやり取りして証明書を発行していろいろ設定してくれるクライアントツールです。

🧩 Amazon Linux 2でCertbotを使うまでの手順(詳解)

🐧 前提環境

  • OS:Amazon Linux 2
  • Webサーバー:Apache

②-1 extras を有効化(EPELの有効化)

Amazon Linux 2 では、デフォルトでは certbot が入っていません。

certbot は EPEL(Extra Packages for Enterprise Linux) に含まれています。

EPELをEC2にインストールします。SSMからEC2に接続して、

sudo yum install -y epel-release

でインストールします。


②-2 certbot のインストール

EPELが有効になったら、certbotをインストールできます。

sudo yum install -y certbot python3-certbot-apache

で、インストールされたら、Certbotのインストール確認

certbot --version

でバージョン情報が表示されればOKです。


②-3 Apacheが80番ポートを待ち受けているか確認

Let’s Encryptは HTTP-01チャレンジ を使います。

そのため、Apacheがポート80をリッスンしている必要があります。

確認:

sudo apachectl -S


出力に

*:80

が含まれていればOKです。が、私の場合、httpsのみにしていたので、httpでリッスンしていませんでした。この場合はVirtualHostを追加します。

sudo vi /etc/httpd/conf/httpd.conf

でhttpd.confを編集して、

<VirtualHost *:80>
    ServerName akkeys-lifework-lab.com
    DocumentRoot "/var/www/html"
</VirtualHost>

を追加して保存します。保存したらApacheを再起動。

sudo systemctl restart httpd

で80番ポートのリッスンが確認できたらOKです。


②-4 証明書発行

いよいよcertbotを利用して証明書を発行・設定です。

sudo certbot --apache -d akkeys-lifework-lab.com

これは対話式でメールアドレスを入力したり、規約に同意したりする必要がありますが、成功すれば、「Congratulations!」と出るので成功したことがわかるはずです。これでHTTPで接続しても証明書エラーがなくなるってわけです。裏側ではいろいろなことが行われているのでしょうが、意識しなくていいのは楽ですね。

この状態でブラウザからアクセスすれば証明書エラーが出なくなってるはずです!


②-5 (おまけ)自動更新を有効化
Let’s Encryptの証明書は 90日間有効です。なので定期的に更新が必要になります。

実際の更新は手動の場合

sudo certbot renew

で行いますが、本当に更新ができるかを確認をしておきます。

sudo certbot renew --dry-run

–dry-runをつけることで証明書更新をお試しモードで起動。証明書更新は証明書期限の30日以内でしかできない模様ですね。

Cert not due for renewal, but simulating renewal for dry run

更新時期じゃないけどもドライランでシミュレーションのために動かしますよと出ます。

Congratulations, all simulated renewals succeeded

と出ればOK。つまり証明書が切れそうになった時に更新できる状態であるってことです。

次にcertbotを利用して証明書を自動で更新してくれるように設定しておきます。更新を忘れちゃうと困りますからね。

まずは自動更新を有効化します。

sudo systemctl enable certbot-renew.timer

続いて起動

sudo systemctl start certbot-renew.timer

起動を確認

sudo systemctl status certbot-renew.timer

Active: active (waiting) 

と出ていればOKです。上の証明書更新コマンドをCronで設定しても一緒みたいですけどね。


③ ALB削除

Route53の向き先をEC2に変え、EC2に証明書を導入、httpsでの接続が確認できたらいよいよALBを削除します。

これは簡単で、AWSコンソールのEC2サービスからロードバランサーを選んで、削除するだけです。


④ ElasticIP解放

最後にALBについていたElasticIPを解放します。ElasticIPから解放しようとするとターゲットグループに紐づいているので、ElasticIPからは解放ができません。まずはターゲットグループを削除する必要があります。

ALBにはターゲットグループが2つ以上付きますので紐づいていた全てのターゲットグループを削除します。EC2→ターゲットグループで出てきます。

ターゲットグループを消したら紐づいていたElasticIPも自動で解放されました。

以上で作業は完了です!


💰 削減見込み

  • ALB基本料金:約 $18/月
  • 不要なElasticIP:数$

👉 月 $20(3,000円)前後削減される見込みです!


🧩 学び

業務ではロードバランサーが入っているのが当たり前だったので、こういう構成が当たり前だと思いこんでいました。しかし、個人サイトではコスト面で不利すぎる・・・。

私のような小規模の個人サイトでは:

  • 単一インスタンス
  • 低トラフィック
  • 冗長構成不要

なので、ロードバランシング も不要

AIに聞いて動いたからOKではない。ちゃんと請求書も見ましょう!


🏁 まとめ

  • ALBは小規模個人サイトではオーバースペック
  • ALBを使わずともEC2単体でHTTPS公開は可能
  • 請求書はちゃんと確認しよう

次の請求がでたら結果を報告します!

今度は広告とかアフィリエイトとか収益化の方法を調べてやってみますかね。

もし収益化ができたらその時はALBの復活を考えますかね。その日までさらばALB。

ではまた。