Boxアダプター FAQ

Boxアダプターのよくある質問にお答えします。

Boxからのファイルダウンロード、Boxへのファイルアップロードがエラーになる

以下の内容について、ご確認をお願いいたします。


1.レート制限エラー

ネットワークリソースを保護し、サービスの品質を担保するために、Boxはレート制限を設けてBoxAPIコールの回数を制限しています。
そのため、Boxアダプターから実行されるAPIコールの回数がレート制限に達すると、レート制限エラーになります。
Boxコンポーネントの実行中にレート制限エラーが発生した場合は、フローサービスログに下記のようなエラーメッセージが出力されます。

The API returned an error code [429 | リクエストID(16桁)] rate_limit_exceeded - Request rate limit exceeded, please try again later

Boxコンポーネントの実行中にエラーが発生した場合、原因がレート制限かどうかを確認するためには、フローサービスログを参照して上記のエラーメッセージが出ているか検索してください。

エラー原因がレート制限だった場合は、Boxコンポーネントから実行されるAPIコールの頻度を下げる必要があります。
ASTERIA Warpでこれに対応する場合、例えばフローでループ処理を使用して繰り返しBoxコンポーネントを実行しているのであれば、一定間隔でsleepを入れて実行間隔を空けるなどの対策が有効です。

レート制限には下記の種類があります。

  • ユーザーベース:1人のユーザーが1分間に実行できるAPIコール数の制限
  • サービスの品質:Boxの負荷が急増したとき、Boxサービスの品質を保護するために一時的に課せられる制限
  • ライセンスベース:ネットワークリソースの過剰供給や乱用を防ぐことを目的とした、1か月あたり1社ごとに許可されるAPIコール数の制限

また、APIごとにもいくつかの異なるレート制限が設けられています。
詳しくは下記のサイトをご参照ください。
https://ja.developer.box.com/guides/api-calls/permissions-and-errors/rate-limits/

処理対象のファイルやフォルダが少ないにもかかわらず、レート制限エラーになる場合は次のような原因が考えられます。

①処理対象ファイルのフォルダ階層が深い
処理対象のファイルをファイルパスで指定している場合、フォルダ階層が深いとAPIコール数が増える(※)ため、レート制限に達する可能性があります。
※フォルダ階層が1階層下がるごとにAPIが実行される

この場合、ファイルパス指定からファイルID指定に変更すればAPIコールを減らせるため、エラーの解消が期待できます。

②Boxサービスの負荷が高い
前述したようにBoxの負荷が急に高まった場合、Boxはサービスの品質を保護するために予告なくレート制限を課すことがあります。そのため、処理対象のファイルやフォルダの数に関わらずレート制限エラーが発生する可能性があります。
この場合は、しばらく時間を置いてからエラーになった処理を再実行し、エラーが解消することを確認してください。



2.Boxの障害によるエラー

Boxコンポーネントの実行がエラーになる原因としては、Boxサービス自体で障害が発生している場合があります。
下記サイトにて、Boxで発生している障害が確認できます。
※エラー発生時の詳細につきましては、Box社またはBoxサポートベンダーへお問い合わせください。
https://status.box.com/

障害が回復したのち、エラーが解消されていることを確認してください。



3.一時的な通信障害によるエラー

一時的な通信障害が発生し、BoxアダプターとBoxAPI間の通信が途切れることでエラーが発生する場合があります。
通信障害はサーバーや通信機器の速度が遅い、老朽化している、あるいは電波干渉が生じているなど、稼働環境によってさまざまな原因が考えられます。
しかし、発生が予測できないのと、発生しても記録が残らないことも多いため、明確な原因が特定できないことも多いでしょう。

Boxアダプターを利用したアプリケーションが、一時的な通信障害の影響を受けにくくなるよう、フロー内で一定時間ごとにBoxアダプターの処理を何度かリトライし、自動リカバリーできるような仕組みを導入しておくことをおすすめします。



4.Boxへの通信が許可されていない

①ファイアウォールの設定画面を開き、Boxのサービスやアプリケーションを利用するために必要なポートが許可されているかどうか確認してください。
許可が必要なポート番号は443です。
ポート443が許可されていない場合は、設定を追加して許可してください。

