AWSの一括請求に関するアレコレ

# 一括請求(Consolidated Billing)とは？

複数のAWSアカウントの請求を1つのアカウントに紐付けて請求を一本化する機能です。
主に複数プロジェクトを抱える組織などで便利な機能だと思いますが、これを活用することで受けられるメリットもいくつかあるので覚えておくと良いです。

一括請求に関する詳細は、[公式ドキュメント](http://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/about/consolidatedbilling.html)や、ぐぐれば他にもっと手順や何やらを詳しく説明しているサイトがあるのでそっちを見てください。

ここはそれらのざっとググった情報からは見つけることが出来なかった、一括請求に関する細かい点を調査して補足するメモです。前半にざっとメリットなども書いてますが、 **後半の「注意点」以降がこの記事のメイン** です。

# メリット

## 請求を1箇所にまとめられる

一番よくある活用方法は、プロジェクトや顧客ごとに新規AWSアカウントを作って分けて使うことでしょう。こうすることでプロジェクト毎の利用額が全体に混ざること無く単体プロジェクト毎の利用額が簡単に把握できて便利です。
しかも一括請求が設定してあれば親のアカウントに全請求が合算されて便利です。

あとは、子アカウント利用者に対して、請求に関する情報を秘匿できるのが嬉しいというケースもあるかもしれません。


## ボリューム割引が全アカウントの合計で適用される
データ転送量の合計とかRI購入額とかいろんな部分にボリューム割引というものが設定されています。
個別のアカウント毎にはボリューム割引を受けられる量を使っていなくても、一括請求を設定することで全アカウントで合算をもとにボリューム割引が受けられるようになるというメリットがあります。

ただ、どのボリューム割引も結構半端無い額を使ってる場合にしか用はありません。月に高々数万～数10万程度の利用額だとまだあんまり関係ないですね…。


## リザーブドインスタンス(以下RI)の未使用時間分の割引価格を他アカウントに適用出来る

親Aの下に子B,Cが一括請求設定でぶら下がっており、子BがRIを購入してた場合は以下のように割引価格が適用されます。基本的にはRI所有者がまず最優先で割引料金を適用されて、所有者がRI適合インスタンスを使っていない残りの時間分だけ

Q1. 子Bが月100%の時間、RI条件に一致するインスタンスを使った場合
A1. 子Bは月100%分の割引料金が適用される。親Aや子BはRI条件に一致するインスタンスを使っていても全てオンデマンド価格が出来用される。

Q2. 子Bが100時間だけ、子Cが月100%の時間、RI条件に一致するインスタンスを使った場合
A1. 子Bは100時間分の割引料金が適用される。子Cは100時間分だけオンデマンド料金が適用され、残りの時間は割引料金が適用される。

Q2. 子Bが100時間だけ、親Aと子Cが月100%の時間、RI条件に一致するインスタンスを使った場合
A1. 子Bは100時間分の割引料金が適用される。親Aと子Cは50時間分ずつだけオンデマンド料金が適用され、残りの時間は割引料金が適用される。




# 注意点／細かい仕様

ドキュメントからは見つけることが出来なかった、または曖昧な表現を、独自に調査したり問い合わせてまとめたのがここに上げる注意点です。

## 無料利用枠は合算されません

新規アカウントが3つぶら下がってたとしても、月にt1.microを3つ分を無料でフル起動するようなことは出来ません。全アカウント通して1アカウント分の無料枠しか適用されません。

まぁ、これは普通に一括請求のドキュメントにも書いてあるのであえてここで上げる必要は無いかなと思ったけど一応。


## RIのキャパシティ予約はRI購入アカウント以外には適用されない
RI購入アカウント以外のアカウントでは、キャパシティ予約（処理能力の予約）は効きません。アカウント間で融通可能なのは割引料金に関してのみです。

まぁ、これも普通に一括請求のドキュメントにも書いてあるのであえてここで上げる必要は無いかなと思ったけど一応。


## RIの割引メリットの共有が、アカウント間でAZ名が一致しない場合は使えないことがある
まず前提としてアカウント毎にAZ名のリストが一致しないことがあることを抑えておきましょう。
[AWSの複数アカウントのAZ名の対応を調査する - Qiita [キータ]](http://qiita.com/kawaz/items/cecab993f2180c07db5f)

で、これに絡んでRIの割引メリットの融通が出来ない以下の様なケースもあるので注意しましょう。

アカウントAのus-east-1のAZリストが us-east-1a, us-east-1b, us-east-1d の3つで、
アカウントBのus-east-1のAZリストは us-east-1b, us-east-1c, us-east-1d の3つになっているケース。
つまり、アカウントAにあるus-east-1aがアカウントBには無い場合です。

このケースの場合、アカウントAがus-east-1aで購入したRIの割引メリットは、どうやってもアカウントBで使うことは出来ません！（us-east-1bとus-east-1dは両者に共通してあるAZなのでここで購入したRIは割引料金の融通が可能です）

**購入したRIに書いてあるAZ名**、これが一致することが余ったRI割引メリットを他アカウントで受ける条件です。なのでRIのAZ名が自分のアカウントにない場合は割引メリットの恩恵をうけることは出来ません。

これはもうそういう仕様です。運が悪かったと諦めましょう。

サポートにも問い合わせて確認済みです。


## AWSクレジットは~~そのクレジットの所有アカウントでしか使えない~~→__全アカウント分を合算して使える。__
__追記：下記はそれぞれ自分でも試しつつAWSのサポートにも確認して得た回答だったんですが、当時の確認に間違いがあったのかいつの間にか仕様が変わったのか…、少なくとも現在は全アカウントのクレジットが合算して使えてるようです。__


[一括請求（コンソリデーティッドビリング） - AWS Account Billing](http://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/about/consolidatedbilling.html#consolidatedbilling-credits) の「AWSクレジット」のセクションには以下のようにさらっと書いてあります。

> 支払いアカウントの所有者への請求が最低価格で済むように、支払いアカウントおよび連結アカウントが持つすべての AWS クレジットは一括請求（コンソリデーティッドビリング）に適用されます。

これを読むとRIの余った割引メリットの共有と同じように、全アカウントのもつAWSクレジットが合算されて一括請求に適用され~~るかのように読めますが、それは間違いのようです。AWSクレジットはそれの各所有アカウントで発生した料金にしか適用されません。~~→__合算して適用されます！__

以下に具体的な例をいくつかあげておきます。

### Q1. 一括請求の子が親のクレジットを使えるのでしょうか？

~~使えません。~~
→__使えます。__

### Q2. 一括請求の親が子のクレジットを使えるのでしょうか？

~~使えません。~~
→__使えます。__

### Q3. 親と子が$50ずつのクレジットを持っており、子が$75の利用料を発生させた場合、それぞれのクレジットはどのように消費されるのでしょうか？

~~子の\$50クレジットが消費されて、親に$25の請求が行きます。親の\$50クレジットはそのままです。~~
→__子の\$75は全てクレジットから支払われ、請求額は\$0になります。
また、両クレジットの有効期限が同じなら子のクレジット残高がゼロ、親のクレジット残高が\$25になります。ですが有効期限が異なる場合は期限が近い方のクレジットから順に消費されます。例えばこのケースで親のクレジット期限の方が短ければ親のクレジット残高がゼロ、子のクレジット残高が\$25になります。__

### Q4. 一括請求の親Aの子Bがクレジットを持っており、子CがAWS利用料を発生させた場合、子Bのクレジットは使えるのでしょうか？
~~使えません。~~
→__使えます。__

### Q5. 合算して使えるって言うから試したのにクレジット使われなかったんだけど！？
一括請求のアカウント統合をした当月分の請求に関しては残クレジットのアカウント間の融通は行われません。ただし翌月以降の請求に関しては互いのクレジットを消費し合えるようになるようです。

ドキュメントなどはありませんが色々試した結果そういう仕様のようです。

実は最初の頃にクレジット融通は出来ないっぽいと判断したのはこれが理由の検証ミスだったんじゃないかと思います。またサポートに問い合わせたときの回答も1ヶ月位かかった上で出来ませんという答えだったので、あちらでもサポートの人が実際にアカウントを作って挙動を確認したうえで回答してくれたんだと思います。サポートの人の誤回答も多分も初月の結果だけを見たて判断してしまったが故のものとと思われます。

## 作成から2週間以内のアカウントは統合~~できない~~ →出来る
~~昔はこんな制限なかったと思うが、最近出来た制限のようだ。
作ったばかりのAWSアカウントを一括請求の子として追加しようとすると以下の様なエラーが出る。（エラーメッセージコピペし忘れた…？）~~

→最近試したら、作ったばかりのアカウントもすぐに統合できた。AWS側のポリシーがその時々でこっそり変わったり戻ったりしてるのかもしれません。アンドキュメントでAmazonの機嫌しだいの部分なので、まぁ参考程度に…。

## 連続で複数アカウントを作成・統合してるとエラーになる
普通はこんなことする人は少ないだろうけど、大量のアカウントを作って一括請求に統合しようとすると７，８アカウント分くらい(?)の作業した時点でエラーになる。

多分自動化ボットとかによる悪事防止策だと思います。
一応半日か1日くらい待てば制限解除されるようなので、地道に毎日少しずつアカウントを作っては統合してを繰り返せば最終的には目的達成できます。

ちなみに上記行為は利用料を綺麗に分けたいために案件毎にアカウントを分けて請求は纏めるということをしたかったという正当な目的による作業をしていて分かったことです。なお一括請求アカウントはデフォルトで20アカウントまでの制限がありますが、サポート経由で理由を話してお願いすると結構あっさり100とかに上げてもらえます。