まらんさんのチラ裏

その日暮らしのおじさん

firebase functions が一括デプロイできなかったのをなんとかした件

シンプルに firebase deploy --only functions としていたらある日突然エラーが出てデプロイできなくなった。
仕方なく、
firebase deploy --only functions:aaa,functions:bbb,functions:ccc
という感じで1度にデプロイする function の数を10個に制限して分割デプロイしていました。
が、これがめちゃくちゃ時間がかかって、デプロイに1時間ぐらい要することになってしまい、「まあそれでもデプロイできないよりは…」ということでしばらく放置していたんですけど流石につらみが増してきてちゃんと対応しようということに。

参考にした記事はこちら:

zenn.dev

#!/bin/sh
PROJECT="your project id"
CONTAINER_REGISTRY="asia.gcr.io/$PROJECT/gcf/asia-northeast1"
IMAGE_LIST=`gcloud container images list --repository=$CONTAINER_REGISTRY | awk 'NR!=1'`
for line in $IMAGE_LIST; do
  gcloud container images --project $PROJECT delete "$line/worker" --quiet & gcloud container images --project $PROJECT delete "$line/cache" --quiet &
done
wait

GCF の images をすべて削除して functions をデプロイし直すというもの。
このスクリプトを走らせてもいいし、Console から手動でポチっと削除してもいいしどちらでも。
記事中でもダウンタイムは発生しないと書かれていたのですが流石に怖いので手元で実験しつつ問題ないことを確認して本番に適用。

当初心配していたダウンタイムも発生しなければ、一部の functions に割り当てた固定IPアドレスの設定も消えることなくすんなりとすべてが解決し、いまでは1時間かかっていたデプロイが元通りの処理時間になり、10分ほどでデプロイできるようになりました。

とっても感謝です。