YSNHatenaBlog

主にアプリやWebサービス開発について

Cloud Functionsのonly, exceptオプションについて調査したこと

Cloud Functionsの数が増えてくるとこんな感じのエラーが返ってきてデプロイに失敗する。

FirebaseError: HTTP Error: 429, Quota exceeded for quota group 'Write' and limit 'Write requests per 100 seconds' of service 'cloudfunctions.googleapis.com' for consumer 'project_number:XXXXXXXXXXXX'. To see usage, go to https://console.cloud.google.com/iam-admin/quotas?quota_group=Write&limit=CLIENT_PROJECT-100s&qs_error_code=INSUFFICIENT_TOKENS&project=my-project&service=cloudfunctions.googleapis.com. To request a quota increase, see https://cloud.google.com/functions/quotas.

100秒間に80回の書き込みの制限にひっかかっている。毎回onlyつける手もあるが、全Functionをデプロイする機会も結局発生すると思う。制限を上げる依頼をすることも可能そうだが、まずは制限を越えぬようにデプロイできないかを考えてみる。

※ 制限を上げる依頼はできなそう(https://cloud.google.com/functions/quotas#footnote

1 書き込みの割り当てを引き上げることはできません。割り当て不足は通常、次のいずれかが原因で発生します。 高頻度で多数の関数を同時または順次にデプロイする CI / CD システムを使用している。 Firebase CLI を使用して複数の関数を同時にデプロイしている。

すぐ思いつくのはonlyのオプションを使ってちょっとずつ関数をデプロイしていく方法だが、Functionをindex.jsから削除した場合に、全Functionデプロイ時に削除されるかが気になったので調査。

onlyオプションでグループを指定した場合は削除される

グループを指定した場合は、同一グループ内で減ったFunctionがある場合は、デプロイ時にその関数が削除される。( --force を入れなければ確認される)

グループ化してないFunctionは削除できなそう

それではグループ化していないFunctionを消す場合はどうしたらいいかを考えた場合、 firebase deploy --only functions --except functions:<全グループ> みたいに書けばグループ化してないFunctionだけ残るのではないかと思ったのだが、--except ではFunctionsのグループを指定することはできない模様。基本的にはサービス名を指定して使うものに見える(--except firestore とか、 --except functions とか)。

というわけでグループ化してないFunctionは手動で消すしか無い。

結論

Functionを作る際は、何でもいいのでグループで囲った方がよさそう。