AWSのコスト配分タグを正しく理解する

AWS運用自動化サービス「Cloud Automator」

CS課 佐竹です。

皆さん、AWSのリソースにはタグ付けされてますでしょうか。今回はタグ及びコスト配分タグについて、整理を目的に記載します。

はじめに

「コスト配分タグ」とは何でしょうか?英語では「Cost Allocation Tags」と記載されますこのタグは、AWS利用明細において、タグ別に利用料金を出力したい場合に利用します。例えばEC2 Instanceが100台構築されている場合でも、1台1台別のNameタグを付与しておけば、それぞれNameタグ別に利用料を出力することができます。非常に便利ですね。これは Cost Explorer においても有効であり、AWS利用料を正しく把握し運用するためには、タグの付与はもはや必須であると言えるでしょう。上の画像では、赤枠の中がコスト配分タグによって出力された明細になります。

今回は、正しくコスト配分タグをAWS利用料の明細に出力するにあたり、前提として理解しておくべき情報をお伝えします。

公式ドキュメントのリンク

先に「コスト配分タグ」に関する、AWS公式ドキュメントのURLリンクをご紹介します。


AWS ドキュメント » AWS Billing and Cost Management » ユーザーガイド » 使用状況とコストのモニタリング » コスト配分タグの使用

https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html

AWSのタグを理解する

さっそく、詳しく説明していきます。

リソースにタグを付与する

AWSリソースには、ユーザ独自のタグを付与することができます。今回は、代表的なサービスとしてEC2を例にとってご説明します。

上図のように、EC2 Instanceには、マネジメントコンソールからタグが付与可能です。タグは「Key」と「Value」のセットで定義されます。今回の例では

  • Key = Name
  • Value = WinServ2019Japanese(OraClient) 

というタグを1つ付与しています。今回は1つだけ付与していますが、タグは複数の付与が可能です。タグの利用においては制限がありますので、以下の公式ドキュメントをご参照ください。

タグの制限
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/Using_Tags.html#tag-restrictions

最初にご理解いただきたいポイントは以下の通りです。

  1. AWSのリソースには、ユーザ独自のタグを付与する機能がある
  2. タグはKeyとValueのセットで定義される

タグKeyをコスト配分タグとして有効化する

先ほどEC2に設定したタグですが、このままではAWSの請求明細には表示されません。請求レポートに設定したタグを表示するには、以下の対応が必要です。またこの対応を行うAWSアカウントは「請求を司るアカウント」である必要があります。つまり一括請求における「マスターアカウント」で設定が必要です。

マネジメントコンソールのBillingのページにおいて、左端のナビゲーションペインで「Cost allocation tags」 を選択しますと、上図の画面に遷移します。東京リージョンの場合「URLリンクはこちら」です。「User-Defined Cost Allocation Tags」の一覧に表示されているタグKeyから、アクティブにしたいタグKeyを選択し、「Activate」ボタンでアクティブ化します。なお、はじめてリソースに付与したばかりのタグKeyはこの一覧に表示されるまで時間がかかる場合もありますので、時間をおいてから再度実行してください。

ここで重要なのは、「一覧に表示されているタグから、アクティブにしたいタグKeyを選択する」という箇所です。つまり、コスト配分タグは「既に付与されているタグのKey」から選択することになりますので、全く利用されていないタグKeyをここで設定することはできません。先に「何らかのAWSリソースにタグを一度付与してから」設定をして頂く必要があります。

なお、Active化されているタグKeyはこのように表示されます。また参考までに公式ドキュメントのURLリンクを掲載します。

使用状況とコストのモニタリング » コスト配分タグの使用 » ユーザー定義のコスト配分タグ » ユーザー定義のコスト配分タグのアクティブ化
https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/activating-tags.html

なお、弊社 pieCe をご契約の場合は、特殊な場合を除きコスト配分タグのタグKeyは固定で以下が利用可能です

  1. Name
  2. Application
  3. Owner
  4. Category1
  5. Category2
  6. Category3

詳しくは、カスタマーポータルのヘルプページより「コスト配分タグの設定方法」をご確認ください。

ここでご理解いただきたいポイントは以下の通りです。

  1. 請求レポートにコスト配分タグを表示するには、マスターアカウントでタグKeyの有効化が必要である
  2. タグKeyの有効化では既存のタグKeyを選択するため、有効化したいタグKeyは予め付与しておく必要がある

コスト配分タグの種類

ここまでご説明してきましたのが、実は2種類あるコスト配分タグのうちの1つ「ユーザー定義のコスト配分タグ」と言われる機能です。コスト配分タグと言えば「ユーザー定義のコスト配分タグ」を指すことが大半だと思いますので、ここからも「コスト配分タグ=ユーザー定義のコスト配分タグ」という認識で記載を続けていきます。

