超要約
- microCMSのAPIはまれにエラーレスポンスを返すことがある
- その場合再ビルドが必要
- リトライオプションを有効にすると、再ビルドしなくても自動的に解決してくれるかもしれない
きっかけ
私が担当しているプロジェクトではmicroCMSで記事系のコンテンツを作成しています。
▼ざっくりな構成とか情報
- フレームワーク: Next.js
- フロントエンドのホスティング: Amplify
- microCMSのデータを使うページの一部はSSGにしている
ある日、本番環境のデプロイでビルドエラーになりました。
ステージング環境では問題なかったけど何か問題があったんだろうか?
とりあえずログを見てみよう。
[WARNING]: Error: fetch API response status: 500
このような表示が。
場所を見てみると、microcms-js-sdk
のモジュールっぽいところで起きていることが分かりました。
なんかサーバーのエラーっぽいけどとりあえずAmplify再デプロイしよう。
🎉今度はデプロイ無事に成功🎉
とりあえず解決してよかったけど、なんだったんだろう..?
そういえば前にも謎のビルドエラー出て再デプロイしたら何事もなかったように復活したなぁ。ちょっと調べてみよう。
とググったところ、こちらの本家の記事を見つけました。
あ、たぶん今回のエラーめっちゃこれじゃん!
しかもこの対処法が最近追加されてる!!
ってことで勢いでQiita書いてます。
ビルド落ちる問題の背景
microCMSのAPIはリクエストが集中した際に500系のエラーレスポンスが返ることがあるようです。
(リクエスト集中したら落ちたりするのはmicroCMSに限った話ではないと思いますが)
microCMSのAPIはサーバレスアーキテクチャを採用し、大量のリクエストにも対応できる構成となっていますが、短時間に極度にリクエストが集中した際に、まれに500番台のエラーレスポンスが返却されることがあります。
ログのエラーメッセージとも合致するので、おそらく今回私が遭遇したのはこいつです。
その他にもmicroCMSの仕様として、GET APIの呼び出し回数が1秒あたり60回を超えた場合、429 Too Many Requestsのステータスコードが返却されるようになっています(制限事項)。SSGのようなアーキテクチャを採用し並行してビルドを行う際に、意図せずこちらの制約に抵触してしまう場合がありました。
また、短い間にめちゃくちゃ頻繁にAPIが呼び出されるような場合には429のステータスコードが返るようになっているようで、意図せずこのケースにハマってしまうこともあるようです。
これらのエラーが発生すると、多くは再ビルドする必要があります。
リトライオプションの有効化
createClientをしているファイルにretry: true
を追加するだけ!
これでAPIのエラーが返却された際に、自動的にリトライを行なってくれるようです。
const client = createClient({
serviceDomain: "YOUR_DOMAIN",
apiKey: "YOUR_API_KEY",
retry: true // この1行を追加するだけ!
});
注意点として、404が返ってくるようなリトライをしても解決されない可能性が高い場合には、リトライは行われないとのこと。
APIの500エラーを試せないので検証はしてないですが、今後同じようなエラーが出た際に再ビルドすることが減りますように!!
という願いを込めて1行追加しました。
補足
microcms-js-sdk
のver2.4.0で追加されたようなので、それ以下のバージョンを使っている場合はバージョンアップが必要です。
おわりに
「エラーが出ても再ビルドすればいいだけじゃん」といえばそうなのですが、
ビルド失敗
ってのを見ると一瞬ヒヤッとしません?
水面下でしれっとリトライして解消していてくれるのならそれが精神衛生的にもいいはずです!
ありがとうmicroCMSさん!
ブログいつも分かりやすいです!!