ダッシュボード

例:サービス別の支出

請求メトリクスを有効にしてから、CloudPeekの支出のプリセットを追加するか、今月の費用が大きいサービスを示すCloudWatchダッシュボードを作成します。ダッシュボードは、AWSコンソールで作成することも、CloudFormationやTerraformを使って1回のデプロイで作成することもできます。

2026年10月19日更新

手間をかけたくない場合:支出のプリセットを使う

AWSの請求額をホーム画面に表示したいだけなら、ダッシュボードは必要ありません。請求メトリクスを有効にして(ステップ1)、ウィジェットを作成 › プリセットからCloudPeekの支出のプリセットを追加します。これらのプリセットを組み合わせれば、以下のダッシュボードの内容をすべて表示できます:

ダッシュボードウィジェットプリセット違い
支出上位5サービスサービス別の支出すべてのサービスを多い順に表示し、収まらないものは「その他」にまとめます。合計は請求額全体ではなく、各サービスの合計です。
月初来の支出月初来の支出同じです。
過去7日間の支出アカウント別の日次支出同じです。AWS Organizationsの管理アカウントでは、各アカウントが日ごとの列に積み上げられます。2週間、30日間、月初来も表示できます。
支出上位5サービスの内訳支出の内訳5つだけでなく、すべてのサービスを表示します。

プリセットには、月末予測、支出と予測、サービス別の日次支出、日次支出の表、支出の推移もあります(プリセットを参照)。上位5つを固定したい場合、請求額全体を合計として表示したい場合、CloudWatchコンソールでも同じウィジェットを見たい場合、ダッシュボードをCloudFormationやTerraformで管理したい場合は、代わりにダッシュボードを作成してください。

作成するもの

4つのウィジェットを持つCloudPeek-Spendという名前のCloudWatchダッシュボードを作成します。1つ目は、今月これまでに支出の多い5つのサービスを自動で見つけて表示する棒グラフで、アカウントの合計も表示します。2つ目は、その月初来の合計と過去1週間のスパークラインです。3つ目は過去7日間の各日の支出を1日1列で表示し、4つ目は上位5サービスの支出の内訳を示す円グラフです。CloudPeekでは次のように表示されます:

棒グラフでは、収まらないサービスは「その他」にまとめられます。

AWSコンソールなら約15分、CloudFormationやTerraformなら1回のデプロイで完了します。各ステップのタブで、使うツールを選んでください。

始める前に

  • AWSアカウントと、請求設定を変更でき、CloudWatchダッシュボード、IAMユーザー、ポリシーを作成できるサインイン(管理者のサインインなど)。アカウントがAWS Organizationsにある場合は、組織全体の支出を確認できるよう管理アカウントを使います。
  • iPhone、iPad、またはAndroidスマートフォンに入れたCloudPeek。

料金:請求メトリクスは無料です。CloudWatchの無料利用枠にはダッシュボード3つが含まれ、それを超えるとダッシュボード1つにつき月額$3かかります。CloudPeekの更新ではGetMetricDataを呼び出し、AWSはメトリクス1,000件あたり$0.01を請求します。AWSが請求メトリクスを更新するのは1日に数回だけなので、これらのウィジェットの更新は最短でも3時間ごとです。4つすべてをピン留めした場合、更新1回あたり約15件のメトリクスで、月に約4セントです。ご自分のウィジェットの料金は、設定の更新で見積もりを確認できます。CloudWatchの料金を参照してください。

1. 請求メトリクスを有効にする

AWSが推定請求額をCloudWatchに送信するのは、オプトインした後だけです。この設定はアカウントごとに1回、コンソールで行います。CloudFormation、Terraform、AWS CLIではこの設定を変更できません。

  1. AWSコンソールにサインインし、Billing and Cost Management › 請求設定を開きます。
  2. アラート設定で編集を選択します。
  3. CloudWatch請求アラートを受け取るにチェックを入れ、変更を保存します。

