- AWS
AWSの料金を確認する方法|Cost Explorer・CLI・予算アラート
AWS の料金は、Billing and Cost Management コンソールの「請求」と「Cost Explorer」で確認できます。 コマンドで見るなら aws ce get-cost-and-usage、使いすぎを知らせてほしいなら AWS Budgets の予算アラートです。
| やりたいこと | 方法 | 費用(ドキュメント・料金ページ) |
|---|---|---|
| 今月の請求額・明細を見る | コンソールの「請求」 | なし |
| サービス別・日別のグラフで見る | コンソールの Cost Explorer | 画面は無料 |
| コマンド・スクリプトで集計する | aws ce get-cost-and-usage |
API 1 リクエストごとに $0.01 |
| 予算を超えそうなら通知 | aws budgets create-budget |
予算の監視と通知は無料 |
| 請求額がしきい値を超えたら通知 | CloudWatch の請求アラーム(EstimatedCharges) |
CloudWatch アラームの料金 |
最初に「予算アラート」を1つ作っておくと、使いすぎに早く気づけます。 CLI の集計は、毎日の確認やチームへの報告を自動にしたいときに使います。
確認環境:AWS CLI 1.46.1・boto3 1.43.111・Python 3.11・jq(Linux)。AWS には接続せず、moto 5.2.4 のサーバーモード(AWS を模したサーバー)を相手に、aws ce get-cost-and-usage のパラメータの書き方、aws budgets create-budget の JSON(予算2本・通知)、請求アラームの put-metric-alarm が受け付けられることを確かめました。出力の読み方と jq・--query での整形は、AWS CLI リファレンスにある出力例を使って動かしています。ページ送りのコードは botocore の Stubber で2ページ分を確かめました。実際の金額の出方・データの更新の間隔・料金は、AWS のドキュメントと料金ページに基づいて書いています(確認日 2026年10月12日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「AWSの料金を確認する方法|Cost Explorer・CLI・予算アラート」
使う前に:Cost Explorer の有効化と権限
| 項目 | 内容(ドキュメント) |
|---|---|
| Cost Explorer の有効化 | 初めて有効にすると、今月分のデータは約 24 時間で見られるようになり、残りは数日かかる。一度有効にすると無効にできない |
| 見られる期間 | 過去 13 か月まで。予測は先 18 か月 |
| データの更新 | 少なくとも 24 時間に1回。遅れて反映されるデータもある |
| IAM ユーザー・ロールのコンソール利用 | ルートユーザーが「IAM アクセスを有効化」しないと、ポリシーがあってもコンソールは開けない |
| API(CLI)の利用 | 「IAM アクセスを有効化」の設定は API には関係しない。IAM ポリシーで ce:GetCostAndUsage などを許可する |
CLI で使う最小の IAM ポリシーの例です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ce:GetCostAndUsage",
"ce:GetCostForecast",
"ce:GetDimensionValues",
"budgets:ViewBudget",
"budgets:ModifyBudget"
],
"Resource": "*"
}
]
}
IAM ポリシーの書き方は、関連記事「IAMポリシーの書き方|JSONの読み方と最小権限の作り方【例文つき】」で扱っています。
API のエンドポイントは us-east-1
Cost Explorer の API は、どのリージョンを指定しても us-east-1 のエンドポイントに送られます。 boto3 で region_name="ap-northeast-1" にしてクライアントを作っても、meta.endpoint_url は https://ce.us-east-1.amazonaws.com でした。AWS Budgets は https://budgets.amazonaws.com です。
aws ce get-cost-and-usage の目的別コマンド集
--time-period の End は含まれません。 9月分なら Start=2026-09-01,End=2026-10-01 です。
| 目的 | 主なオプション | 下の見出し |
|---|---|---|
| 今月の合計 | --granularity MONTHLY |
① |
| サービス別 | --group-by Type=DIMENSION,Key=SERVICE |
② |
| 日別の推移 | --granularity DAILY |
③ |
| 日別×サービス別 | DAILY + SERVICE |
④ |
| タグ別(プロジェクト・環境) | --group-by Type=TAG,Key=Project |
⑤ |
| リージョン別 | --group-by Type=DIMENSION,Key=REGION |
⑥ |
| アカウント別(Organizations) | --group-by Type=DIMENSION,Key=LINKED_ACCOUNT |
⑦ |
| 使用タイプ別(何に使ったか) | --group-by Type=DIMENSION,Key=USAGE_TYPE |
⑧ |
| クレジット・返金を除く | --filter で RECORD_TYPE を除外 |
⑨ |
| 月末の予測 | aws ce get-cost-forecast |
⑩ |
日付は、次のように変数にしておくと使い回せます(GNU date の例)。
START=$(date +%Y-%m-01) # 今月1日
END=$(date +%F) # 今日(End は含まれないので、昨日までの集計)
LAST7=$(date -d '7 days ago' +%F)
月の初日は START と END が同じ日になり、期間が空になります。月初は前月を見るように分けます(後の Python のコードではそうしています)。
① 今月の合計
aws ce get-cost-and-usage \
--time-period Start=$START,End=$END \
--granularity MONTHLY \
--metrics UnblendedCost \
--query 'ResultsByTime[].[TimePeriod.Start, Total.UnblendedCost.Amount, Total.UnblendedCost.Unit, Estimated]' \
--output text
② サービス別(多い順)
aws ce get-cost-and-usage \
--time-period Start=$START,End=$END \
--granularity MONTHLY \
--metrics UnblendedCost \
--group-by Type=DIMENSION,Key=SERVICE \
--output json \
| jq -r '.ResultsByTime[].Groups[]
| [(.Metrics.UnblendedCost.Amount | tonumber | . * 100 | round / 100), .Keys[0]]
| @tsv' \
| sort -t$'\t' -k1 -nr | head -20
③ 日別の推移
aws ce get-cost-and-usage \
--time-period Start=$LAST7,End=$END \
--granularity DAILY \
--metrics UnblendedCost \
--query 'ResultsByTime[].[TimePeriod.Start, Total.UnblendedCost.Amount, Estimated]' \
--output text
④ 日別×サービス別(急に増えたサービスを探す)
aws ce get-cost-and-usage \
--time-period Start=$LAST7,End=$END \
--granularity DAILY \
--metrics UnblendedCost \
--group-by Type=DIMENSION,Key=SERVICE \
--output json \
| jq -r '.ResultsByTime[] as $d | $d.Groups[]
| select((.Metrics.UnblendedCost.Amount | tonumber) >= 1)
| [$d.TimePeriod.Start, .Keys[0], .Metrics.UnblendedCost.Amount] | @tsv'
>= 1 は「1 USD 以上の行だけ」の意味です。少額の行が多いときに、表示を絞ります。
⑤ タグ別
aws ce get-cost-and-usage \
--time-period Start=$START,End=$END \
--granularity MONTHLY \
--metrics UnblendedCost \
--group-by Type=TAG,Key=Project \
--output json \
| jq -r '.ResultsByTime[].Groups[]
| [(.Keys[0] | sub("^Project\\$"; "") | if . == "" then "(タグなし)" else . end),
.Metrics.UnblendedCost.Amount] | @tsv'
タグで集計するには、そのタグキーを「コスト配分タグ」として有効にしておく必要があります。 ドキュメントでは、リソースにタグを付けてからタグキーが一覧に出るまで最大 24 時間、有効にしてからさらに最大 24 時間かかります。
# 有効になっていないユーザー定義タグを見る
aws ce list-cost-allocation-tags --status Inactive --type UserDefined
# Project を有効にする
aws ce update-cost-allocation-tags-status \
--cost-allocation-tags-status TagKey=Project,Status=Active
タグの付け方と命名のルールは、関連記事「AWSタグの付け方|AWS CLIでタグ付け・検索・一覧取得と命名ルール」で扱っています。
⑥ リージョン別
aws ce get-cost-and-usage \
--time-period Start=$START,End=$END \
--granularity MONTHLY \
--metrics UnblendedCost \
--group-by Type=DIMENSION,Key=REGION \
--query 'ResultsByTime[].Groups[].[Keys[0], Metrics.UnblendedCost.Amount]' \
--output text
API リファレンスの GroupBy の説明に並ぶディメンションの一覧には REGION がありませんが、同じページで「使えるディメンションの一覧は GetDimensionValues を参照」とされ、botocore のサービス定義の Dimension には REGION があります。リージョンの値は次で一覧にできます。
aws ce get-dimension-values \
--time-period Start=$START,End=$END \
--dimension REGION \
--query 'DimensionValues[].Value' --output text
⑦ アカウント別(AWS Organizations の管理アカウントで)
aws ce get-cost-and-usage \
--time-period Start=$START,End=$END \
--granularity MONTHLY \
--metrics UnblendedCost \
--group-by Type=DIMENSION,Key=LINKED_ACCOUNT \
--query 'ResultsByTime[].Groups[].[Keys[0], Metrics.UnblendedCost.Amount]' \
--output text
⑧ 使用タイプ別(サービスの中の何が高いか)
--group-by は2つまで指定できます。サービスと使用タイプを組み合わせると、「EC2 のどの料金か(インスタンス・データ転送・EBS など)」まで分かります。
aws ce get-cost-and-usage \
--time-period Start=$START,End=$END \
--granularity MONTHLY \
--metrics UnblendedCost \
--group-by Type=DIMENSION,Key=SERVICE Type=DIMENSION,Key=USAGE_TYPE \
--output json \
| jq -r '.ResultsByTime[].Groups[]
| [(.Metrics.UnblendedCost.Amount | tonumber), .Keys[0], .Keys[1]] | @tsv' \
| sort -t$'\t' -k1 -nr | head -20
⑨ クレジット・返金を除く
クレジットを使っている月は、合計が小さく見えます。使った分だけを見たいときは、RECORD_TYPE で除きます。
{
"Not": {
"Dimensions": {
"Key": "RECORD_TYPE",
"Values": ["Credit", "Refund"]
}
}
}
aws ce get-cost-and-usage \
--time-period Start=$START,End=$END \
--granularity MONTHLY \
--metrics UnblendedCost \
--filter file://exclude-credit.json
API リファレンスでは、SERVICE で絞るフィルターは、要求全体にかかるように書く決まりがあります。And で他の条件と組み合わせ、Or を使うなら全部の枝に入れます。Not の中に SERVICE を入れると ValidationException になります。
⑩ 今月の着地の予測
aws ce get-cost-forecast \
--time-period Start=$(date +%F),End=$(date -d "$(date +%Y-%m-01) +1 month" +%F) \
--metric UNBLENDED_COST \
--granularity MONTHLY
予測の --metric は UNBLENDED_COST のように大文字とアンダースコアで書きます。get-cost-and-usage の --metrics UnblendedCost と書き方が違うので注意します。
出力の読み方
AWS CLI リファレンスにある出力例です(S3 の料金を、サービスと Environment タグでまとめたもの)。
{
"GroupDefinitions": [
{ "Type": "DIMENSION", "Key": "SERVICE" },
{ "Type": "TAG", "Key": "Environment" }
],
"ResultsByTime": [
{
"Estimated": false,
"TimePeriod": { "Start": "2017-09-01", "End": "2017-10-01" },
"Total": {},
"Groups": [
{
"Keys": ["Amazon Simple Storage Service", "Environment$"],
"Metrics": {
"BlendedCost": { "Amount": "40.3527508453", "Unit": "USD" },
"UnblendedCost": { "Amount": "40.3543773134", "Unit": "USD" },
"UsageQuantity": { "Amount": "9312771.098461578", "Unit": "N/A" }
}
}
]
}
]
}
| 項目 | 意味 | 読むときの注意 |
|---|---|---|
ResultsByTime |
期間(月・日)ごとの結果 | DAILY なら日数分並ぶ |
TimePeriod |
その結果の期間 | End は含まない |
Total |
期間の合計 | --group-by を付けると空 {} になる(上の例) |
Groups[].Keys |
グループの値 | タグは タグキー$値。Environment$ は「タグなし」 |
Metrics.*.Amount |
金額・量 | 文字列。計算するときは数値に変換する |
Metrics.*.Unit |
単位 | 金額は USD。UsageQuantity は単位がまちまち |
Estimated |
見込みの値か | true の期間は、あとで金額が変わりうる |
NextPageToken |
続きがある | 続きを取るには --next-page-token で再度呼ぶ |
メトリクス(--metrics)の違い
| メトリクス | 意味(ドキュメント) | 向いている用途 |
|---|---|---|
UnblendedCost |
使った分のコスト。割引は別の行に分かれる | 普段の確認はこれ。請求書の考え方に近い |
NetUnblendedCost |
割引を差し引いたあとのコスト | 割引を反映した実際の支払いに近い額 |
AmortizedCost |
リザーブドインスタンス・Savings Plans の前払いを期間に割り振ったコスト | 前払いのある月に跳ねない、平らな推移を見る |
NetAmortizedCost |
割り振り+割引を反映 | 同上で、割引も反映 |
BlendedCost |
Organizations の一括請求のファミリー全体での平均単価 | 組織全体の平均で見る |
UsageQuantity |
使用量 | 単位が混ざって合計される。USAGE_TYPE で絞って使う |
NormalizedUsageAmount |
正規化した使用量 | リザーブドインスタンスの比較 |
ドキュメントでは、UsageQuantity は単位を考えずに足し合わされるので、使用タイプで絞ると意味のある値になる、とされています。
jq・--query で整形した結果
上の出力例を、サービス・タグ・金額(小数第2位で丸め)の表にしました。
jq -r '.ResultsByTime[] as $r | $r.Groups[]
| [$r.TimePeriod.Start, .Keys[0],
(.Keys[1] | sub("^[^$]*\\$"; "") | if . == "" then "(タグなし)" else . end),
(.Metrics.UnblendedCost.Amount | tonumber | . * 100 | round / 100)] | @tsv' cost.json
2017-09-01 Amazon Simple Storage Service (タグなし) 40.35
同じ出力を --query と --output table で表にした結果です。
---------------------------------------------------------------------------
| GetCostAndUsage |
+--------------------------------+---------------+----------------+-------+
| Amazon Simple Storage Service | Environment$ | 40.3543773134 | USD |
+--------------------------------+---------------+----------------+-------+
--query では文字列の金額を数値として並べ替えられないので、多い順に並べるなら jq を使います。 --query の書き方は関連記事「AWS CLI --queryの使い方|JMESPath絞り込みと出力形式」で、jq は関連記事「jqの使い方|逆引き40例と実務レシピを全部実行結果つきで解説」で扱っています。
ページ送り(NextPageToken)
botocore では、GetCostAndUsage はページ送りの自動処理(paginator)の対象になっていません(can_paginate("get_cost_and_usage") が False)。グループが多くて結果が分かれたときは、NextPageToken を見て自分で呼び直します。 そのたびに 1 リクエスト分の料金がかかります。
"""今月のサービス別の料金(UnblendedCost)を多い順に出す"""
import datetime as dt
import boto3
ce = boto3.client("ce", region_name="us-east-1") # Cost Explorer API のエンドポイントは us-east-1
def month_range(today: dt.date):
start = today.replace(day=1)
end = today # End は含まれない(今日の分はまだ確定していない)
if start == end: # 月初は前月を見る
end = start
start = (start - dt.timedelta(days=1)).replace(day=1)
return start.isoformat(), end.isoformat()
def cost_by_service(start: str, end: str) -> dict:
totals, token = {}, None
while True:
kwargs = dict(
TimePeriod={"Start": start, "End": end},
Granularity="MONTHLY",
Metrics=["UnblendedCost"],
GroupBy=[{"Type": "DIMENSION", "Key": "SERVICE"}],
)
if token:
kwargs["NextPageToken"] = token
res = ce.get_cost_and_usage(**kwargs) # 1 リクエストごとに $0.01
for period in res["ResultsByTime"]:
for g in period["Groups"]:
amt = float(g["Metrics"]["UnblendedCost"]["Amount"])
totals[g["Keys"][0]] = totals.get(g["Keys"][0], 0.0) + amt
token = res.get("NextPageToken")
if not token:
return totals
if __name__ == "__main__":
start, end = month_range(dt.date.today())
totals = cost_by_service(start, end)
print(f"{start} 〜 {end}(End は含まない)")
for name, amt in sorted(totals.items(), key=lambda x: -x[1]):
if amt >= 0.01:
print(f"{amt:>10.2f} USD {name}")
print(f"{sum(totals.values()):>10.2f} USD 合計")
month_range は、10月13日なら 2026-10-01〜2026-10-13、10月1日なら 2026-09-01〜2026-10-01、1月1日なら前年12月を返すことを確かめました。ページ送りは、Stubber で NextPageToken 付きの応答を2ページ分返し、2回呼ばれて合計されることを確かめています。
Cost Explorer API の料金
| 項目 | 料金(料金ページ・ドキュメント) |
|---|---|
| Cost Explorer の画面 | 無料 |
API(get-cost-and-usage など) |
ページ分けされた 1 リクエストごとに $0.01 |
| 時間単位(HOURLY)のデータ | 使用レコードごとに 1 日 $0.00000033(1,000 件で月 約 $0.01)。14 日分 |
CLI を1回動かすたびに、少なくとも $0.01 かかります。 毎時の監視ジョブのように何度も呼ぶと、その分が積み上がります。
| 呼び方 | 1か月のリクエスト数 | API 料金 |
|---|---|---|
| 1 日 1 回(1 ページ) | 30 | $0.30 |
| 1 時間に 1 回(1 ページ) | 720 | $7.20 |
| 1 日 1 回、4 種類の集計 | 120 | $1.20 |
日々の確認は、予算アラート(無料)とコンソールの画面(無料)でまかない、CLI は日次レポートなどに使うと、API の料金を抑えられます。
予算アラート(aws budgets create-budget)
AWS Budgets は、月の予算に対して「実際の金額」か「予測」がしきい値を超えたら、メールか SNS で知らせる機能です。 料金ページでは、予算の監視と通知は無料です(予算アクションは、アクションを有効にした予算が月2つまで無料、以降は 1 つにつき 1 日 $0.10)。
予算の JSON(budget.json)
月 200 USD の予算です。クレジットと返金は含めない設定にしています。
{
"BudgetName": "monthly-total-200usd",
"BudgetType": "COST",
"TimeUnit": "MONTHLY",
"BudgetLimit": { "Amount": "200", "Unit": "USD" },
"CostTypes": {
"IncludeTax": true,
"IncludeSubscription": true,
"UseBlended": false,
"IncludeRefund": false,
"IncludeCredit": false,
"IncludeUpfront": true,
"IncludeRecurring": true,
"IncludeOtherSubscription": true,
"IncludeSupport": true,
"IncludeDiscount": true,
"UseAmortized": false
}
}
通知の JSON(notifications.json)
実際の金額が 80% を超えたら、と、予測が 100% を超えそうなら、の2つです。
[
{
"Notification": {
"NotificationType": "ACTUAL",
"ComparisonOperator": "GREATER_THAN",
"Threshold": 80,
"ThresholdType": "PERCENTAGE"
},
"Subscribers": [
{ "SubscriptionType": "EMAIL", "Address": "infra-team@example.com" }
]
},
{
"Notification": {
"NotificationType": "FORECASTED",
"ComparisonOperator": "GREATER_THAN",
"Threshold": 100,
"ThresholdType": "PERCENTAGE"
},
"Subscribers": [
{ "SubscriptionType": "EMAIL", "Address": "infra-team@example.com" }
]
}
]
作成と確認
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
aws budgets create-budget \
--account-id "$ACCOUNT_ID" \
--budget file://budget.json \
--notifications-with-subscribers file://notifications.json
aws budgets describe-budgets --account-id "$ACCOUNT_ID" \
--query 'Budgets[].[BudgetName,BudgetLimit.Amount,TimeUnit,CalculatedSpend.ActualSpend.Amount]' \
--output text
aws budgets describe-notifications-for-budget --account-id "$ACCOUNT_ID" \
--budget-name monthly-total-200usd \
--query 'Notifications[].[NotificationType,Threshold,ThresholdType]' --output text
moto で動かした結果です(作った直後なので実際の金額は 0)。
monthly-total-200usd 200 MONTHLY 0
ACTUAL 80 PERCENTAGE
FORECASTED 100 PERCENTAGE
同じ名前でもう一度作ると、DuplicateRecordException(the budget already exists)になりました。変えるときは update-budget、通知は create-notification・update-notification を使います。
タグ(プロジェクト)ごとの予算
{
"BudgetName": "project-billing-api",
"BudgetType": "COST",
"TimeUnit": "MONTHLY",
"BudgetLimit": { "Amount": "50", "Unit": "USD" },
"CostFilters": { "TagKeyValue": ["user:Project$billing-api"] }
}
タグの指定は user:タグキー$値 の形です(ドキュメントの例と同じ形)。コスト配分タグとして有効にしたタグだけが使えます。
予算の設定値
| 項目 | 指定できる値(CLI リファレンス) |
|---|---|
BudgetType |
COST・USAGE・RI_UTILIZATION・RI_COVERAGE・SAVINGS_PLANS_UTILIZATION・SAVINGS_PLANS_COVERAGE |
TimeUnit |
DAILY・MONTHLY・QUARTERLY・ANNUALLY・CUSTOM |
NotificationType |
ACTUAL(実際の金額)・FORECASTED(予測) |
ThresholdType |
PERCENTAGE(予算に対する割合)・ABSOLUTE_VALUE(金額) |
SubscriptionType |
EMAIL・SNS |
| 通知先の数 | 1つの通知に SNS 1 つ+メール 10 件まで |
CostTypes の既定値は、UseBlended と UseAmortized が false、ほかは true です。クレジットのあるアカウントで既定のままにすると、クレジットが差し引かれた額で判定され、使いすぎに気づきにくくなります。 上の例では、IncludeCredit と IncludeRefund を false にしています。
請求アラーム(CloudWatch の EstimatedCharges)
AWS Budgets のほかに、CloudWatch のメトリクス EstimatedCharges(見積もりの請求額)にアラームを付ける方法もあります。
| 項目 | 内容(ドキュメント) |
|---|---|
| 事前の設定 | 請求の設定で「CloudWatch 請求アラートを受信する」を有効にする。一度有効にすると、データの収集は止められない |
| リージョン | 米国東部(バージニア北部)= us-east-1 に作る。データは世界全体の請求額 |
| 名前空間・メトリクス | AWS/Billing・EstimatedCharges(USD のみ) |
| 更新 | 1 日に数回 |
| ドキュメントの設定 | 統計 Maximum、期間 6 時間、1 回中 1 回で発報 |
# 通知先の SNS トピック(us-east-1)
TOPIC_ARN=$(aws sns create-topic --name billing-alerts --region us-east-1 \
--query TopicArn --output text)
aws sns subscribe --topic-arn "$TOPIC_ARN" --protocol email \
--notification-endpoint infra-team@example.com --region us-east-1
# 請求額が 200 USD を超えたら通知
aws cloudwatch put-metric-alarm \
--region us-east-1 \
--alarm-name billing-over-200usd \
--namespace AWS/Billing \
--metric-name EstimatedCharges \
--dimensions Name=Currency,Value=USD \
--statistic Maximum \
--period 21600 \
--evaluation-periods 1 \
--datapoints-to-alarm 1 \
--threshold 200 \
--comparison-operator GreaterThanThreshold \
--treat-missing-data missing \
--alarm-actions "$TOPIC_ARN"
moto で作ったアラームを describe-alarms で見た結果です。
billing-over-200usd AWS/Billing EstimatedCharges 21600 200.0 OK
| 比べる点 | AWS Budgets | 請求アラーム |
|---|---|---|
| 予測で通知 | できる(FORECASTED) |
できない(今の見積もり額だけ) |
| タグ・サービスで絞る | できる(CostFilters) |
見積もりの請求額で判定 |
| 料金 | 監視と通知は無料 | CloudWatch アラームの料金 |
| 置き場所 | アカウント全体 | us-east-1 |
CloudWatch アラームの作り方の全体は、関連記事「CloudWatchアラームをAWS CLIで作成|SNS通知・カスタム指標」で扱っています。
料金が増えたときの調べ方
| 順番 | 見るもの | コマンド・場所 | 分かること |
|---|---|---|---|
| 1 | 日別の合計 | ③ 日別の推移 | いつから増えたか |
| 2 | 増えた日のサービス別 | ④ 日別×サービス別 | どのサービスか |
| 3 | 使用タイプ別 | ⑧ サービス×使用タイプ | インスタンス・転送量・ストレージのどれか |
| 4 | リージョン別・アカウント別 | ⑥・⑦ | どこで使っているか(使っていないリージョンに注意) |
| 5 | タグ別 | ⑤ | どのプロジェクト・環境か(タグなしが多いなら、タグ付けを見直す) |
| 6 | リソースの一覧 | aws ec2 describe-instances、aws rds describe-db-instances など |
止め忘れ・消し忘れのリソース |
| 7 | 誰が作ったか | CloudTrail の RunInstances・CreateDBInstance など |
作成した人・時刻 |
使用タイプの名前から疑うものの例です。
| 使用タイプの例 | 疑うもの |
|---|---|
NatGateway-Hours・NatGateway-Bytes |
NAT ゲートウェイの消し忘れ・大量の通信 |
DataTransfer-Out-Bytes |
インターネットへの転送量 |
EBS:VolumeUsage |
外したまま残っている EBS ボリューム・スナップショット |
BoxUsage:<インスタンスタイプ> |
止め忘れのインスタンス |
使用タイプの名前には、リージョンを表す接頭辞(東京なら APN1- など)が付きます。表の例は接頭辞を省いています。
誰がリソースを作ったかは、関連記事「CloudTrailで誰が操作したか調べる|lookup-eventsとAthena」で扱っています。
よくある質問
Q. CLI の金額と請求書の金額が合いません。
A. 見ている指標と期間を確かめます。請求書に近いのは UnblendedCost で、クレジット・返金・税を含むかで変わります。当月分は Estimated が true で、あとで変わることがあります。End は含まれないので、月末の日を含めるには翌月1日を指定します。
Q. タグで集計すると、ほとんどが Project$(タグなし)になります。
A. タグを「コスト配分タグ」として有効にする前の料金には、タグが付きません。また、タグを付けられない料金(データ転送の一部など)もあります。
Q. 予算アラートのメールが届きません。
A. 予算の金額としきい値、CostTypes でクレジットを含めていないかを確かめます。予算の実際の金額は請求データをもとに計算されるので、使った直後にはすぐ届きません。
Q. Cost Explorer の API をたくさん呼んでもいいですか。
A. 1 リクエストごとに $0.01 かかります。ドキュメントでは、短い時間に呼びすぎると LimitExceededException になるとされています。結果をファイルに保存して使い回すと、回数を減らせます。
まとめ
- 画面で見るなら Cost Explorer(無料)、コマンドなら
aws ce get-cost-and-usage(1 リクエスト $0.01) Endは含まれない。--group-byを付けるとTotalは空、金額は文字列- 普段は
UnblendedCost。前払いを平らに見るならAmortizedCost、UsageQuantityは単位が混ざる - タグ別に見るには、コスト配分タグの有効化(反映まで最大 24 時間+24 時間)
- まず
aws budgets create-budgetで予算アラートを作る。IncludeCredit: falseでクレジットに隠れないように - 増えたときは 日別 → サービス別 → 使用タイプ別 → リージョン・タグ → リソース → CloudTrail の順に絞る
参考・出典
確認日はいずれも 2026年10月12日です。
- AWS CLI コマンドリファレンス「get-cost-and-usage」:https://docs.aws.amazon.com/cli/latest/reference/ce/get-cost-and-usage.html
- AWS Billing and Cost Management API リファレンス「GetCostAndUsage」:https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_GetCostAndUsage.html
- AWS コスト管理ユーザーガイド「Analyzing your costs and usage with AWS Cost Explorer」:https://docs.aws.amazon.com/cost-management/latest/userguide/ce-what-is.html
- AWS コスト管理ユーザーガイド「Using the advanced options(コストの指標)」:https://docs.aws.amazon.com/cost-management/latest/userguide/ce-advanced.html
- AWS Cost Explorer の料金:https://aws.amazon.com/aws-cost-management/aws-cost-explorer/pricing/
- AWS CLI コマンドリファレンス「create-budget」:https://docs.aws.amazon.com/cli/latest/reference/budgets/create-budget.html
- AWS Budgets の料金:https://aws.amazon.com/aws-cost-management/aws-budgets/pricing/
- AWS Billing ユーザーガイド「Activating user-defined cost allocation tags」:https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/activating-tags.html
- AWS Billing ユーザーガイド「Managing access permissions」:https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/control-access-billing.html
- Amazon CloudWatch ユーザーガイド「Create a billing alarm to monitor your estimated AWS charges」:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html
- Amazon CloudWatch ユーザーガイド「AWS services that publish CloudWatch metrics」:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「AWSの料金を確認する方法|Cost Explorer・CLI・予算アラート」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。