Closed1

Shopify の BulkOperation が遅すぎる問題への対応

malanmalan

Shopify 上の商品数がとても多い店舗で全商品を取得するような BulkOperation を叩くと、全然ステータスが COMPLETED にならない場合がある。
serverless な環境を構築していると Lambda や Cloud Functions なんかの実行時間制限に引っかかってしまっていつまで経っても終わらない。

while 文なんかで currentBulkOperation を監視しながら待っていてもキリがないので一度の実行で完了を待つのは潔く諦めよう。
一度 bulkOperationRunQuery を叩くと、ほっといても Shopify 側で完了するまで勝手に処理し続けてくれるので、定期的に currentBulkOperation.status を見に行くような関数を作ってあげるとよい。

例えば1時間ごとに定期実行する関数を用意したとして、中身はこのようになる。

  1. currentBulkOperation.status === 'COMPLETED' なら currentBulkOperation.url から JSONL ファイルを取得する(currentBulkOperation.status === 'RUNNING' なら関数を即座に終了)
  2. JSONL ファイルを元にいろいろ処理する
  3. 処理が終わったら bulkOperationRunQuery を実行しておく

これでリアルタイム性は損なわれるものの、当初の目的であった商品全件取得は達成される。

このスクラップは2021/03/25にクローズされました