こんにちは。virapture株式会社でCEOしながらラグナロク株式会社でもCKOとして働いている@mogmetです。
今回はcloud functionsのデプロイにまつわるトラブルシュートな内容を共有します。
node versionの問題の解決法
下記のようなエラーが出たときの問題の対処法です。
Build failed: Build error details not available.Please check the logs at https://console.cloud.google.com/cloud-build/builds;region=asia-northeast1/xxx-xxxx-xxx-xxx?project=xxx. Please visit https://cloud.google.com/functions/docs/troubleshooting#build for in-depth troubleshooting documentation for build related errors.
以前こんな記事を書きましたが、実は根本的な解決にはなってませんでした。
どうやらデプロイするnodeのバージョンがあってないために起こっていたエラーだったようなのでcloud functionsのengineのnodeのバージョンをあげることで解決しました。
ということで早速engineのバージョンを16にあげます。
{
...
"engines": {
"node": "16"
},
}
次にfirebase-toolsも新しくしましょう。
$ npm install -g firebase-tools
firebase-toolsのバージョンを上げておかないとデプロイ時に下記のようなエラーが出ます。
⚠ functions: package.json indicates an outdated version of firebase-functions.
Please upgrade using npm install --save firebase-functions@latest in your functions directory.
Artifact Registryの問題の解決法
node16の世界へようこそ!
しかし、次にデプロイに待ち受けるエラーとして下記のようなエラーが出ることがあります。
Cloud Functions uses Artifact Registry to store function docker images. Artifact Registry API is not enabled in your project. To enable the API, visit https://console.developers.google.com/apis/api/artifactregistry.googleapis.com/overview?project=xxx or use the gcloud command 'gcloud services enable artifactregistry.googleapis.com' then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
どうやらArtifact Registry APIを有効化しろとのこと。
エラーログにはurlがのってますが、そこからやっても有効化はできませんでした。
そのためログで言われてる通り下記のコマンドを実行してあげましょう。
$ gcloud services enable artifactregistry.googleapis.com
もしupdateしてねと言われたらgcloud components update
を実行した上でもう一度やってみましょう。
Updates are available for some Google Cloud CLI components. To install them,
please run:
$ gcloud components update
configのエラーの問題の対処法
次にこんなエラーが言われた場合の対処方法です。
✔ functions: required API cloudbuild.googleapis.com is enabled
Error: Cloud Runtime Config is currently experiencing issues, which is preventing your functions from being deployed. Please wait a few minutes and then try to deploy your functions again.
Runfirebase deploy --except functions
if you want to continue deploying the rest of your project.
こちらにも書いてありますが、firebase functions:configの影響でこけます。
secret managerに移行するでもいいのですが、.runtimeconfig.jsonから自分は同期をとるようにしたかったため、頑張って解決しました。
原因は新しいバージョンから変数名にキャメルケースを使うと落ちるみたいです。(新しいバージョンではスネークケースを使ってほしいみたい)
しかしソースの修正が面倒だったので無理くり実装しました。
それが下記コマンドになります。
$ cat .runtimeconfig.json | jq -r \"to_entries[]| [.key, (.value | tojson)] | join(\\\"='\\\")\" | sed -e \"s/}$/}'/\" | xargs firebase -P dev functions:config:set
このコマンドを使うとよしなにキャメルケースで環境変数をセットしてくれます。
これで無事にデプロイもすることができました。
まとめ
新しいバージョンは割と罠も多いので古いプロジェクトをupdateするときは気をつけましょう。
最後に、ワンナイト人狼オンラインというゲームを作ってます!よかったら遊んでね!
他にもCameconやOffcha、問い合わせ対応が簡単にできるCSmartといったサービスも作ってるのでよかったら使ってね!
また、チームビルディングや技術顧問、Firebaseの設計やアドバイスといったお話も受け付けてますので御用の方は弊社までお問い合わせください。
ラグナロクでもエンジニアやデザイナーのメンバーを募集しています!!楽しくぶち上げたい人はぜひお話ししましょう!!