クラウド環境が充実してきて、Webサービスのホスティング方法も多様な形になってきました。 AWSで言えば、EC2・Lambda・ECS・EKS・Elastic Beanstalk・Lightsailなどの選択肢があります。
今回はECSで開発環境向けの利用で頻繁にECSの起動終了を繰り返す処理があったことで、意外な所に余波があり、きづいたことをお伝えしようと思います。
料金形態とライフサイクルを意識する
どのサービスを使おうかと検討する際に、クラウド費用の料金と自分たちの運用・用途にあわせて選ぶことになります。
ECSは秒単位の課金がされますので、常に起動していても、任意のタイミングで起動・終了しても1ヶ月でかかるコンピュートリソース料金の換算の仕方はEC2とそれほど変わりありません。
ライフサイクルとしてはコンテナ単位なのかOS単位なのかという違いがあり、コンテナの方が包括範囲が小さいです。
仮に10秒毎に起動終了の処理を繰り返したとしても1ヶ月料金に近い料金がかかるくらいだろうという推測でした。
クラウドで複数サービスを使うということ
クラウドでは複数のサービスを組み合わせて便利に使うことが多く、今回気づいた「意外な所に余波を及ぼしていた」という話もECS単体では発生せず、他サービスと組み合わせて発生する事象となります。
今回の環境はそれなりの規模のリソース量(金額・数量ともに)ということもあり、請求書ダッシュボードを定期的にチェックしています。その際に、他のサービスに比べて絶対的な金額としてはそこまで高くないけど、「このサービスにしては少し費用が高めだなぁと気になりました」項目がありました。それがAWS Configです。
AWS Configはリソースの構成をロギングし、評価、監査、診断ができるサービスです。 このサービスを使うと、生成されたリソース群に対して自分たちのルールに準拠された設定がされているか、などのチェックができます。
料金としては ロギングされた記録1つあたり $0.003 費用が発生します。 1件あたりとしてはそこまで高くなく、仮に1000回記録されても$3です。
ライトユーザーでも気軽に使える料金体系となっていて、利用しないという選択肢の方が少なくなってきているのではないでしょうか。
繰り返し処理の罠
今回陥った罠としてはECSの繰り返し処理でした。 リソースの立ち上げ・終了で発生する課金は、クラウド破産のパタンとして「あるある」な勘所や考慮が必要なポイントなので臭いますね。
ECSのライフサイクル特有の仕様となるのですが、EC2内でサービスを起動する時にはAWSリソースが新たに生成されることがないのですが、ECSは起動・終了の度にセキュリティグループが生成・削除されその度にAWS Configのレコーディングが発生します。
今回のECSの実行するアプリケーションでは、起動時に関連サービスの状態をチェックして「起動する必要がない時は終了する」という処理にしてありました。
この起動・終了を繰り返す処理が非常に短い間隔で行われていたことから、AWS Configのレコーディングログが大量に生成されていました。想定より50〜100倍程度課金が発生してしまっていました。
EC2インスタンスを立ち上げて、待ち受けるのとそれほど変わらない処理に見えても、AWSリソースにアクセスし・操作・トラフィックが流れているという状況では、利用している全てのサービスに気をかける必要がありますね。
運用を始めてすぐのリソース使用状況だと積み重ねがされていないのできづきにくいけど、定期的に費用のチェックをしたりBudgetアラートを仕込んだり項目ごとに適切にしていく設定値を見直していくことで、きづけるようになります。
対策と運用について
コンテナでサービスを起動するというやり方は変えず、ECSは使い続けました。 関連サービスの状態でサービスを起動するという方法をやめました。
というのも、関連サービスの状態が変わるタイミングは手動実行をしていたので、同じタイミングでこのECSアプリケーションも起動・終了をするようにしました。
起動スクリプト修正さえ対応すれば、運用上の手間やフローは今までとそれほど変わらず、Croud Configの料金を想定通り1/10程度に抑えることができました。
まとめ
今回の事例から、あらためて以下のような学びがありました。
- 空気のようにあるようなサービスにも気を使おう
- 運用とライフサイクルを結びつけて最適なクラウドサービスや処理方法を検討する
- 何にどれだけ料金が発生しており妥当かどうかをチェックすることは大事
AWS Lambdaでも「再帰ループ」の検出と停止ができるようになりましたが、意図したイベントループ・繰り返しの場合でも注意が必要です。 考慮漏れはどんな時でも発生し得るので、きづけること・原因を把握できるようになっていきたいです。
参考サイト
- AWS Config の料金がなぜこんなに高い? Amazon Athena でどのリソースが Config の記録対象になっているか調べてみた | DevelopersIO