推定請求額は1日に数回、米国東部 (バージニア北部)、us-east-1リージョンに発行されます。月初からの累計なので、毎月ゼロに戻ります。最初のデータが表示されるまでに数時間かかることがあります。ルートユーザーとしてサインインしていない場合は、アカウントで請求情報へのIAMアクセスも許可する必要があります(アカウント › 請求情報へのIAMユーザーおよびロールのアクセス)。

最初のデータが届くまで、次に作成するダッシュボードには利用可能なデータがありませんと表示され、CloudPeekの支出ウィジェットには「BillingコンソールでCloudWatchの請求アラートを有効にしてください。1日以内に支出が表示されます。」(小サイズのウィジェットでは「CloudWatchの請求アラートを有効にしてください。」)と表示されます。請求メトリクスの送信が始まったかどうかを確認するには、us-east-1でCloudWatchを開き、メトリクス › すべてのメトリクスを選択します。送信が始まっていれば、Billing名前空間が表示されます。メトリクスエクスプローラーには請求メトリクスが表示されないため、「すべてのメトリクス」で確認してください。

AWS Organizationsでは、請求メトリクスは管理アカウントにのみあり、すべてのアカウントの料金がアカウント別に記録されています(アカウント別の支出)。ほかのアカウントには請求メトリクスがないため、管理アカウントで請求アラートを有効にし、支出ウィジェット用に管理アカウントをCloudPeekに追加します。IAM Identity Centerでサインインした、管理アカウント以外のアカウントでは、CloudPeekの支出ウィジェットに「このアカウントの支出は、組織の管理アカウントにあります。」(小サイズのウィジェットでは「支出は管理アカウントにあります。」)と表示されます。CloudPeekは、組織のアカウントを一覧表示できるかどうか(CloudPeekのポリシーに含まれるorganizations:ListAccounts)で管理アカウントを判別するため、管理アカウントのサインインにはこのアクセス許可を付与してください。

2. ダッシュボードを作成する

  1. us-east-1のCloudWatchコンソールを開き、ダッシュボードの作成を選択します。
  2. 名前をCloudPeek-Spendにして、ダッシュボードの作成を選択します。ウィジェットの追加ウィンドウが開いたら、閉じます。
  3. アクション › ソースの表示/編集を選択し、ソースをダッシュボードJSONに置き換えて、更新を選択します。
  4. 保存を選択します。

spend-by-service.json(全文は下にあります)をダウンロードしてから、次のコマンドを実行します:

シェル
aws cloudwatch put-dashboard \
  --region us-east-1 \
  --dashboard-name CloudPeek-Spend \
  --dashboard-body file://spend-by-service.json

1つのテンプレートで、ダッシュボードと、ステップ3のCloudPeekポリシーとIAMユーザーを作成します。ダッシュボードのリソースは次のとおりです:

