Cloud Runの429エラー
beaverjr
Cloud Runの429エラーに遭遇したので学びをまとめました。
エラー内容
HTTP 429
The request was aborted because there was no available instance.
The Cloud Run service might have reached its maximum container instance
limit or the service was otherwise not able to scale to incoming requests.
This might be caused by a sudden increase in traffic, a long container startup time or a long request processing time.
公式より
通常の状況では、受信トラフィックの負荷を処理するために、新しいインスタンスを作成して、リビジョンをスケールアウトします。ただし、最大インスタンス数の上限を設定すると、トラフィック負荷を処理できるインスタンスが不足することがあります。その場合、受信リクエストは最大 10 秒間キューに入る場合があります。この時間枠内に、インスタンスがリクエストの処理が完了すると、キューに入れられたリクエストを処理できるようになります。この時間枠内で使用可能になるインスタンスがない場合、リクエストは失敗し、429 エラーコードが表示されます。
https://cloud.google.com/run/docs/about-instance-autoscaling?hl=ja
学び
- 上限を高く設定しても、リビジョンが指定した数のインスタンスにスケールアウトされるわけではない
- 逆に最大インスタンス数を超える場合もある
- リクエスト数が増えたわけではなさそう&CPU使用率も低そうなのにスケールする場合がある。挙動はブラックボックス
- 最大インスタンス数を引き上げておくことで429エラーは解消された事例あり(ただし増えすぎると困るので監視など運用でカバーする必要あり。)