念のためもう1つのコスト配分タグについてご説明しますと、「AWS 生成コスト配分タグ」という機能で、先ほどもご紹介しました設定画面より「Active」とすることが可能です。

ポイントです。

  1. コスト配分タグは2種類(AWS 生成コスト配分タグ / ユーザー定義のコスト配分タグ)存在する

タグ付与の対応可否

ここまで、AWSリソースにはタグの付与が可能であるという前提でお話をしてきました。しかし、実際にはAWSリソースにおいてはタグの付与が不可能なものもあります。どのサービスとリソースがタグの付与に対応をしているのか?というまとまった公式ドキュメントはありませんが、それに近い情報は以下で把握が可能です。

AWS Billing and Cost Management » ユーザーガイド » 使用状況とコストのモニタリング » コスト配分タグの使用 » ユーザー定義のコスト配分タグ
https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/custom-tags.html

上記URLリンク先に、以下の記述があります。

タグの実装は、AWS のサービスごとに異なります。これらの実装を個々に使用するか、タグエディターを使用してこのプロセスを簡素化することができます。タグをサポートするサービスの完全リストについては、「タグベースのグループでサポートされているリソース」およびリソースグループ タグ付け API リファレンスを参照してください。

この2つのURLリンク先を確認すれば、おおよそタグ付けが可能なリソースの把握が可能です。

具体的な確認方法ですが、まずは1つ目のURLリンクである、「タグベースのグループでサポートされているリソース」を確認します。この一覧には「サービス」だけではなく、各サービスの中の「リソース」まで言及し記載されているのが特徴です。この一覧にあるものは確実にタグの付与が可能です。ただし、この一覧にも抜けが現状存在します。例えば、Directory Serviceは掲載されていません。しかしDirectory Serviceへのタグの付与は「リソースグループ タグ付け API リファレンス」を見れば可能なことがわかります。しかし、「リソースグループ タグ付け API リファレンス」では「サービス」のみの記載となっており「リソース」が記載されていません。よって、各サービスのどのリソースが付与可能なのか、後者の資料だけでは判断できませんが、「タグベースのグループでサポートされているリソース」に未掲載のものがあった場合は、合わせて確認してみてください。
これらの資料に掲載されていないものにつきましては、実際に付与を試みてみるか、AWSサポートに確認が必要になります。

関連して記載しますと、マネジメントコンソールからタグの付与ができないものの、APIであれば付与可能なリソースもあります。先にあげたDirectory ServiceのDirectoryにはタグの付与が可能ですが、マネジメントコンソールからタグが付与できません。ちなみに、EC2のReserved Instanceも同様です。そのため、マネジメントコンソールからタグが付与できない=タグが付与できないと判断するのではなく、APIリファレンス等もあわせてご確認ください。

ここでご理解いただきたいポイントは以下の通りです。

  1. AWSリソースにはタグの付与が可能なものと不可能なものが存在する
  2. マネジメントコンソールからタグが付与できなくてもAPIであれば付与できるものがある

コスト配分タグの対応可否

先に「タグ付与の対応可否」について記載しましたが、「コスト配分タグの対応可否」という視点も必要です。理由ですが「タグが付与できるものの、コスト配分タグには対応していない」リソースが存在するためです。例えば「Tagging Your Amazon EC2 Resources」には以下の記載があります。

Elastic IP addresses that are tagged do not appear on your cost allocation report.

つまり、Elastic IPは「タグは付与できる」のですが「コスト配分タグ」には対応していないため「請求レポートには掲載されない」ということになります。このため「タグを付与したのに請求レポートに掲載されない」という場合は「コスト配分タグに対応しているかどうか」も確認が必要となります。なお、「コスト配分タグに対応しているかどうか」をまとめた公式ドキュメントは残念ながら存在せず、各サービスのドキュメントやAPIリファレンスを追う必要があるのが実情です。

ポイントです。

  1. AWSリソースにはタグの付与が可能だがコスト配分タグに対応していないリソースが存在する

タグ付与/コスト配分タグの対応可否 まとめ

先に記載しました2点をまとめて表にしますと以下の通りになります。

リソースにタグの付与が可能 リソースがコスト配分タグに対応 請求レポートへの反映
不可能 ×
可能 未対応 ×
可能 対応済

よくある質問

ここでは、コスト配分タグに関連した「よくある質問」について回答します。

質問1

Q. コスト配分タグを正しく設定したつもりですが、請求レポートに掲載されません

請求レポートに対応しているリソースにタグを付与しても、正しく請求レポートに掲載されない場合は以下の項目について確認をお願いします。

  • タグは大文字小文字を区別します。そのため、設定したタグKeyの大文字小文字が正しいかご確認ください。例えば「Name」タグKeyと「name」タグKeyは別のタグKeyとして判断されます。
  • 半角スペースがタグKeyの最後に含まれている場合、別のタグKeyとして判断されます。例えば「Name」タグKeyと「Name 」タグKeyは別のタグKeyとして判断されます。半角スペースがタグKeyに含まれていないかご確認ください。
  • 「ユーザー定義のコスト配分タグ」に「user:」というプレフィックスが付与されますが、これはAWSが請求レポートにおいて付与している表記です。タグKeyの設定においては「user:Name」ではなく「Name」をご利用ください。