cloudpeek-setup.yaml(ダッシュボード)ダウンロード
  Dashboard:
    Type: AWS::CloudWatch::Dashboard
    Properties:
      DashboardName: !Ref DashboardName
      DashboardBody: !Sub |
          {
            "start": "-P7D",
            "widgets": [
              {
                "type": "metric",
                "x": 0,
                "y": 0,
                "width": 12,
                "height": 8,
                "properties": {
                  "title": "Top ${TopServices} services by spend",
                  "view": "bar",
                  "region": "us-east-1",
                  "start": "-P1D",
                  "stat": "Maximum",
                  "period": 21600,
                  "metrics": [
                    [ "AWS/Billing", "EstimatedCharges", "Currency", "${Currency}", { "label": "Total" } ],
                    [ { "expression": "SORT(SEARCH('{AWS/Billing,Currency,ServiceName} MetricName=\"EstimatedCharges\" Currency=\"${Currency}\"', 'Maximum', 21600), MAX, DESC, ${TopServices})", "label": "${!PROP('Dim.ServiceName')}", "id": "top" } ]
                  ]
                }
              },
              {
                "type": "metric",
                "x": 12,
                "y": 0,
                "width": 6,
                "height": 8,
                "properties": {
                  "title": "Month-to-date spend",
                  "view": "singleValue",
                  "region": "us-east-1",
                  "stat": "Maximum",
                  "period": 21600,
                  "sparkline": true,
                  "metrics": [
                    [ "AWS/Billing", "EstimatedCharges", "Currency", "${Currency}", { "label": "Total" } ]
                  ]
                }
              },
              {
                "type": "metric",
                "x": 18,
                "y": 0,
                "width": 6,
                "height": 8,
                "properties": {
                  "title": "Last 7 days' spend",
                  "view": "timeSeries",
                  "region": "us-east-1",
                  "start": "-P7D",
                  "stat": "Maximum",
                  "period": 86400,
                  "yAxis": { "left": { "min": 0 } },
                  "metrics": [
                    [ { "expression": "IF(DIFF(m1) < 0, m1, DIFF(m1))", "label": "Spend", "id": "daily" } ],
                    [ "AWS/Billing", "EstimatedCharges", "Currency", "${Currency}", { "id": "m1", "visible": false } ]
                  ]
                }
              },
              {
                "type": "metric",
                "x": 0,
                "y": 8,
                "width": 12,
                "height": 8,
                "properties": {
                  "title": "Top ${TopServices} services' share of spend",
                  "view": "pie",
                  "region": "us-east-1",
                  "start": "-P1D",
                  "stat": "Maximum",
                  "period": 21600,
                  "metrics": [
                    [ { "expression": "SORT(SEARCH('{AWS/Billing,Currency,ServiceName} MetricName=\"EstimatedCharges\" Currency=\"${Currency}\"', 'Maximum', 21600), MAX, DESC, ${TopServices})", "label": "${!PROP('Dim.ServiceName')}", "id": "share" } ]
                  ]
                }
              }
            ]
          }

本文は下のダッシュボードJSONで、${TopServices}と${Currency}にはスタックのパラメータの値が入ります。${!PROP(…)}と書くことで、CloudFormationが動的ラベルを自身の変数として扱わないようにしています。

シェル
aws cloudformation deploy \
  --region us-east-1 \
  --stack-name CloudPeek \
  --template-file cloudpeek-setup.yaml \
  --capabilities CAPABILITY_NAMED_IAM

または、us-east-1のCloudFormationコンソールでテンプレートファイルのアップロードを選択し、スタック名をCloudPeekにしてパラメータを確認し、送信する前にAWS CloudFormationによってカスタム名のついたIAMリソースが作成される場合があることを承認しますにチェックを入れます。スタックがCREATE_COMPLETEになると、出力タブにダッシュボードへのリンクが表示されます。

パラメータデフォルト用途
DashboardNameCloudPeek-Spendダッシュボードの名前。
TopServices5グラフに表示する、支出の多いサービスの数(1〜20)。
CurrencyUSD請求の通貨。
PolicyNameCloudPeekポリシーの名前。
CreateUsertrueIAM Identity Centerでサインインする場合はfalseに設定します。
UserNamecloudpeekIAMユーザーの名前。

変更するには、--parameter-overrides TopServices=10 CreateUser=falseのように--parameter-overridesを追加します。

1つの構成で、ダッシュボードと、ステップ3のCloudPeekポリシーとIAMユーザーを作成します。ダッシュボードのリソースは次のとおりです:

