AWSタグをCost Explorerと連携させるVPC費用配分設計|マルチAZ冗長構成の実例

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > AWS(Amazon Linux) > AWSタグをCost Explorerと連携させるVPC費用配分設計|マルチAZ冗長構成の実例
「AWSを使い始めてコストが上がったのはわかるが、どのリソースがどのプロジェクトの費用なのかまったく把握できない」

マルチAZ冗長構成でEC2やRDSを展開すると、同一リージョンに複数のサブネット・インスタンス・ロードバランサーが並ぶため、費用の帰属先が曖昧になりやすい。複数のシステムを同一AWSアカウントで動かしていれば、なおさらです。

この記事では、AWSタグをCost Explorerと連携させてプロジェクト別・環境別のコストを可視化する方法を解説します。Amazon Linux 2023を使ったマルチAZ VPC構成を想定環境として、実践的なタグ設計と費用配分設計の手順をまとめます。

この記事のポイント

・AWSタグはリソース作成時に設計しないと後から修正が困難
・Cost Explorerはタグ有効化(Cost Allocation Tags)が必要
・マルチAZのVPC設計ではNAT GW・ALBにもタグが必須
・SCPでタグ付け忘れをポリシーとして防止できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

AWSタグがないと起きる「コスト迷子」問題

AWSタグ(Tag)は、EC2・RDS・VPCサブネット・NATゲートウェイなど、ほぼすべてのリソースに付けられるキーと値のペアです。このタグをコスト配分(Cost Allocation)の軸に設定することで、「このEC2クラスターは本番環境の費用」「このRDSはプロジェクトAの費用」と費用を仕分けられます。

タグ設計なしのAWS環境でよくある問題:
・月末のコストレポートで明細の合計額はわかるが、部門別・プロジェクト別の按分ができない
・NATゲートウェイのデータ転送費用がどの環境から発生しているのか追えない
・マルチAZ構成で同じリージョンに複数のAZへリソースが並ぶと、どのAZのどのリソースか特定が難しくなる

AWSタグの付与は無料で、タグ自体のAPI呼び出し回数制限も通常の運用では問題になりません。タグ設計を最初にしておくかどうかで、後のコスト管理の精度が大きく変わります。

Cost Explorerで使えるタグの設計原則

Cost Explorerでタグ別にフィルタリングするためには、マネジメントコンソールの「コスト配分タグ(Cost Allocation Tags)」として有効化する手順が必要です。すべてのタグが自動でフィルターに使えるわけではない点に注意してください。

1. タグの命名規則を決める

命名規則の統一がなければ、後からタグを使った集計ができません。推奨のキー設計:

・Env:環境区分(production / staging / development)
・Project:プロジェクト名またはシステム名(例: webapp-a)
・CostCenter:部門コード(経理部門と連携する場合)
・ManagedBy:管理方式(例: terraform / manual)
・Owner:担当チームや担当者(例: infra-team)

キー名は小文字とハイフンで統一するか、Pascal Caseで統一するかを最初に決めます。混在させると後のフィルターで一致しなくなります。

2. タグを付けるべきリソースの範囲

コスト配分に直結するリソースには必ずタグを付けます:

・EC2インスタンス(インスタンスタイプ別のコストが最大の比重)
・RDS・Aurora(マルチAZ構成はスタンバイ側も同じタグ)
・EBS(EC2に紐づくが独立して課金される)
・ELB・ALB(マルチAZ展開時はAZ間トラフィック料金も発生)
・NATゲートウェイ(AZ毎に1つ配置するマルチAZ構成では特に重要)
・VPCそのもの(直接課金はないが管理の基点として付けておく)

Cost Allocタグを有効化してフィルター対象にする手順

1. マネジメントコンソールで有効化する

AWSコンソール → 「Billing and Cost Management」→「Cost allocation tags(コスト配分タグ)」の順に開きます。リソースに付けたタグの一覧が表示されるので、Cost Explorerで使いたいタグキーを選択して「有効化」をクリックします。

有効化後のデータ反映には最大24時間かかります。過去のコストデータにもさかのぼって表示されますが、タグを付ける前に存在したリソースの利用費は「タグなし」として表示されます。

2. AWS CLIでタグの有効化状態を確認する

# Cost配分タグとして有効化されたタグキーの一覧を確認する aws ce list-cost-allocation-tags \ --status Active \ --tag-type UserDefined \ --query 'CostAllocationTags[*].{Key:TagKey,Status:Status}' \ --output table

出力例(環境により異なります):

----------------------------------------- | ListCostAllocationTags | +-------------+-------------------------+ | Key | Status | +-------------+-------------------------+ | Env | Active | | Project | Active | | ManagedBy | Active | +-------------+-------------------------+

3. Cost ExplorerでタグキーをGroupByに指定する

AWSコンソール → Cost Explorer → 「コストと使用状況」で「グループ基準」に先ほど有効化したタグキー(例: Project)を指定します。すると各プロジェクト別の月次コストの棒グラフが生成され、どのプロジェクトがどれだけのコストを使っているかが一目でわかります。

