Pocket

SharePoint Online は、CSOM や REST API の呼び出しにスロットリングが設けられており、頻繁にリクエストを送っているとサーバー側から実行が制限されてしまいます。どのくらいの頻度でリスエストを送ると制限されるのかについては、情報が公開されていないので悩むところではあるのですが…、この制限を超えるとサーバーからは「429」または「503」のコードが返ってきます。

この制限の回避策についてはリファレンスが公開されています。

SharePoint Online で調整またはブロックを回避する
https://docs.microsoft.com/ja-jp/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online

回避策のひとつは、制限されることを前提にしたリトライ処理をあらかじめ組み込んでおくことです。PowerShell での実装については、以前に Microsoft のサポートチームがブログで書いてくれていますね。

PowerShell サンプル : SharePoint Online HTTP 調整 (応答コード : 429) 対策の増分バックオフ リトライ
https://blogs.technet.microsoft.com/sharepoint_support/2016/10/08/powershell-csom-sample-code-for-spo-http-429-incremental-backoff-retry/

もうひとつの回避策は、HTTP リクエストに決められた命名規則の User Agent を含めることとあります。リファレンスには「適切に装飾されたトラフィックは、不適切な装飾を施したトラフィックより優先されます。」とあるので、制限される頻度を低くできる可能性があるのだと思います。

というわけで、PowerShell で CSOM を扱うときにどのように User Agent を含めたら良いかについてメモしておきます。

Read More