cloudpeek-setup.tf(ダッシュボード)ダウンロード
resource "aws_cloudwatch_dashboard" "spend" {
  dashboard_name = var.dashboard_name
  dashboard_body = jsonencode({
    start = "-P7D"
    widgets = [
      {
        type   = "metric"
        x      = 0
        y      = 0
        width  = 12
        height = 8
        properties = {
          title  = "Top ${var.top_services} services by spend"
          view   = "bar"
          region = "us-east-1"
          start  = "-P1D"
          stat   = "Maximum"
          period = 21600
          metrics = [
            ["AWS/Billing", "EstimatedCharges", "Currency", var.currency, { label = "Total" }],
            [{
              expression = "SORT(SEARCH('{AWS/Billing,Currency,ServiceName} MetricName=\"EstimatedCharges\" Currency=\"${var.currency}\"', 'Maximum', 21600), MAX, DESC, ${var.top_services})"
              label      = "$${PROP('Dim.ServiceName')}"
              id         = "top"
            }],
          ]
        }
      },
      {
        type   = "metric"
        x      = 12
        y      = 0
        width  = 6
        height = 8
        properties = {
          title     = "Month-to-date spend"
          view      = "singleValue"
          region    = "us-east-1"
          stat      = "Maximum"
          period    = 21600
          sparkline = true
          metrics = [
            ["AWS/Billing", "EstimatedCharges", "Currency", var.currency, { label = "Total" }],
          ]
        }
      },
      {
        type   = "metric"
        x      = 18
        y      = 0
        width  = 6
        height = 8
        properties = {
          title  = "Last 7 days' spend"
          view   = "timeSeries"
          region = "us-east-1"
          start  = "-P7D"
          stat   = "Maximum"
          period = 86400
          yAxis  = { left = { min = 0 } }
          metrics = [
            [{ expression = "IF(DIFF(m1) < 0, m1, DIFF(m1))", label = "Spend", id = "daily" }],
            ["AWS/Billing", "EstimatedCharges", "Currency", var.currency, { id = "m1", visible = false }],
          ]
        }
      },
      {
        type   = "metric"
        x      = 0
        y      = 8
        width  = 12
        height = 8
        properties = {
          title  = "Top ${var.top_services} services' share of spend"
          view   = "pie"
          region = "us-east-1"
          start  = "-P1D"
          stat   = "Maximum"
          period = 21600
          metrics = [
            [{
              expression = "SORT(SEARCH('{AWS/Billing,Currency,ServiceName} MetricName=\"EstimatedCharges\" Currency=\"${var.currency}\"', 'Maximum', 21600), MAX, DESC, ${var.top_services})"
              label      = "$${PROP('Dim.ServiceName')}"
              id         = "share"
            }],
          ]
        }
      },
    ]
  })
}

jsonencodeで、下のダッシュボードJSONとまったく同じものを作成します。$${PROP(…)}と書くことで、Terraformが動的ラベルを補間として扱わないようにしています。ファイルを空のディレクトリに保存して、次のコマンドを実行します:

シェル
terraform init
terraform apply
変数デフォルト用途
dashboard_nameCloudPeek-Spendダッシュボードの名前。
top_services5グラフに表示する、支出の多いサービスの数(1〜20)。
currencyUSD請求の通貨。
policy_nameCloudPeekポリシーの名前。
create_usertrueIAM Identity Centerでサインインする場合はfalseに設定します。
user_namecloudpeekIAMユーザーの名前。

変更するには、terraform apply -var top_services=10 -var create_user=falseのように-varを渡します。既存の構成にダッシュボードを追加するには、リソースをコピーし、terraformブロックとproviderブロックは除きます。

3. CloudPeek用のサインインを作成する

「はじめに」のCloudPeek用のサインインを作成するの手順に従います。CloudPeekポリシーと、アクセスキーを持つIAMユーザーまたはIAM Identity Centerの許可セットを作成します。

「はじめに」のCloudPeek用のサインインを作成するの手順に従います。IAMユーザー用とIAM Identity Centerの許可セット用のAWS CLIコマンドが記載されています。

ステップ2のスタックで、CloudPeekポリシーと、CreateUserをfalseにしていなければcloudpeekユーザーが作成済みです。ユーザーのアクセスキーを作成します。シークレットが表示されるのはこのときだけです:

シェル
aws iam create-access-key --user-name cloudpeek

IAM Identity Centerの場合は、CloudPeekをカスタマー管理ポリシーとして許可セットにアタッチします(オプションBを参照)。

ステップ2の構成で、CloudPeekポリシーと、create_userをfalseにしていなければcloudpeekユーザーが作成済みです。シークレットがステートに残らないよう、ユーザーのアクセスキーはTerraformの外で作成します。シークレットが表示されるのはこのときだけです:

