小ネタです。
AWSではBillingの設定で独自に定義したタグに対してコストを算出することができます。この機能によって例えば、プロジェクト毎やシステム毎のAWS料金を確認できるようになります。料金はAWS Cost Explorer か、Cost & Usage Report(CUR)というCSVファイルの詳細レポートから見ることができます。
参考: Using Cost Allocation Tags - AWS Billing and Cost Management
しかし、AWS料金を計算する上でやっかいなのがリザーブドインスタンス(RI)を適用した場合です。
RIを適用する条件(リージョン、インスタンスタイプ、AZなど)がマッチしてしまうと、どのリソースにRIを適用するかはAWS側に委ねられることになります。
例えば、 c5.large × 2 のEC2インスタンスが起動していてインスタンス名がAとBだとします。インスタンスA用に c5.large × 1のリージョナルRIを購入した場合、インスタンスBもRIの適用条件を満たしているとインスタンスBに割引料金が適用されてしまうこともあります。
そのインスタンスにどのRIを適用するかはAWS側が自動で割り当てているため、こちらで制御することはできません *1。
コストアロケーションによって、コスト配分したとしてもRIの適用次第では意図した金額とならない可能性があります。
CURによってRIを適用しないオンデマンド料金を算出する
CURの活用によって回避することが可能です。
例えば、上記の例の場合
- CURレポート項目
lineItem/ResourceId
とEC2インスタンスID(インスタンスA、B)がマッチ、かつlineItem/Operation
がRunInstances
のレコードを抽出する - オンデマンド料金を計算したいインスタンスB に対して
pricing/publicOnDemandCost
カラムの金額を合計する - RI適用済の料金を計算したいインスタンスAに対して 0円 *2とする
とすることで、インスタンスAはオンデマンド、インスタンスBはRI適用済として意図した金額になります。
最後に
CURにおける計算方法を紹介しましたが、正直面倒なのでできればAWSアカウントを分けられないかを検討した方が良いです。