②Boxのサービスやアプリケーションを利用するために必要なドメイン/ホスト名が、ファイアウォールの許可リストに登録されているかどうか確認してください。
登録されていない場合は、下記の記事の「1a.Boxの主要ドメイン」に記載されているサブドメインをすべて登録してください。
https://support.box.com/hc/ja/articles/360043696434-Boxアプリケーション用のファイアウォールの設定

ワイルドカードドメインを登録できない場合は、次のように固有のホスト名を許可してください。
※以下のドメインは、Boxアダプターからアクセスされるため許可が必要です。

  • api.box.com
  • dl.boxcloud.com
  • upload.app.box.com
  • upload.box.com

③セキュリティーソフトによってBoxとの通信がブロックされていないか確認してください。



5.ファイルの分割アップロードによるエラー

Boxアダプターのファイルアップロードコンポーネントは、ファイルサイズが20MBを超えるとファイルを分割してアップロードする仕様です。分割アップロードの処理は、アップロード前にアップロードセッションを確立し、アップロード終了後にセッションをコミットする仕組みになっています。そのため、分割アップロード中に同じファイルに対して別のプロセスが更新すると、セッションをコミットできずエラーになります。
ファイルの分割アップロードによるエラーが発生したときは、フローサービスログに下記のようなエラーメッセージが出力されます。

Unable to commit the upload session

Boxコンポーネントの実行中にアップロードエラーが発生した場合、原因がファイルの分割アップロードによるエラーかどうかを確認するためには、フローサービスログを参照して上記のエラーメッセージが出ているか検索してください。
分割アップロードによるエラーを回避するためには、ファイルアップロードコンポーネントを使用しているフローに、次のような仕組みを導入しておくことをおすすめします。

①アップロード対象のファイルサイズをチェックし、20MB以上の場合は一定時間のスリープを入れる
ファイルアップロードコンポーネントを使用したフローで、例えば、すでにBoxに存在するファイルを削除してから同名のファイルを分割アップロードするなど、Boxに対して同じファイルを立て続けに更新する処理には効果的です。
これは、Boxサービスの負荷が高まっているなどの原因で、BoxアダプターからのAPIコールが滞留することが考えられるためです。
Boxアダプターから同名ファイルに対する複数の更新系APIコールが実行された場合、APIの処理が滞留して実行が同時になってしまうとエラーが発生しますが、フロー側にスリープを入れることで同時実行される確率が下がります。

②アップロード対象のファイルサイズをチェックし、Mutexコマンドを使用して排他制御を入れる
同じファイルに対して更新を実行する可能性のあるフローが複数あり、同時実行される可能性もある場合はこの対策が有効です。
一方のフローが終了するまで同時実行させないことで、同じファイルに対する更新を避けることができるため、エラーが発生する確率が下がります。

上記で解決しない場合は、「asteria_support@isi-grp.co.jp」までお問い合わせください。
お問い合わせの際には下記の情報をご提供いただきますよう、よろしくお願いいたします。

①ASTERIA Warpのバージョン
②OSとOSのバージョン
③Javaのバージョン
④Boxアダプターのバージョン
→確認先フォルダ:[DATA_DIR]\system\lib\components\isiBoxAdapter-1712.[バージョン].jar
※[DATA_DIR]のデフォルト=C:\asteriahome5[c,cp]\system\lib\components
⑤接続テストでエラーになった場合はエラーの画面キャプチャー
⑥フローの実行でエラーになった場合は事象発生時の各種ログ
[DATA_DIR]/logディレクトリ配下にあります以下のファイルをご提供ください。
asteria.log(.yyyy-MM-dd)
asteria-console.log(.yyyy-MM-dd)
FlowAccess.log(.yyyy-MM-dd)
FlowCompile.log(.yyyy-MM-dd)
FlowService.log(.yyyy-MM-dd)
mcapi-access.log(.yyyy-MM-dd)
mcapi.log(.yyyy-MM-dd)

※エラーが発生した時刻もあわせてお知らせください。