AWSのコスト見直しに!myApplicationsでリソースをまとめて可視化する
これは豆蔵デベロッパーサイトアドベントカレンダー2024第11日目の記事です。
はじめに
#ビジネスソリューション事業部の塚野です。最近AWSを個人的にも使いはじめ、円安の折もあり月々のかかるコストが気になってきました。
毎月費用については確認していたのですが、各サービスごとに料金体系も異なり、サービスの中には実際のメトリクスを取らないと最適な料金プランが分からなかったりするものもあったりと、見直しにもそれなりの気合が必要です。
ここは年末の大掃除…と思ってコストの見直しを決意し、色々調べたところAWSマネージメントコンソールから利用できるmyApplicationという機能がいい感じそうだったのでご紹介したいと思います。
コスト配分タグ君ってさぁ…
#今回、コストの見直しをしようと思いまずはコスト最適化のベストプラクティスを調べてみました。
AWSから出されているホワイトペーパーのうち、AWSアーキテクチャ設計のベストプラクティスとしてAWS Well-Architectedフレームワークというものが公開されています。
このフレームワークは6つの柱によって支えられており、そのうちの一つにコスト最適化の柱があります。
コスト最適化の柱が示すベストプラクティスは5つあり、その中にクラウド財務管理を実施する
というものがあります。
クラウドとオンプレではそのコスト管理方法も異なってくるため、クラウドソリューションではそれに適した方法でコストの管理、最適化、計画を行います。
AWSではクラウド財務管理のためのフレームワーク(Cloud Financial Management (CFM))を公開しており、その中でCFMの実践にはまず「クラウド利用費用の可視化」が必要だとしています。
AWSサービスの利用量を可視化するには、一般的には以下のようなCost Explorerを使用するかと思います。
ただし、同一アカウント内の全リソースが一度に表示されてしまうため、例えばアプリAで使っているEC2ではいくら、アプリBで使っているEC2ではいくらコストがかかっている等、アプリごとにリソースを分けてコストを表示するにはコスト配分タグという機能を使う必要がありました。
このコスト分配タグ、リソースにタグをつけられる機能を利用したものであるため、これを使いたいリソース毎にコスト配分用のタグを作成し貼り付けていく必要がありました。
また、タグをつけただけでは機能せず、コスト配分タグのメニューからアクティベートをしなければ使えません。
Terraformなどを使ってIaC化を行っている場合そこまでかもしれませんが、マネージメントコンソールからタグ付けを行う場合これがかなり面倒で、リソースの数が増えればタグの付け漏れもおきやすくなります。
そんなちょっとアレなコスト配分タグ君に代わって、コストの可視化に使える機能がマネージメントコンソールのmyApplicationsです
myApplicationsを使ってみよう!
#myApplicationsはre:Invent2023で発表された機能です。マネージメントコンソールの一番目立つ所にいつの間にか↓のようなウェジットが追加されていましたが、ここから設定が行えます。
「アプリケーション」としてリソースをまとめ、まとめたリソース群ごとにコストが算出できるようになります。これでいちいちリソースにタグをつけて回る必要はありません。
早速試しにアプリケーションを作ってみましょう。「アプリケーションの作成」から進みます。
まずはアプリケーション名を付けます。今回は「sample_app」としました。
アプリケーションとしてまとめるために既存のタグやService Catalogの属性グループを使うこともできます。
その場合この画面下のオプションで指定しましょう。
次に進みます。
リソースの追加画面になります。ここで、Resuorce Explorerをアクティベートしていない場合は有効化をしておきましょう。
Resource Explorerはリージョン横断でリソースが検索できるサービスで、利用料金は無料です。[1]
リソースの追加には手動で追加する方法と既存のタグから追加する方法[2]がありますが、手動で追加する場合このResource Explorerを使用します。
Resource ExplorerではすべてのAWSリソースが検索できるわけではありません。例えばAPIGatewayではREST APIのみのサポートだったりします。検索できるサービスはこちらを確認してください。
Resource Explorerのアクティベートにはアグリゲータインデックスリージョンを指定する必要があります。どのリージョンにリソース情報を集めるかということですね。
今回東京リージョンを指定しました。ちなみにアグリゲータインデックスは1アカウントに1つまでしか作れません。
「リソースを選択」からアプリケーションに含めるリソースを追加していきます。リソースタイプ = ecs:service
のようにクエリキーワードでリソースを検索し、追加していきます。or条件で一気にリソースの検索ができないので1つずつ「追加」 → 「リソースの選択」でリソースを追加します。
リソースの追加が終わったらレビュー画面で確認して、「アプリケーションを作成」します。
無事リソースの追加が完了するとマネージメントコンソールに作成したアプリケーションが追加されます。
このリソースの追加では自動的にawsApplication
タグの付与が行われます。このタグのvalueはアプリケーションのARNです。厳密には後述しますがResource GroupsというリソースのARNになります。
私がアプリケーションの作成を試した際はタグの自動付与に失敗したリソースがありました。その際は直接当該リソースへこのawsApplication
タグを付与すればリソース一覧へ追加してくれます。
myApplicationsウィジェットではアプリケーションのコストのほか、アラームやメトリクスの表示もできます。
ちなみに、メトリクスの表示にはAmazon CloudWatch Application Signalsというこれまたre:Invent2023で登場したサービスを利用します[3]。料金は毎月初回10TBまでは0.35 USD/GBなので気にならない方はONにするといいかもしれません。
myApplicationsではタグ付けしてから遡ってコストを取得してくれるような機能はないようで、当月のコストは0 USDと予想されるコストも表示されていません。
この点でいえばコスト配分タグは最近のアップデートによって、タグ付けしてから12か月分の利用状況を遡って取得してくれます。myApplicationsでもバックフィルをリクエストできるようになるアップデートを待ちましょう。
作成したアプリケーションのコストをCost Explorerで表示したい場合は、myApplicationsウィジェットから飛ぶか、Cost Explorerの画面右側、フィルターの「タグ」でアプリケーションのawsApplication
タグを選択すればよいです。
myApplicationsで作られるアプリケーションの実体は?
#ここで気になるのはmyApplicationsで作られる「アプリケーション」とは具体的にどのようなリソースなのか?です。awsApplication
タグのvalueとしてアプリケーションのARNを指定しますが、これは前述したようにResource GroupsというリソースのARNになります。
Resource Groupsは文字通り複数のリソースをグループ化し管理するためのリソースです。myApplicationsはこのResource GroupsをService Catalogの力を借りて作成します。
myApplicationsウィジェットでアプリケーションを作成した際に作られるリソースは以下の3つです。
- Service Catalog App RegistryのApplication
- Resource Groups(AppTags)
- Resource Groups(Application) ←これが
awsApplication
タグのvalueで指定されるARNのリソース
myApplicationsで作成されるアプリケーションは端的に言ってしまえばService Catalog App RegistryのApplicationになります。実際にService Catalog App RegistryではmyApplicationsで作成したアプリケーションが表示されており、この画面からでもアプリケーションの作成が行えます。
Service Catalog App RegistryのApplicationはリソースをまとめるためにResource Groupsリソースを作成します。これにより、名前にそれぞれAppTags、ApplicationとつくResource Groupsが作成されますが、まとめられたリソースが紐づけられているのはAppTagsの方で、Applicationの方はAppTagsへの参照を持つだけです。
awsApplication
タグのvalueで指定されるARNのリソースはApplicationのResource Groupsリソースです。リソースをまとめているAppTagsのResource Groupsを直接紐づけて依存しないようにしています。
上記の内容はこちらの記事で詳しく解説されています。興味があればご覧ください。
おわりに
#簡単にアプリケーションごとのダッシュボードが作成できるmyApplicationsについてご紹介しました。アプリケーションを作成してすぐにはコストの表示ができないのが少し残念ですが、コストの可視化以外にも様々なウィジェットが作成できるため活用してみてはいかがでしょうか。
元々の目的であるコストの見直しは今回できなかったのですが、コスト削減法についても知れ、特にmyApplicationsと同じくre:Invent2023で発表されたThe Frugal Architectと呼ばれるコスト最適化における原則について勉強してみようと思いました。
Resource Explorerはこちらの解説記事で詳しく解説されています。([新機能] リージョン・サービスを横断してリソースを検索できる AWS Resource Explorer が使えるようになっていました - DevelopersIO) ↩︎
タグからリソースを追加する方法はこちらで解説されています。指定したタグをつけたリソースが新たに作られると自動的にアプリケーションのリソースへ登録してくれるそうです。([アップデート] myApplication でカスタムタグを使ったリソースの追加と、タグ同期機能によるリソースの自動追加が出来るようになりました - DevelopersIO) ↩︎
Amazon CloudWatch Application Signalsについてはこちら。(Amazon CloudWatch Application Signals 徹底解説 - Qiita) ↩︎