質問2

Q. コスト配分タグを付与しましたが、請求明細が「タグが付与されていないもの」と「タグが付与されたもの」と2つに分離しています。何故ですか?

  • コスト配分タグは、タグを付与したタイミングから有効になります。そのため、利用月の途中から付与した場合は「タグが付与されていないもの」と「タグが付与されたもの」と2つに分離されることになります。また、月の途中に付与したとしても、月初に遡って利用料金にコスト配分タグが付与されることはありません。タグの付与を行った翌月からは「タグが付与された項目1つ」にまとまります。
  • 月の途中にタグを変更した場合、その月の請求明細は「変更前のタグが付与されたもの」と「変更後のタグが付与されたもの」とに分離されることになります。

質問3

「ユーザー定義のコスト配分タグ」の対応タグKeyに、新しいタグKeyを追加したいですがどのようにすればいいですか?

  • お客様がマスターアカウント管理されている場合は、マスターアカウントから設定の追加が可能です。「タグKeyをコスト配分タグとして有効化する」の章をご確認ください。
  • pieCe をご利用の場合は先に記載しました「6つタグKey」のみが対応しております。場合によっては追加が可能な場合もございますため、担当営業までご連絡ください。

質問4

リソースを管理する部署名が変更になり、多くのリソースのタグ値をまとめて修正する必要が出ました。タグをまとめて編集する方法はありますか?

  • タグエディタ」をご利用ください。タグエディタでは、リソースに付与されたタグの値をまとめて編集が可能です。タグエディタの実際の画面は以下の通りです。

マネジメントコンソールのリソースグループから、タグエディタを起動します。

変更したいリソースを表示し、全て選択した状態で「タグの編集」を実行すると、上図の通り「選択された全てのリソースのタグを一括編集する」画面が表示されます。こちらの画面より一括編集を実施ください。

質問5

タグの付与を強制するにはどのようにすればいいですか?

  • Cloud Automatorの「構成レビュー」を利用することでタグ付与を行っていない場合に通知を行う設定が可能です。例えば「全てのEC2インスタンスは指定されたキーのタグが付与されていること」や「全てのDBインスタンスは指定されたキーのタグが付与されていること」などの設定が簡単に行えます。詳細は「構成レビュー」のURLリンク先をご確認ください。
  • AWSで同設定を行う場合、AWS Configにて設定を行います。具体的には「マネージドルール」内の「required-tags」を利用します。Rulesからrequired-tagsを検索し、設定を行ってください。詳細な設定方法はこちらでは割愛致しますが、CloudWatch EventsとLambda、そして修正アクションを紐づけることで自動的にリソースの修正までを行うことも可能です。

AWS Config ルールを使用してコンプライアンス違反のリソースを修正する
https://aws.amazon.com/jp/about-aws/whats-new/2019/03/use-aws-config-to-remediate-noncompliant-resources/

まとめ

今回の記事ではコスト配分タグについて詳しく記載しました。また、よくある質問の回答も記載しておりますので、合わせてご参考ください。このようにコスト配分タグ1つとりましても、理解すべき前提条件が多く、活用には少々ハードルがある印象かもしれませんが「タグを制するものは請求を制する(佐竹談)」ということでAWSの請求状況を正しく把握されるためには是非ご理解頂きたい機能となっております。

最後に、今回の記事で記載しましたポイントを以下にまとめました。

  1. AWSのリソースには、ユーザ独自のタグを付与する機能がある
  2. タグはKeyとValueのセットで定義される
  3. 請求レポートにコスト配分タグを表示するには、マスターアカウントでタグKeyの有効化が必要である
  4. タグKeyの有効化では既存のタグKeyを選択するため、有効化したいタグKeyは予め付与しておく必要がある
  5. コスト配分タグは2種類(AWS 生成コスト配分タグ / ユーザー定義のコスト配分タグ)存在する
  6. AWSリソースにはタグの付与が可能なものと不可能なものが存在する
  7. マネジメントコンソールからタグが付与できなくてもAPIであれば付与できるものがある
  8. AWSリソースにはタグの付与が可能だがコスト配分タグに対応していないリソースが存在する
リソースにタグの付与が可能 リソースがコスト配分タグに対応 請求レポートへの反映
不可能 ×
可能 未対応 ×
可能 対応済

ここまでお読みいただきありがとうございました。
これから毎日暑い日々が続くようですが、体調にはお気をつけください。

AWS運用自動化サービス「Cloud Automator」