Usage Query API

最終更新日:2025-08-28 13:55:16

Object Storage Usage Query APIは、詳細な利用状況および請求データへのプログラムによるアクセスを提供します。パートナーやリセラーがサブアカウントまたは個別バケット単位で消費監視を自動化できるように設計されています。

概要

本APIは、以下を含む幅広い使用状況メトリクスを取得できます:

  • ストレージ利用量:標準、低頻度アクセス、アーカイブストレージクラス。
  • リクエスト数:読み取りおよび書き込みリクエスト。
  • データ取得:低頻度アクセスおよびアーカイブ階層のトラフィック。
  • トラフィックおよび帯域幅:CDNオリジントラフィック、エグレストラフィック、リージョン間レプリケーショントラフィック。
  • ファイル操作: ファイル操作の総数。

エンドポイント詳細

すべてのリクエストはPOSTメソッドを使用して本番エンドポイントに送信してください。

  • メソッド: POST
  • 本番URL: https://wos.cdnetworks.com/api/usage/statistics

注意: 本番環境ではHTTPSが必要です。HTTP経由のリクエストはリダイレクトされ、失敗する場合があります。

APIリクエストのワークフロー

  1. 前提条件:シークレットなapikeyを生成し、サポートチームに提供してバックエンド側で設定してください。
  2. 認証:リクエストに必要なDateおよびAuthorizationヘッダーを作成します。
  3. リクエスト:希望するクエリパラメーターでJSON形式のリクエストボディを作成します。
  4. 実行:本番エンドポイントにPOSTリクエストを送信します。
  5. レスポンス:JSONレスポンスを解析し、利用データを取得します。

認証

このAPIはカスタムHMAC-SHA256認証方式を採用しています。全てのAPIリクエストには、DateおよびAuthorizationヘッダーを含める必要があります。

APIを利用するには、usernameapikeyが必要です。apikeyはお客様自身で生成するシークレットキーです。APIアクセスを有効化するためには、このキーを当社のサポートチームにご提供いただき、バックエンド側での設定を行う必要があります。

認証手順

  1. 現在の時刻を取得:現在の時刻をRFC1123規格(例:Thu, 21 Jul 2025 07:54:00 GMT)に従ってフォーマットしてください。この文字列はDateヘッダーで使用されます。
  2. 署名の計算apikeyを鍵、Date文字列をメッセージとしてHMAC-SHA256署名を生成します。結果はBase64エンコードしてください。
    • 計算式password = Base64(HMAC-SHA256(UTF-8(apikey), UTF-8(Date)))
  3. 認可文字列を構築する:
    • ユーザー名:パスワードという形式の文字列を作成します。
    • ユーザー名:パスワード全体の文字列をBase64エンコードします。
  4. 認可ヘッダーを設定する: 最終的なヘッダー値は、Basic の後ろに前のステップでBase64エンコードされた文字列を連結したものです。
    • フォーマット: Authorization: Basic <Base64(ユーザー名:パスワード)>

データ単位

APIは、メトリックタイプに基づいて特定の単位で使用量データを返します:

  • ストレージメトリクスstorageSize):**メガバイト(MB)**で返却され、**2進法(base-1024)**で計算されます(1 MB = 1024 KB)。
  • トラフィックおよび帯域幅メトリクスoutTrafficinnerBandwidthなど):**メガバイト(MB)およびメガビット毎秒(Mbps)で返却され、それぞれ10進法(base-1000)**で計算されます。
  • リクエストおよび操作回数:整数で返却されます。

ヘッダー

ヘッダー 必須 説明
Authorization 必須 上述のプロセスで生成された認証トークン。
Date 必須 現在の時刻(RFC1123形式、例:Thu, 21 Jul 2025 07:54:00 GMT)。
Content-Type はい application/json に設定する必要があります。

リクエストボディパラメータ

パラメータ 必須 説明
startDate はい クエリ期間の開始日。フォーマット:YYYY-MM-DD
endDate はい クエリ期間の終了日。フォーマット:YYYY-MM-DD
statisticsType はい クエリする利用データのタイプ。利用可能なオプションについては下記の「統計タイプ」セクションをご参照ください。
storageRegion いいえ ストレージリージョンのカンマ区切りリスト(例:CN,US,SG)。省略した場合、全リージョンのデータが返されます。
storageType いいえ ストレージクラスを指定します。有効なオプション:StandardInfrequentAccessArchive。一度に指定できるタイプは1つのみです。
bucket いいえ 複数のBucket名をカンマ区切りで指定します。省略時はアクセス可能な全Bucketのデータを返します。
isGroupByBucket いいえ 使用データをBucketごとに分割して取得するには1に設定します。省略または0に設定すると集計値のみ返します。
groupBy いいえ データの時間単位を指定します。オプションはday(デフォルト)またはhourです。
day: 各日に対して1件の値を返します。storageSizeの場合はその日のピーク値、トラフィック及びリクエストはその日の累計です。
hour: 全ての指標タイプについて1時間ごとに詳細な値を返します。
timeZone いいえ クエリに使用するタイムゾーンを指定します。
サポートされる値GMT-12GMT+12(例:GMT+8GMT-5)。
デフォルトGMT+8
注意:レスポンスデータは指定したタイムゾーンに基づいて計算されます。無効な値の場合は400エラーとなります。
bandwidthAlgorithm いいえ 帯域の計算方式を指定します。このパラメータはstatisticsTypeinnerBandwidthまたはoutBandwidthの場合のみ有効です。有効なオプション:
ninetyFivePeak(デフォルト):95th percentile peak。
avgPeak:日々のピーク値の平均。
fourthPeak:4番目に大きいピーク値。
firstPeak:最大ピーク値。

統計タイプ(statisticsType

カテゴリ statisticsTypeの値 説明
ストレージ・リクエスト storageSize バケット内に保存されているデータ容量(Standard、Infrequent Access、Archive別に分類)。データは1時間ごとに更新されます。注:ストレージ容量の計算は1024進法(1TB=1024GB)で行われます。
numberOfRequests APIリクエスト数。リード(GETHEAD)およびライト(POSTPUTDELETE)リクエストの両方を含みます。ライトリクエストにはライフサイクル削除やストレージクラスの変更も含まれます。成功・失敗を問わず全てのリクエストがカウントされます。
データの取得と削除 infrequentAccessRestore Infrequent Accessストレージ内のファイルにアクセスした際に発生するデータ取得トラフィック量。
infrequentDelete 30日間の最小保存期間に満たないうちにInfrequent Accessストレージから削除されたデータ量。
archiveRestore Archiveストレージのファイルがリストア(解凍)された後に発生するデータ取得トラフィック量。
archiveDelete 60日間の最小保存期間に満たないうちにArchiveストレージから削除されたデータ量。
トラフィック・帯域幅 innerTraffic CDNetworksのCDN製品(Content AccelerationやMedia Accelerationなど)がObject Storageをオリジンとして利用する際に発生するCDN Origin Traffic。トラフィック量は1000進法(1TB=1000GB)で計算されます。
outTraffic Object Storageからパブリックインターネットへデータをダウンロードする際に発生する外向きトラフィック。トラフィック量は1000進法(1TB=1000GB)で計算されます。
innerBandwidth CDN Origin Bandwidth。返却される値はリクエスト内で指定されたbandwidthAlgorithmによって異なります。デフォルトは95パーセンタイルピークとなります。
outBandwidth 公衆インターネット向けのegress bandwidthです。返却値はリクエストで指定されたbandwidthAlgorithmに依存します。デフォルトは95th percentile peakです。
crossRegionTraffic クロスリージョンレプリケーションによってソースバケットから発生するEgressトラフィックです。トラフィックは1000進法(1TB = 1000GB)で計算されます。
操作 fileOpNumber 実行されたファイル操作の合計回数です。

使用例

例1:要約ストレージ使用状況の照会

このリクエストは、米国およびシンガポールリージョンの標準ストレージに関する一日の合計ピークストレージサイズを照会します。

リクエスト:

curl -X POST \
  https://wos.cdnetworks.com/api/usage/statistics \
  -H 'Authorization: Basic YOUR_AUTH_STRING' \
  -H 'Date: Thu, 21 Jul 2025 07:54:00 GMT' \
  -H 'Content-Type: application/json' \
  -d '{
    "startDate": "2025-07-10",
    "endDate": "2025-07-11",
    "storageRegion": "US,SG",
    "storageType": "Standard",
    "statisticsType": "storageSize"
'}


レスポンス:

{
    "code": "200",
    "message": "OK",
    "statisticsType": "storageSize",
    "data": [
        {
            "dataTime": "2025-07-10",
            "storage": "5120"
        },
        {
            "dataTime": "2025-07-11",
            "storage": "5180"
        }
    ]
}


注記: storageの値は、1日あたりのピーク値(MB)を表します。

例2:バケットごとのリクエスト数を照会する例

このリクエストは、バケットごとに日別の読み取りおよび書き込みリクエスト数を照会します。

リクエスト:

curl -X POST \
  https://wos.cdnetworks.com/api/usage/statistics \
  -H 'Authorization: Basic YOUR_AUTH_STRING' \
  -H 'Date: Thu, 21 Jul 2025 07:54:00 GMT' \
  -H 'Content-Type: application/json' \
  -d '{
    "startDate": "2025-07-10",
    "endDate": "2025-07-11",
    "statisticsType": "numberOfRequests",
    "isGroupByBucket": "1"
'}


レスポンス:

{
    "code": "200",
    "message": "OK",
    "statisticsType": "numberOfRequests",
    "data": [
        {
            "dataTime": "2025-07-10",
            "readRequests": {
                "bucket1": "15000",
                "bucket2": "25000"
            },
            "writeRequests": {
                "bucket1": "3000",
                "bucket2": "5000"
            }
        },
        {
            "dataTime": "2025-07-11",
            "readRequests": {
                "bucket1": "16500",
                "bucket2": "27500"
            },
            "writeRequests": {
                "bucket1": "3200",
                "bucket2": "5300"
            }
        }
    ]
}


エラーコード

ステータスコード エラーメッセージ 理由
400 Date In Headers Is Invalid Date ヘッダーが存在しないか、形式が正しくありません。
400 StartDate Invalid, Valid Format Is YYYY-MM-DD startDate パラメータの形式が正しくありません。
400 StatisticsType Invalid statisticsType の値が許可されていません。
401 Authorization Invalid Authorization ヘッダーが存在しないか、形式が正しくないか、不正です。
403 StartDate Can't Be Greater Than EndDate startDateendDate より後の日付になっています。
404 Bucket xx Not Found 指定されたバケットが存在しません。

Python コード例

import datetime
import hmac
import base64
import requests
import json
from hashlib import sha256


class UsageApiDemo:
    def get_gmt_date(self):
        """現在の時刻をRFC1123形式で生成します。"""
        gmt_format = '%a, %d %b %Y %H:%M:%S GMT'
        return datetime.datetime.utcnow().strftime(gmt_format)


    def get_auth_string(self, username, apikey, date_str):
        """完全な「Authorization」ヘッダー値を生成します。"""
        # 手順1:HMAC-SHA256署名を作成します。
        signature = hmac.new(apikey.encode('utf-8'), date_str.encode('utf-8'), sha256).digest()


        # 手順2:署名をBase64エンコードし、「password」を作成します。
        password = base64.b64encode(signature).decode('utf-8')


        # ステップ3:「username:password」文字列を作成し、Base64エンコードします。
        combined_str = f"{username}:{password}"
        encoded_auth_str = base64.b64encode(combined_str.encode('utf-8')).decode('utf-8')


        # ステップ4:'Basic 'を先頭に付加して最終的なヘッダー値を作成します。
        return f"Basic {encoded_auth_str}"


    def send_request(self, url, headers, body_params):
        """APIにPOSTリクエストを送信し、レスポンスを表示します。"""
        try:
            response = requests.post(url, data=json.dumps(body_params), headers=headers)
            response.raise_for_status()  # 不正なステータスコードの場合に例外を発生させます


            print(f"ステータスコード: {response.status_code}")
            print("レスポンスボディ:")
            print(json.dumps(response.json(), indent=4))


        except requests.exceptions.RequestException as e:
            print(f"エラーが発生しました: {e}")


if __name__ == '__main__':
    # --- ユーザー設定 ---
    USERNAME = 'your_username'
    APIKEY = 'your_apikey'
    API_HOST = 'https://wos.cdnetworks.com'
    API_URI = '/api/usage/statistics'


    # --- リクエストの構築 ---
    api_demo = UsageApiDemo()


    # 1. 日付を取得する
    date_header = api_demo.get_gmt_date()


    # 2. 認証情報を取得する
    auth_header = api_demo.get_auth_string(USERNAME, APIKEY, date_header)


    # 3. ヘッダーを定義する
    request_headers = {
        'Date': date_header,
        'Authorization': auth_header,
        'Content-Type': 'application/json'
    }


    # 4. ボディの定義
    request_body = {
        "startDate": "2025-04-01",
        "endDate": "2025-04-02",
        "statisticsType": "storageSize",
        "storageType": "Standard"
    }


    # 5. リクエストを送信
    full_url = API_HOST + API_URI
    api_demo.send_request(full_url, request_headers, request_body)