deployment quotaに引っかかってCloudFunctionsのデプロイができない原因と対策
こんにちは。もぐめっとです。
今回は埼玉クエストというところの一枚なのですが、最近テレビで夏でもスノーボードやスキーが楽しめる場所として紹介されたらしいのですが、そもそもスノボガチ勢じゃないとブラシで滑るって中々大変なので普通の人は気軽には来れないんじゃないか・・・と思ったりしてます。
本日はCloudFunctionsをデプロイする時に制限にひっかかったためその原因と対策を紹介します。
原因
ある日、CloudFunctionsをデプロイしようとしたら。。。
⚠ functions[******(asia-northeast1)]: Deployment error.
You have exceeded your deployment quota, please deploy your functions in batches by using the --only flag, and wait a few minutes before deploying again. Go to https://firebase.google.com/docs/cli/#deploy_specific_functions to learn more.
こんなエラーがでて一部CloudFunctionsのデプロイにこけてしまいました。
原因としてはエラーの表記通り、デプロイの制限に引っかかってしまったようです。
こちらより、割当の状況を確認すると夏のトマトが美味しく感じられるほど真っ赤になってました。
デプロイするCloudFunctionsの数が増えてしまったせいと考えられます。
対策
stack overflowには制限を増やせばいいよと入っているのですが、対象となっているAPIは残念ながらもう既にマックスまで振られていて変更ができませんでした。。。
またマニュアルにもこのような一文が添えられています
重要: 割り当てのエラーやその他のサーバーエラーが発生しないように、各デプロイ オペレーションの関数グループのサイズを 10 以下に制限してください。
ということで、デプロイを分割してやるようにしてみました。
方法としてはグループとしてCloudFunctionsを登録してグループごとにCloudFunctionsをデプロイできるようにしました。
import * as admin from 'firebase-admin'
admin.initializeApp()
const sugoiFunctions: { [key: string]: string } = {
onUserCreated: './functions/onUserCreated'
...
}
const yabaiFunctions: { [key: string]: string } = {
onContentCreated: './functions/onContentCreated'
...
}
function setExports(functions: { [key: string]: string }, rootKey: string) {
exports[rootKey] = {}
Object.keys(functions)
.filter((name) => {
return !process.env.FUNCTION_NAME || process.env.FUNCTION_NAME === name
})
.forEach((name) => {
exports[rootKey][name] = require(functions[name]).default
})
}
// 定義した内容をexportsに追加する
setExports(sugoiFunctions, 'sugoi')
setExports(yabaiFunctions, 'yabai')
npm run deploy-functions
でfunctionsをデプロイできるようにしておきます。
functions以外をデプロイできるようにexceptを使ってその他のデプロイは行います。
{
"scripts": {
"deploy": "./node_modules/.bin/firebase deploy -f --token=$FIREBASE_TOKEN --except functions",
"deploy-functions": "./node_modules/.bin/firebase deploy --only functions:sugoi --token=$FIREBASE_TOKEN && ./node_modules/.bin/firebase deploy --only functions:yabai --token=$FIREBASE_TOKEN"
...
}
}
これで分割デプロイができるようになりました!
注意点
分割したことにより、エンドポイント名も変更になるので、httpsCallableとかを使ってる場合は適宜、名前を変更しないといけなくなります。
例えば、今回の例でいうとsugoi-onUserCreated
といった形でグループ名が頭につくようになりますので、フロント側や、firebase.jsonなどもかえてあげましょう。
また、グループを新規に追加した場合は、package.jsonも追加しないといけないので忘れないように注意です。
まとめ
プロジェクトが大きくなってくると制限にひっかかるので、適宜分割してデプロイしてあげましょう!
最後に、ワンナイト人狼オンラインというゲームを作ってます!よかったら遊んでね!
他にもCameconやOffchaといったサービスも作ってるのでよかったら使ってね!
また、チームビルディングや技術顧問、Firebaseの設計やアドバイスといったお話も受け付けてますので御用の方は弊社までお問い合わせください。
Author And Source
この問題について(deployment quotaに引っかかってCloudFunctionsのデプロイができない原因と対策), 我々は、より多くの情報をここで見つけました https://qiita.com/mogmet/items/4b015ef1d44b79cffe4a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .