こんにちは、西山です。
このブログはギークフィードアドベントカレンダー2024の初日の記事です。
CCoEとして社内のAWS利用コストを管理しています。
ギークフィードでは現在100以上のアカウントを契約しており、それぞれのアカウントのコストは小さいものが多くても塵も積もれば山となる金額になります。
3年前にもコスト削減についてのブログを書きましたが、AWS Organziations, Control Towerを活用することでその頃よりもはるかに効率的に管理ができており、利用アカウント数も10倍になっています。
今回はどうやってその効率的な運用に至ったかという部分ではなく、現在継続的に行っているコスト最適化につながる試みをご紹介します。
目次
アカウントを用途別に分ける
AWSではなく、個人のプライベートな毎月の支出をチェックするときどうするでしょうか?
いちばん大事なことは「いつ」「何のために」「何に」「いくら使ったのか」を把握することですよね。
家計簿をつけたりする人もいると思いますが、私は支払いのほぼ全てをクレジットカードで行っているため、クレジットカードの明細を見ればそれらがわかります。
AWSの場合はコストレポートが家計簿やカードの明細に当たりますが、一つ一つのリソースの料金を追っていくことは大変です。また、同じサービス(EC2やRDSなど)を複数の用途にわたって利用していることがとても多いでしょう。
そのため、「いつ」「何のために」「何に」「いくら使ったのか」を最も明確にする方法は、アカウントを用途別(ワークロード別)に分けることです。
AWSの利用ガイドラインを規定し、どのようにOUをわけどういった単位でアカウントを分離すべきかを明確にしています。
以下は社内のOU構成とその用途の抜粋です。
毎月のアカウント別コストをチェックする、アカウントの棚卸しを行う
毎月のコストチェックは重要です。現在、毎月の第二月曜日にCCoEでコストを確認するMTGを設けています。
前述のようにアカウントを用途別に分けているため、前月からの変動が把握しやすいですし異常値にもすぐに気づくことができます。
また、同じタイミングでアカウントの棚卸しを行っています。
ギークフィードでは受託開発を行っているため、プロジェクトが完了後にはそのアカウントのアクティブなリソースを休止状態にしたり、完了後一定期間後にデータアーカイブとアカウント削除を行います。
自身がプロジェクトメンバーだと意外と終了後のリソース管理は忘れてしまいがちになってしまうので、CCoEが改めてチェックすることは大事に思います。
コストアラームを設定する
毎月のコストチェックだけでは想定外のコスト発生に対応できません。各アカウントのコストアラームも設定し、アカウント管理者とCCoEに通知することも必要です。
以下は社内でAWSを新規作成時に利用するSlackワークフローですが、その中には利用コストを入力する欄を設けています。
一体そのアカウントでいくら利用する想定なのか、管理者自身がまずある程度想定を持ってもらうため、またその妥当性を判断するためです。
Systems Manager Resource Schedulerを利用して開発用EC2インスタンスの自動起動、停止を行う
具体的なコスト削減策として効果が大きいものを紹介します。
Systems Manager Resource Schedulerを利用して、開発や検証等の夜間利用していないEC2インスタンスの自動起動、停止を設定します。
便利な点はAWS Organizationsと統合することで対象として指定したOU配下のメンバーアカウントには自動起動、停止の仕組みがプリインストールされており、利用者は対象のEC2インスタンスに特定のタグを設定するだけで機能を有効にできる点です。
タグを設定するだけで6割のEC2コストを削減することができます。
AWSのアップデートを追う
コスト最適化に限った話ではないですが、AWSは日々多数のアップデートによって進化しています。
アップデートの中にはサービス利用料が安くなったり、これまで実現してきたユースケースを別の仕組みで実現できるようになるものもあります。
そういったアップデートが発表された際に、組織内の利用ユースケースに活用できるものがないかちょっと考えてみると、意外と適用できものがあるかもしれません。
例えば直近AWS AppSync Eventsが発表されましたが、
AppSync GraphQLでは、リアルタイム更新 100 万件あたり 2.00 USD
AppSync Eventsでは、イベント API オペレーションが 100 万回あたり 1.00 USD
というWebSocketでの双方向イベントでの単価が半額になることがわかりました。
アーキテクチャ変更コストと利用ボリュームを比較しないといけませんが、これまでAppSync GraphQL subscriptionで実現していたユースケースをEventsで行うという選択肢が考えられますよね。
アップデート情報にアンテナを立ててそれをどう組織に活かせるか、一日5分考えるだけでも1年後には効果が出るものがあると思います。
re:Invent期間前後は5分では全然足りないですが笑
自社サービスのアーキテクチャや機能の見直しを行う
前述のアップデートを受けてのアーキテクチャ変更も含まれますが、それとは別に自社サービスの利用状況を把握し、どういった機能がよく利用され、それがコストにどう影響を与えているのかを把握して改善するというのがここでのポイントになります。
自社サービスの一つにAmazon Connectの機能を補完、拡張するサービスのSylphinaがあります。
Sylphinaにはエージェントリストという機能があり、他のエージェントのステータスをリアルタイムに把握することができる機能がありました。
全エージェントのステータスを全エージェントがリアルタイムに確認できることで、通話転送時など便利だと考えていたため、この機能は私が開発者目線で気に入っていた機能の一つですが、よくよく考えてみると管理者でもなければ常に他エージェントのステータスを把握する必要はほとんどないということに気づきました。
通話転送という機能はそれほど頻繁に行われるものではなく、通話転送が必要なその時点での転送可能な他エージェントのステータスがわかればよいのです。
この機能はたしかにイカしているかも知れませんが機能の重要性に対してインフラコストが高いため、リアルタイムでのステータス表示をやめ、必要なタイミングでステータスを取得する機能に変更しました。
提供しているサービスの価値は何か、その価値に対して支払っているコストが見合っているかを考えることも重要かと思います。
社内への啓蒙活動
最後に重要なことはコスト最適化はCCoE単独ではできないということです。
社内のすべてのAWS利用者にコスト意識を持ってもらうことがいちばん大事なことだと思います。
もちろん最初はわからないことも多いでしょうし意図しないコストが発生することも多いと思います。
ただそういったときに、一方的なダメ出しをするのではなく、無駄をなくすためにどうすればよいかもセットでアドバイスすることを心がけています。
人の数だけ利用の仕方も違うので、知らなかったことも多く自分の勉強にもなります。
一つひとつは大した金額ではないかも知れませんし、指摘されたときはうるせーなと思うかもしれませんが、現にそれが積もって年間数千万円になっています。
アカウントが100個あってそれぞれ月間5ドルのコストを削減すると、年間6000ドル、年間100万円近くになります。
会社の売上に対して小さい額ではありません。
原価を下げれば利益が増えて、組織に、みんなに還元されます。
おわりに
プロジェクト単位、サービス単位でのコスト最適化は比較的行いやすいですが、組織単位となるとやはり教育や啓蒙が最終的に一番大事ですよね。
個人的にAWSを利用するときに意識していることは、リソースのライフサイクルを短くするということです。
開発を行う際にはすべてIaCを用いて、開発するときにのみリソースを作成し、不要になったタイミングで削除するというやり方です。
特に作成するだけでコストが発生する系のものに対して有効で、数日間開発をしないときや夜寝る前にリソースを削除すればよいのです。
このやり方はコストを削減するだけでなく、リソースの再利用性や運用性を高める手法なのでぜひ実践してみてください。
その他にこんな良い方法があるよ!という方は、ぜひXやカジュアル面談で教えてください。
ギークフィードで一緒にAWSを利用したビジネスを行うメンバーも募集しています。
- 組織内のIPv4アドレス(EIP)を自動通知してコスト削減する - 2024-12-03
- 組織内のAWSコスト最適化のためにやっている7つのこと - 2024-12-01
- Amazon Connect Contact Lens + iPaaSで生成AI活用&他サービス連携を簡単に実現!– Amazon Connect アドベントカレンダー 2024 - 2024-12-01
- AWS Step Functionsの基本を再学習しました - 2024-09-23
- Amazon SESでバウンスメールを管理する - 2024-07-07