シェル
aws iam create-access-key --user-name cloudpeek

IAM Identity Centerの場合は、CloudPeekをカスタマー管理ポリシーとして許可セットにアタッチします(オプションBを参照)。

4. アカウントを追加してウィジェットをピン留めする

  1. CloudPeekのアカウントタブで、アクセスキーまたはIAM Identity Centerを使ってアカウントを追加します(はじめに(ステップ2)を参照)。デフォルトリージョンはどれでも構いません。支出ウィジェットは常にus-east-1を読み取ります。
  2. アカウントタブでアカウントを開き、CloudPeek-Spendダッシュボードを開いて、必要なウィジェットのピン留めをタップします:支出上位5サービス、月初来の支出、過去7日間の支出、支出上位5サービスの内訳。
  3. ウィジェットごとに1回ずつCloudPeekをホーム画面に追加し、それぞれに表示するウィジェットを選びます(表示するウィジェットを選ぶを参照)。棒グラフと円グラフには中サイズ、月初来の合計と過去7日間には小サイズが適しています。

結果:請求メトリクスが届くと、棒グラフに今月支出の多いサービスが表示され、その上に合計が表示されます。それまでは、ウィジェットにこの時間範囲のデータはありません。と表示されます。

iPhoneとiPadでは、合計はロック画面にも適しています。ロック画面のウィジェットには最新の値が表示されます。

ダッシュボードの仕組み

どのツールを使った場合も、最終的に次のダッシュボードができあがります:

