マルチAZ冗長構成でEC2やRDSを展開すると、同一リージョンに複数のサブネット・インスタンス・ロードバランサーが並ぶため、費用の帰属先が曖昧になりやすい。複数のシステムを同一AWSアカウントで動かしていれば、なおさらです。
この記事では、AWSタグをCost Explorerと連携させてプロジェクト別・環境別のコストを可視化する方法を解説します。Amazon Linux 2023を使ったマルチAZ VPC構成を想定環境として、実践的なタグ設計と費用配分設計の手順をまとめます。
この記事のポイント
・AWSタグはリソース作成時に設計しないと後から修正が困難
・Cost Explorerはタグ有効化(Cost Allocation Tags)が必要
・マルチAZのVPC設計ではNAT GW・ALBにもタグが必須
・SCPでタグ付け忘れをポリシーとして防止できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
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" } }
# 既存のEC2インスタンスにタグを付与する aws ec2 create-tags \ --resources i-1234567890abcdef0 \ --tags Key=Env,Value=production \ Key=Project,Value=webapp-a \ Key=Role,Value=web
タグを使ったコスト配分でよくあるミスと注意点
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で必須タグをポリシー化 |
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
AWSを含むLinuxサーバーの実践スキルを体系的に学べる「Linux Master Pro Seminar」では、20年以上・3,100名以上の指導実績をもとに、現場で即使える設計・構築・運用の「型」を2日間のハンズオンで習得できます。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:AWSアーキテクチャ図書き方で運用引き継ぎ資料を作る|Notionで保守メモを構造化する手順
- この記事の属するカテゴリ:AWS(Amazon Linux)へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます