目次
このページのトピック

APIレートの上限

/api エンドポイントにはAPIレート制限が設定されており、Workload Securityのパフォーマンスを低下させる可能性のあるAPIコール数の急増を防ぎます。

APIコール率は、過去60秒以内にWorkload Securityが受信したAPI呼び出しの数として測定されます。レート制限を超えた場合、コールレートがすべてのレート制限を下回るまでマネージャは要求を処理しません。

呼び出しが行われ、APIレートの上限を超えた場合、応答コードは 429 で、メッセージ Too many API requestsが表示されます。

コード内のハンドル率制限エラー

APIメソッドまたはAPI関数の実行時に、環境内でAPIレートの上限を超えた場合、そのメソッドまたは関数は、メッセージ Too many API callsとともに ApiException をスローします。このメッセージの除外をテストし、catchされた場合は一定の時間待機してから再度スクリプトを実行するロジックをコードに含めてください。

レート制限を継続的に超過する場合は、トレンドマイクロ サポートにお問い合わせください

レート制限を超えている間に行われた呼び出しは、APIレート測定にカウントされないことに注意してください。

SDKのAPIUsageAPIクラスを使用して、コールレートを決定できます (「APIリファレンス」のAPIの使用状況をレファレンス/参照情報)。たとえば、特定の期間に発生したすべてのAPIコールを検索できます。返されたデータを解析して、呼び出しの総数をカウントします。また、Code 429の応答数も確認できます (日付範囲の検索 を参照)。

次の例では、APIレート制限を超えたときに発生する例外またはエラーをキャッチします。検出されると、指数バックオフアルゴリズムによって、コールが再試行されるまでの遅延が計算されます。再試行回数の上限は次のとおりです。

ソースを表示

while True:

    # Create a computer object and set the policy ID
    computer = api.Computer()
    computer.policy_id = policy_id
    try:
        # Modify the computer on Workload Security and store the ID of the returned computer
        computer = computers_api.modify_computer(computer_ids[change_count], computer, api_version, overrides=False)
        modified_computer_ids.append(computer.id)
        retries = 0

        # Increment the count and return if all computers are modified
        change_count += 1
        if change_count == len(computer_ids):
            return modified_computer_ids
    except api_exception as e:
        if e.status == 429 and retries < MAX_RETRIES:
            # The error is due to exceeding an API rate limit
            retries += 1

            # Calculate sleep time
            exp_backoff = (2 ** (retries +3)) / 1000
            print("API rate limit is exceeded. Retry in {} s.".format(exp_backoff))
            time.sleep(exp_backoff)
        else:
            # Return all other exception causes or when max retries is exceeded
            return "Exception: " + str(e)