10000ファイルの壁とは?
Google App Engineを触ったことのない方だと10000ファイルの壁と聞いてもピンとこないと思いますGoogle App Engineではデプロイするファイルの差分が10000ファイル以下だと以下のようなエラーが表示され、デプロイできないという仕様になってます
個人的には10000なんてすぐに超えてくるので全然足りないと日々ぼやいてますが。。。
$ gcloud app deploy
ERROR: (gcloud.app.deploy) INVALID_ARGUMENT: This deployment has too many files. New versions are limited to 10000 files for this app.
- '@type': type.googleapis.com/google.rpc.BadRequest
fieldViolations:
- description: This deployment has too many files. New versions are limited to 10000
files for this app.
field: version.deployment.files[...]
これを回避する方法は主にこんなところではないでしょうか
- 上限を上げる
- ファイル数を削減する(デプロイしないファイルを設定する)
- Cloud Storageにアップロードして使用する
ファイル数の上限を上げる
真っ先に思いつくのが上限は引き上げれないのかどうかではないでしょうか? これに対する公式のドキュメントの中で以下のように書かれてますIs your app exceeding the default limits? If you have Silver, Gold, or Platinum support package, you can contact your support representative to request higher throughput limits
アプリはデフォルトの制限を超えていますか?シルバー、ゴールド、またはプラチナのサポートパッケージをお持ちの場合は、サポート担当者に連絡して、より高いスループット制限をリクエストできます。
ここで言われているシルバーやゴールドなど組織でGoogle Cloudなどを使っていてさらに課金をしていると受けられるサポートのランクなのですが、詳しくはここに乗ってます
ただ、あくまでリクエストができるだけなので、確実に上げられるわけではないので注意が必要です。
つまり、個人で使っている場合は制限を上げることはできないというのが結論になります。
ファイル数を削減
Google CloudではGithubなどでいう`.gitignore`と同じようにデプロイしないファイルを選択する`.gcloudignore`というファイルが**gcloud init**を実行した際に作られ、そこに記述されたファイルのデプロイを行いません。 書き方をいくつか紹介しますが詳細は[こちら](https://cloud.google.com/sdk/gcloud/reference/topic/gcloudignore)を確認してください #デプロイしないファイル
.gcloudignore
sample
aa.php
#ワイルドカードで複数ファイルも指定できる
*bar
samp*as
#デプロイしないディレクトリ
/node_modules/
Cloud Storageにアップロードして使用する
App Engineにデプロイしようとすると10000ファイルの制約がありますが、Cloud Storageならば10000ファイルの制限もなく自由にアップロードすることができます。 なので、画像や動画、データファイル。テストデータなどはCLoud Storageにアップロードしてからその保管場所を指定して参照してやると便利です。 Cloud Storageに関する記事はいくらでもあるので、自分がわかりやすいと思ったものを使ってみてください![10/6 追記]サービスを複数のブロックに分ける
yamlファイルを各ブロックに配置することで、複数のブロックを1つのサービスとして運用できるようです。 これにより分けた1つずつのブロックに10000ファイルの制約が掛かり、負荷を分散することができます。 自分もあまり理解ができなかったのですが、[こちら](https://cloud.google.com/appengine/docs/standard/php7/configuration-files)が公式ドキュメントになるので、わかる方がおられたら教えていただけると嬉しいです!!あとがき
冒頭でもいいましたが、10000ファイルなんてライブラリをインストールしたりしていると簡単に超えるのでもっと上限を上げてほしいですし、せめて個人利用でも課金すれば簡単に上限を上げれるようにしてほしいです。Firebaseが使いやすかっただけあり、Google CloudのUIやサービスはあまり好きにはなれそうにありません。。。回避策として、サービスを細かく分割して、小さなサービスとして扱うことで各サービスに10000ファイルの上限をつけれるらしいですがやり方がわからなかったので、知っておられる方がおられたら教えてください!