APIのレート制限は、Workload Securityのパフォーマンスを低下させる可能性のあるAPIコール数の急増を防ぐために、
/api
エンドポイントに設定されています。APIコール率は、過去60秒以内にWorkload Securityが受信したAPI呼び出しの数として測定されます。レート制限を超えた場合、コールレートがすべてのレート制限を下回るまでマネージャは要求を処理しません。
呼び出しが行われ、APIのレート制限を超えた場合、応答コードは
429
で、メッセージはToo many API requests
です。コード内のハンドル率制限エラー
SDKメソッドまたは関数が実行されるとき、環境内でAPIレート制限が超過されると、そのメソッドまたは関数は
ApiException
をスローし、メッセージToo many API calls
を表示します。このメッセージをテストするロジックをコードに含め、キャッチされた場合は一定時間待機してからスクリプトを再実行することを検討してください。レート制限を一貫して超過する場合は、トレンドマイクロ サポートに連絡してください。
レート制限を超えている間に行われた呼び出しは、APIレート測定にカウントされないことに注意してください。
SDKの
APIUsageAPI
クラスを使用して、呼び出し率を確認できます (APIレファレンスのAPI Usageを参照)。例えば、特定の期間に発生したすべてのAPI呼び出しを検索できます。返されたデータを解析して、合計呼び出し数をカウントします。また、コード429のレスポンス数も確認できます
(Date-range searchesを参照)。次の例では、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)