spend-by-service.jsonダウンロード
{
  "start": "-P7D",
  "widgets": [
    {
      "type": "metric",
      "x": 0,
      "y": 0,
      "width": 12,
      "height": 8,
      "properties": {
        "title": "Top 5 services by spend",
        "view": "bar",
        "region": "us-east-1",
        "start": "-P1D",
        "stat": "Maximum",
        "period": 21600,
        "metrics": [
          [ "AWS/Billing", "EstimatedCharges", "Currency", "USD", { "label": "Total" } ],
          [ { "expression": "SORT(SEARCH('{AWS/Billing,Currency,ServiceName} MetricName=\"EstimatedCharges\" Currency=\"USD\"', 'Maximum', 21600), MAX, DESC, 5)", "label": "${PROP('Dim.ServiceName')}", "id": "top" } ]
        ]
      }
    },
    {
      "type": "metric",
      "x": 12,
      "y": 0,
      "width": 6,
      "height": 8,
      "properties": {
        "title": "Month-to-date spend",
        "view": "singleValue",
        "region": "us-east-1",
        "stat": "Maximum",
        "period": 21600,
        "sparkline": true,
        "metrics": [
          [ "AWS/Billing", "EstimatedCharges", "Currency", "USD", { "label": "Total" } ]
        ]
      }
    },
    {
      "type": "metric",
      "x": 18,
      "y": 0,
      "width": 6,
      "height": 8,
      "properties": {
        "title": "Last 7 days' spend",
        "view": "timeSeries",
        "region": "us-east-1",
        "start": "-P7D",
        "stat": "Maximum",
        "period": 86400,
        "yAxis": { "left": { "min": 0 } },
        "metrics": [
          [ { "expression": "IF(DIFF(m1) < 0, m1, DIFF(m1))", "label": "Spend", "id": "daily" } ],
          [ "AWS/Billing", "EstimatedCharges", "Currency", "USD", { "id": "m1", "visible": false } ]
        ]
      }
    },
    {
      "type": "metric",
      "x": 0,
      "y": 8,
      "width": 12,
      "height": 8,
      "properties": {
        "title": "Top 5 services' share of spend",
        "view": "pie",
        "region": "us-east-1",
        "start": "-P1D",
        "stat": "Maximum",
        "period": 21600,
        "metrics": [
          [ { "expression": "SORT(SEARCH('{AWS/Billing,Currency,ServiceName} MetricName=\"EstimatedCharges\" Currency=\"USD\"', 'Maximum', 21600), MAX, DESC, 5)", "label": "${PROP('Dim.ServiceName')}", "id": "share" } ]
        ]
      }
    }
  ]
}
  • 式の行が上位のサービスを自動で見つけます。SEARCHがすべてのサービスの推定請求額を検索し、SORT(…, MAX, DESC, 5)が上位5つを残します。新しく使い始めたサービスも自動的に表示されます。表示する数を増減するには、棒グラフと円グラフの式の末尾にある5を変更します(またはTopServicesパラメータかtop_services変数を変更します)。
  • ラベル${PROP('Dim.ServiceName')}により、各棒にはAmazonEC2やAWSLambdaのようにサービス名が付きます。CloudPeekは短い名前(EC2、Lambda)を多い順に表示し、収まらないものはその他にまとめます。
  • Currencyディメンションだけを持つ行は、今月これまでのアカウント全体の料金です。CloudPeekはこれを棒ではなくウィジェットの合計として表示するため、上位5つ以外のサービスも合計に含まれます。CloudWatchコンソールでは、棒が1本増えた形で表示されます。
  • 料金は月初からの累計なので、棒グラフと円グラフは過去1日だけを対象にします("start": "-P1D")。こうすることで、順位が先月ではなく今月の料金に基づきます。月初来の合計のスパークラインには、ダッシュボードの1週間を使います。
  • 過去7日間は、同じ月初来の料金を非表示のm1行から1日1回("period": 86400)読み取ったものです。DIFF(m1)は各日の増加分で、月初に料金がゼロに戻る日は、IF(… < 0, m1, …)が代わりに新しい月の料金を使います。
  • CloudPeekは、それぞれの日をタイムゾーンの午前0時から始まる1本の縦棒として描き、今日のこれまでの分を右端に表示します。CloudWatchコンソールにはこのようなグラフがないため、同じ日々を折れ線で描きます。
  • 請求が米ドルでない場合は、行と式にあるすべてのUSDを、お使いの通貨コードに変更してください。
  • 円グラフは棒グラフと同じ式を使いますが、合計の行はありません。そのため、各スライスは、上位5サービスの費用の合計に占める各サービスの割合です。CloudPeekはその合計を中央に表示します。
  • それ以外のすべてをその他のスライスとして円グラフに含め、中央にアカウント全体の料金を表示するには、棒グラフの合計の行を円グラフにコピーします。この場合、CloudWatchコンソールでは合計がスライスとしてもう1つ描かれます。

すべてのサービスの料金を見るには、us-east-1でCloudWatchを開き、すべてのメトリクス › Billing › サービス別を選択します。

各サービスの1日ごとの支出を1日1列で積み上げて表示するには、サービス別の日次支出プリセットを追加するか(支出のプリセットを参照)、「過去7日間のサービス別の日次支出を積み上げで」のようにAIウィジェットで説明します。各サービスの料金も月初からの累計なので、合計に対するDIFF(m1)と同じように、各サービスが1日ごとにどれだけ増えたかを計算します。

過去7日間の支出を1日1行で新しい順に表に表示するには、日次支出の表プリセットを追加するか、「過去7日間の支出の表、1日1行」のようにAIウィジェットで説明します。ダッシュボードでは、上のDIFF(m1)の行を、"view": "table"と"table": {"layout": "vertical"}を指定したウィジェットに入れたものになります。

アカウント別の支出

アカウントがAWS Organizationsにある場合、管理アカウントの請求メトリクスには、LinkedAccountディメンションによるアカウント別の料金もあります。支出の多いサービスではなく、今月支出の多い5つのアカウントをグラフにするには、棒グラフまたは円グラフで、サービスの式の行の代わりに次の式の行を使います:

式の行
[ { "expression": "SORT(SEARCH('{AWS/Billing,Currency,LinkedAccount} MetricName=\"EstimatedCharges\" Currency=\"USD\"', 'Maximum', 21600), MAX, DESC, 5)", "id": "accounts" } ]