マルチAZ VPCのリソースにタグを体系的に設計する実例

ここでは本番環境(production)でマルチAZ冗長構成をとるWebアプリケーション「webapp-a」を例に、VPC設計とタグ設計を示します。

AWSのマルチAZ冗長構成設計の詳細な考え方については、AWSマスターセミナー上級編のページで解説しています。ここではコスト配分に特化したタグ設計を取り上げます。

1. VPCとサブネットのタグ設計

# VPC本体 VPC名: webapp-a-vpc タグ: Name = webapp-a-vpc Env = production Project = webapp-a ManagedBy = terraform # パブリックサブネット(AZ-a) Name: webapp-a-public-a タグ: Name = webapp-a-public-a Env = production Project = webapp-a SubnetType = public # パブリックサブネット(AZ-c) Name: webapp-a-public-c タグ: Name = webapp-a-public-c Env = production Project = webapp-a SubnetType = public # プライベートサブネット(AZ-a) Name: webapp-a-private-a タグ: Name = webapp-a-private-a Env = production Project = webapp-a SubnetType = private

2. NATゲートウェイへのタグ設計(マルチAZ)

マルチAZ構成ではNATゲートウェイをAZ毎に配置します。NATゲートウェイはデータ処理料金とElastic IP料金が別途発生するため、タグで明示的に管理します。

# NATゲートウェイ(AZ-a用) タグ: Name = webapp-a-nat-a Env = production Project = webapp-a AZ = ap-northeast-1a # NATゲートウェイ(AZ-c用) タグ: Name = webapp-a-nat-c Env = production Project = webapp-a AZ = ap-northeast-1c

3. Terraformでのタグ付け実装例

Terraformで管理する場合はリソース定義にタグブロックを含めます。

# Terraformでのタグ付け例(main.tf) resource "aws_instance" "web" { ami = "ami-0abcdef1234567890" instance_type = "t3.medium" subnet_id = aws_subnet.private_a.id tags = { Name = "webapp-a-web-01" Env = "production" Project = "webapp-a" Role = "web" ManagedBy = "terraform" } }

Terraformを使っていない場合は、AWS CLIでタグを付与できます。

# 既存のEC2インスタンスにタグを付与する aws ec2 create-tags \ --resources i-1234567890abcdef0 \ --tags Key=Env,Value=production \ Key=Project,Value=webapp-a \ Key=Role,Value=web

Amazon Linuxを使ったAWSサーバーの初期構築については、AWSとAmazon Linuxの入門ページも参考にしてください。

タグを使ったコスト配分でよくあるミスと注意点

1. 起動後にタグを付けてもEBSスナップショットに反映されない

EBSスナップショットはスナップショット自体を個別にタグ付けする必要があります。AWS BackupでタグコピーポリシーをONにしておくと漏れを防げます。

2. Cost配分タグが「Inactive」と表示されてフィルターできない

マネジメントコンソールで有効化しても、過去60日以内にそのタグを持つリソースの課金が発生していない場合は「Inactive」と表示されます。新しいタグキーは有効化後にリソースの利用が発生してから反映されます。

3. AWS管理タグ(aws:接頭辞)は利用に制限がある

AWSが自動付与する「aws:createdBy」「aws:cloudformation:stack-name」などのタグはCost Allocタグとして有効化できますが、ユーザーが直接編集・削除することはできません。仕様変更で取得できなくなるリスクも念頭に置いて運用してください。

4. タグの付け忘れを防ぐSCPの活用

AWS Organizationsを使っている場合は、SCPで「特定のタグなしにEC2を起動できない」ポリシーを設定できます。タグ設計の実効性を担保するには、ポリシーによる強制が最も確実です。

本記事のまとめ

AWSタグをCost Explorerに連携させるための手順と、マルチAZ VPC構成での実践的なタグ設計をまとめます。
やりたいこと 設計・操作
Cost Explorerでタグ別にフィルター Cost Allocation Tagsで対象キーを有効化
タグキーの有効状態を確認 aws ce list-cost-allocation-tags --status Active
既存EC2にタグを付与 aws ec2 create-tags --resources インスタンスID --tags Key=...,Value=...
マルチAZのNAT GWをProject別に管理 AZ毎にNameタグとProjectタグを個別に付与
タグ付け忘れを防止 AWS Organizationsを使うSCPで必須タグをポリシー化
AWSタグによるコスト配分設計は、マルチアカウント・マルチプロジェクト環境では特に重要です。タグを後から付け足すとコスト履歴に空白が生じるため、VPC設計と同じタイミングでタグ命名規則を決めておくことが最大のポイントです。

現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、

AWSを含むLinuxサーバーの実践スキルを体系的に学べる「Linux Master Pro Seminar」では、20年以上・3,100名以上の指導実績をもとに、現場で即使える設計・構築・運用の「型」を2日間のハンズオンで習得できます。

>> AWSとAmazon Linuxの入門ページを見る

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。