顧客フロントSEのIT勉強ブログ

2022 Japan AWS Top Engineer / 2022-23 Japan AWS Certifications Engineer。AWS認定12冠、情報処理試験全冠。顧客フロントSEがなるべく手を動かしながらIT技術を学んでいくブログです。

AWS Billing Conductor+Savings Plansの請求運用方法

こんにちは、大石(@se_o_chan)です。
AWS Billing Conductorというサービスをご存じでしょうか。特にSIer、CIerにとっては助かるサービスなのですが、あまり使用事例がないようで情報が少ないのが実情です。
今回は個人的に神機能だと思っているAWS Billing Conductor+Savings Plans」の請求運用をご紹介します。Organizations管理者にとってもLinkedアカウント利用者にとってもWin-Winな運用を実現できます。

AWS Billing Conductorとは

 AWS Billing Conductorとは、AWS Organizations管理下のマルチアカウント環境においてLinkedアカウントの請求書の見え方をカスタマイズするサービスです。

 下図のようにSIerやCIerなどがAWSアカウントを顧客に提供していて、1つのOrganizations管理下に複数のコスト管理者がいる場合にとても有効です。

管理アカウントでは全アカウントの請求額を横断して閲覧できますが、これを各Linkedアカウントの利用者に公開してしまうと自分がコスト管理していないアカウントの請求額まで閲覧できることになってしまいます。かといってアカウント数が増えると、1つ1つの請求額をBillingコンソールを開いて確認するのは面倒です。
Billing Conductorを使えば、Linkedアカウントを複数の請求グループにまとめ、請求グループごとの合計額をCost Explorerや請求書で確認することができるようになったり、独自の請求明細レコードを登録することができます。

 過去にBilling Conductorについてまとめた記事があるので、詳細はそちらをご参照ください。
frontse.hatenablog.jp

Savings Plansはアカウント間でどう共有される?

 上記のようなOrganizationsでマルチアカウント管理を行うメリットとして、リザーブインスタンスやSavings Plansのマルチアカウント共有があります。OrganizationsでSavings Plansを購入すれば、1つのアカウントではコミット額に満たず捨ててしまうケースでも、他のアカウントへ自動的にSavings Plansが適用され、効率的な運用が行えます。

 Organizationsの管理アカウントの「Billing and Cost Management」から請求設定に遷移すると、リザーブインスタンスおよびSavings Plansの割引共有設定があります。これを全アカウントに対して有効にしておけば、とあるアカウントで購入したSavings Plansが組織全体で共有されます。

 ではBilling Conductorを利用している環境下でLinkedアカウントがSavings Plansを購入した場合、どう共有されるのでしょうか?せっかくBilling Conductorで請求分離しているのに、購入したSavings Plansがアカウントをまたいで相互に影響しあってしまいそうです。

いきなり結論ですが、いわゆる「二重帳簿」のような形になり、実際にAWSへ費用を支払うOraganizations管理者と、各Linkedアカウントの利用者から見える請求額が違って見えるようになります。つまり、

  • Organizations管理者から見ると、管理アカウントで定めた割引共有設定に応じて全アカウントでSavings Plansが共有される
  • Linkedアカウント利用者から見ると、自分が属する請求グループにのみSavings Plansが共有される

となります。Billing Conductorは実際の請求額(=Organizations管理アカウントが支払う金額)には影響を及ぼさず、あくまでLinkedアカウントからの「見かけ上の請求額」だけを整えてくれるのです。

管理者にとっては「できる限り無駄なくSavings Plansを使い切ってAWSへの支払額を減らしたい」でしょうし、Linkedアカウント利用者にとっては「自分が購入したSavings Plansを勝手に知らないアカウントに適用されたくない」でしょう。双方の希望を満たす、まさに神機能と言えます!!

実機検証してみる

 では本当にそうなるのか試してみます。Oraganizations管理アカウント配下に3つのLinkedアカウントを用意し、Billing Conductorで請求グループを2つ作ります。Linkedアカウントの名称を「Group1-1」「Group1-2」「Group2-1」とします。

管理アカウントでは全アカウントに対してSavings Plansの割引共有設定を有効にしておきます。そのうえでGroup1-1でCompute Savings Plansを購入し、Group1-2とGroup2-1でそれぞれEC2インスタンスを起動します。

すると管理アカウントから見れば組織全体でSavings Plansが共有されるが、Group1-1やGroup1-2から見れば請求グループ1でのみSavings Plansが共有され、Group2-1から見ればオンデマンドで請求されているように見えるはずです。

Group1-1の請求額

 では、各アカウントの請求額を確認します。Group1-1は請求グループ1のプライマリアカウントであるため、Group1-2の請求額も閲覧できます。自身が購入したSavings Plansの前払い額(=$175.20)も確認できますし、Group1-2にはSavings Plansが適用されて請求額が0になっていますね。

Group1-2の請求額

 Group1-2はプライマリアカウントではないので、自分自身の請求額だけが確認できます。別アカウント(=Group1-1)で購入したSavings Plansですが、同じ請求グループに属しているのでちゃんと適用されていますね。

Group2-1の請求額

 Group2-1は別請求グループに属しているので、Savings Plansが適用されず、オンデマンドで請求されています。

管理アカウントの請求額

 最後にOrganizations管理アカウントで見ると、Group1-2のEC2はもちろん、先ほどは適用されていなかったGroup2-1のEC2にもSavings Plansが適用され割引されています。これが実際にAWSに支払う料金であり、Group1-1や2-1で見えている請求額はあくまで「見かけ上」のもの、つまり「二重帳簿」のような状態になっていると言えます。

使用状況グラフの値は要注意

 あたかもSavings Plansの適用範囲を請求グループ内に閉じているかのように見せてくれるBilling Conductorなのですが、1点注意があります。それは「Savings Planの使用状況グラフでは、実際の使用率が表示されてしまう」ということです。

 下図はGroup1-1における使用状況レポートです。本来Group1-1から見ると、$0.02/hrのコミット額に対してGroup1-2の$0.0096/hrしか使用していないので使用率=48%のはずですが、このグラフでは使用率=87%となっています。

これはGroup2-1に適用された$0.0078/hrも含んでしまっているからで、($0.0096+$0.0078)÷$0.02=87%となります。Group1-1や1-2の利用者にとって、自分が購入したSavings PlansがGroup2-1に適用されていることは知らないはずで、このグラフには含めてほしくないところです。実際に運用する場合は、このグラフの見せ方・使い方は検討が必要となるでしょう。

まとめ

 Billing Conductorを使用している環境下において、Savings Plansがどのように共有されるのかを整理しました。2024年3月現在、Billing Conductorの利用者が少ないのか日本のAWSサポートでもあまり確かな情報が無いようで、アメリカ本国にも問い合わせたり、実機検証して動きを確認しました。 どなたかの参考になれば幸いです。