または、「今月のアカウント別の支出」のようにAIウィジェットで説明します。1つのサービスなら、「過去7日間のアカウントごとのSQSの支出の積み上げ棒グラフ」のように説明します。アカウント別の日次支出プリセットは、すでに各アカウントの支出を1日1列で積み上げて表示します(支出のプリセットを参照)。

CloudWatchは、各アカウントを12桁のIDでしか識別しません。CloudPeekは代わりにアカウント名を表示します。名前は、次のうち最初に名前がわかったものから取得します:

  • AWS Organizations:組織内のすべてのアカウントの名前がわかります。CloudPeekのポリシーに含まれるorganizations:ListAccountsが必要で、応答するのは管理アカウント(または委任管理者アカウント)に対してだけです。CloudPeekは1日に1回問い合わせます。
  • IAM Identity Center(これでサインインした場合):サインインできるアカウントの名前。
  • 「アカウント」タブ:追加したアカウントに付けた名前。

どれからも名前がわからないアカウントは、IDのまま表示されます。AWS Organizationsに拒否された場合、CloudPeekは6時間後、またはウィジェットを更新したときに再度問い合わせます。

削除する

us-east-1のCloudWatchコンソールでダッシュボードを開き、CloudPeek-Spendを選んで削除を選択します。CloudPeekのアクセス権も削除するには、IAMコンソールでcloudpeekユーザーとCloudPeekポリシーを削除します。

シェル
aws cloudwatch delete-dashboards --region us-east-1 --dashboard-names CloudPeek-Spend

CloudFormationは、アクセスキーが残っているユーザーや、スタック外のものがまだ使っているポリシーを削除できません。先にユーザーのアクセスキーを削除し、ポリシーをすべての許可セットからデタッチしてから、スタックを削除します:

シェル
aws iam list-access-keys --user-name cloudpeek
aws iam delete-access-key --user-name cloudpeek --access-key-id <access-key-id>
aws cloudformation delete-stack --region us-east-1 --stack-name CloudPeek

IAMでは、アクセスキーが残っているユーザーや、ほかの場所にまだアタッチされているポリシーは削除できません。先にユーザーのアクセスキーを削除し、ポリシーをすべての許可セットからデタッチしてから、destroyを実行します:

シェル
aws iam list-access-keys --user-name cloudpeek
aws iam delete-access-key --user-name cloudpeek --access-key-id <access-key-id>
terraform destroy

トラブルシューティング

ウィジェットが空になる、またはダッシュボードに「利用可能なデータがありません」と表示される

請求メトリクスがまだCloudWatchに届いていません。このとき、CloudPeekのウィジェットには「BillingコンソールでCloudWatchの請求アラートを有効にしてください。1日以内に支出が表示されます。」と表示されます。請求メトリクスが有効になっていることを確認し(ステップ1)、数時間待ちます。その後、us-east-1のすべてのメトリクスでBilling名前空間を探します(メトリクスエクスプローラーには請求メトリクスが表示されません)。AWS Organizationsでは、組織全体の料金がわかる管理アカウントでこの設定を行います。組織内のほかのアカウントでは、ウィジェットに「このアカウントの支出は、組織の管理アカウントにあります。」と表示されます。

アカウントが番号で表示される

CloudPeekがアカウント名を見つけられませんでした。管理アカウントで、CloudPeekのサインインにorganizations:ListAccountsを追加するか、はじめにから更新されたテンプレートをデプロイしてから、ウィジェットを更新します。アカウント別の支出を参照してください。

サービスが表示されない

今月支出の多い上位5つに入っていません。表示数を増やすには、SORT式の末尾の数を大きくします(仕組みを参照)。そのサービスの料金は、すでに合計に含まれています。

合計が棒の合算より大きい

これは想定どおりです。合計は、上位5つ以外のサービスも含めた、今月これまでの請求額全体です。

その他

トラブルシューティングを参照するか、support@cloudpeek.appにメールでお問い合わせください。シークレットアクセスキーは絶対に送らないでください。