【AWS】Amazon Lightsail の”意外”な落とし穴

AWS
この記事は約6分で読めます。

この Web サイトを AWS Amazon Lightsail に移設してから 1年ちょっとが経ちました。

【AWS】サイトを自宅鯖から Amazon Lightsail に移行しました
ことの発端Raspberry Pi 上に構築していた艦これ攻略用 Redmine ( ) の環境をふとしたことから触ってしまい、Ruby on Rails がまともに動かなくなりました。ほんと Ruby クソだな。Raspberry Pi

当時の巷の技術サイトでは
 ・Amazon Lightsail を使ってみた
 ・Amazon Lightsail の落とし穴

・・・みたいなブログ記事が散見され、かくいう私も結構参考にしたのですが、
『運用してみた』にまで踏み切って書かれている人はいませんでした。

解決済の ”落とし穴”

で、だいたい『落とし穴』として挙げられている内容として、
Amazon Lightsail では SSH で送信元 IP アドレス制限が出来ない」というのがあります。

これは古い情報で現在は SSH で送信元 IP アドレス制限出来ます

ね?
SSH 鍵認証において『落とし穴』って、いうほどリスキーなのかね?
閉めるに越したことありませんが。

じゃあ安いし EC2 より良いじゃん!完璧じゃん!? ってなる訳なんですが、
別の”落とし穴”を実際、私自身が踏み抜きましたのでご紹介しておこうと思います。

“落とし穴” に気づいたきっかけ


2020年の8月のある日、以下の記事が Twitter でバズったのがきっかけでした。

https://www.twinfami.com/TP-LINK_DDoS

Gigazine さん や はてな さんでも拡散されはじめ、大量アクセスがこのサイトに!

あらあら~、ありがとうございます~^^

・・とか呑気に構えておったのですが、
1~2時間ほどしてサイトへのアクセスができないアラートが飛んできました。

落とし穴:CPU クレジットが存在する


普段、このサイトへのアクセスはあまりありません。
(そんな中、アクセスして頂いている方ありがとうございます!)

従って知りもしなかったのですが Lightsail のインスタンスには、
そのサイズに応じた CPU クレジットが存在します。

常に 100% の CPU を使わないワークロードにおいて、CPU の閾値を決め、
閾値を上回ったらクレジットを消費してバースト
閾値を下回ったらクレジットが徐々に回復して
閾値を上回ってクレジットが尽きたら CPU 使用率に制限を掛ける

という仕組みです。(AWS EC2 の tシリーズみたいな仕組み?)

最小の $3.5/月のインスタンスには 5%、1つ上には10%が上限になっています。

要するに、大量アクセスによって CPU が常時 40% で稼働しクレジットが尽き果てました。
その結果、CPU の上限が 5% に制限され全くつながらなくなってしまいました。

そうなるとどうなるか?

「某社によってアクセス出来なくされたのではないか」とか、
「アクセスできない・・・こわい・・・」みたいな陰謀論が Twitter で発生し、
ますますアクセスが増えると見込まれました。待て待て待て待て!

流石に T〇-LINK もそんな事しませんって。知らんけど。

落とし穴:サイズアップするとディスクも増える

前述のとおり、CPU 使用率の上限はサイズによって変動しますので、
一時的なサイズアップも考えました。

しかし、Lightsail ではサイズと OS ディスクサイズが連動しています。

これが意味するところは何か?

一度サイズを大きくすると戻せない」という事になります。

・・・いや、別にこのサイトを収益化しているわけではないし・・・
という経営判断が下され、この案は受け入れられませんでした。

記事更新しないんだったら今のサイズでスナップショットを取って、
一時的にサイズアップ、アクセス集中が終わったら元に戻せば?
・・・というシナリオも考えたのですが、

https://www.twinfami.com/20180224_kancolle/

上記の艦これ記録 Redmine もこのサーバで動いており、
運悪くこのタイミングで艦これイベントがあって更新しまくってたので、
それらの記録が巻き戻ってしまうのは NG でした。こちらの方が優先だし。

そう、つまりは別にこのサイト(Null Gamer Exception)自体は別にお金もらっているわけでもないしアクセス不可になっても別に全然いいんだけど、
艦これ redmine が止まるとイベント進捗が記録できなくて困る!!!という非機能要件!(最低)

落とし穴:インスタンスは同時に2つまで制限

このままでは困ってしまうので「艦これ redmine」を継続させるため、一時的に
 ・「Null Gamer Exception」
 ・「艦これ redmine」
の2つにインスタンスを分ける措置を取りました。うう・・二重課金・・・。

収束したら(あるいは艦これのイベントが終わったら)、データを保全したい「艦これ redmine」の方で再び「Null Gamer Exception」を動かそうという魂胆です。

また、Lightsail を調査していく中で「スナップショットからインスタンスを新設すると CPU クレジットが回復する仕様」を発見しました。
これによって、「CPU クレジットが尽きるたびにスナップショットから『Null Gamer Exception』をインスタンス作成する」というみじめな運用を思いつきました。

事前に立てておいて公開 IP アドレスを付け替えればコストを抑えながら短時間の停止でいけるやろ、という狙いもありました。
まあ、別に止まっても良いんだけど。

いざ実行しようと新たな「Null Gamer Exception」を作成しようとすると、
インスタンスの上限2つに引っ掛かり 作成できませんでした。

なので CPU クレジットが尽きるたびに「Null Gamer Exception」のインスタンスを削除、再生成
・・・という完全停止が発生するブザマな運用となりました。
まあ、別に止まっても良いんだけど。

そして静かな海へ。

3日ほど経つとアクセスも落ち着きを見せたので、少し様子見してから縮退しました。

まとめ

不用意にバズってしまうと少し大変だったけど
個人サイトを運用する上では Amazon Lightsail 最高!!!

タイトルとURLをコピーしました