目次
AWSから発行されるInvoiceの情報をマネジメントコンソールからポチポチ取得するのではなく、APIで取得したい。
上記の要望は、だいぶ昔から各所で言われているのを見かけていましたが。
2025年6月6日、下記のリリースが発表されました。
AWS Invoice Summary API is now generally available
ListInvoiceSummaries
といったAPIがリリースされ、こちらのAPIを利用するとInvoiceのサマリが取得できるようです。
一部の人たちにとっては待望な機能かと思います。
今回、こちらのAPIを利用してみたので説明します。
利用するaws-cli v2のバージョンについて
今回、ListInvoiceSummariesのAPIを実行するのが目的ですが、本記事ではAPIを直接叩くような事はせず、aws-cli v2で提供されるコマンドを利用して実行しています。
なお新しくリリースされた機能なので、念のため該当のAPIを操作するコマンドがaws-cli v2で提供されているか確認してみます。
上記のaws-cli v2のCHANGELOGを確認すると、バージョン2.27.29に
api-change:invoicing: Added new Invoicing ListInvoiceSummaries API Operation
と記載がありました。 aws-cli v2のバージョンが2.27.29以上ならListInvoiceSummariesを操作するコマンドが用意されていそうです。
またaws-cli v2のinvoicingサービスのドキュメントを確認すると、list-invoice-summariesといったコマンドが用意されており、これが追加されたコマンドのようです。
このため本記事で紹介するコマンドを実行する場合は、aws-cli バージョンを2.27.29以上にアップデートして実行してください。
なおv1の場合は、1.40.29で追加されてました。
今回実行している環境
- Windows 11 24H2
- PowerShell 7.6.0-preview.4
- aws-cli/2.27.34 Python/3.13.3 Windows/11 exe/AMD64
aws invoicing list-invoice-summaries のドキュメントを確認してみる
aws-cli v2 - list-invoice-summaries
コマンドを実行するにあたって、まずはドキュメントを確認します。
Synopsis
Synopsis をみるとlist-invoice-summariesコマンドを実行するに必須オプションは--selector <value>
と記載がありました。
Options
Options をみると、selectorの記法は ResourceType=string,Value=string
と記載すればよさそうな事がわかります。
またselectorで指定するResouceTypeは INVOICE_ID or ACCOUNT_ID とふたつの切り口がありました。
本記事ではそれぞれ実行していきます。
ResouceType を INVOICE_ID で実行してみる
請求書番号については、適時、マネジメントコンソールから確認などして該当するものに読み替えて実行してください。
aws invoicing list-invoice-summaries --selector "ResourceType=INVOICE_ID,Value=<<請求書番号>>" --output json
実行すると、上記のようにInvoice情報が取得できました。
ResouceType を ACCOUNT_ID で実行してみる
# 実行するとエラーになる
aws invoicing list-invoice-summaries --selector "ResourceType=ACCOUNT_ID,Value=<<アカウントID>>" --output json
実行すると上記のようにBillingPeriod and TimePeriod cannot both be null when retrieve invoice summary by account ID
とエラーが表示されました。
エラーメッセージを読むと、ACCOUNT_IDを指定する場合はfilterオプションにある、BillingPeriodとTimePeriodが両方nullだとダメだったようです。
ここでは下記のようにBillingPeriodを2025年05月を指定して対応します。
aws invoicing list-invoice-summaries --selector "ResourceType=ACCOUNT_ID,Value=<<アカウントID>>" --filter "BillingPeriod={Month=05,Year=2025}" --output json
filterオプションでBillingPeriodを指定したところ、今度はエラーが起こらず下記のように結果が返ってきました。
なおfilterオプションの記法のようになっていました。
出力される構造についてPDFと比較してみる
出力される構造についてはドキュメントのoutputに記載がありますが、ここではコマンドの実行結果とPDFのInvoiceを見比べて、どのような項目が取得できるのか確認してみます。
TotalAmount
BaseCurrencyAmountのTotalAmountが請求総額になっており、PDFのTOTAL AMOUNTと一致していました。
AmountBreakdown
BaseCurrencyのAmountAmountBreakdownでPDFのInvoice Summary
に相当する金額が表示されていました。
CurrencyExchangeDetailsのRate
CurrencyExchangeDetailsのRateでPDFの為替レートが記載されていました。
サマリーの粒度について
今回のリリースをみて、サマリーって言われているが、どの程度サマリーした情報が取得できるのかと気になっていましたが。
PDFのInvoice Summary
相当のデータまでしか取得できず、アカウント単位のサマリやサービスごとのサマリなどは出力構造には存在していませんでした。
このためPDFには記載のある、サービスごとのサマリーやアカウントごとのサーマリーといった単位では情報を取得する事はできませんでした。
総評
AWS から発行されるInvoiceのサマリーがついにAPIで取得できると聞いて、実行してみました。
実行したところInvoiceのトータル金額、為替レートの取得には利用できそうです。
ただし、サマリーの単位としてアカウント単位やサービス単位のデータは構造として持っていないので、そこらへんを確認したい場合は、相変わらずマネジメントコンソールの請求画面やPDFを確認する必要があります。
この点については将来的にInvoiceのDetailを取得できる機能が追加される事を期待したい所です。