0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ここのえAdvent Calendar 2023

Day 14

Cloud Functionsのデプロイ時に色々はまった

Last updated at Posted at 2023-12-13

この記事は ここのえ Advent Calendar 2023 Day 14 の記事です。

Cloud Functionsのここに気を付けよう 2023

Advent Calendar の11日目の記事でも書いたのですが、ちょっと前にGCPのCloud Functionsを使い始めました。

前回は無料枠周りで引っかかった話だったのですが、それ以外にも細々としたところで悩んだ箇所があったので、その辺の情報の共有です。

Cloud Functionsで.gcloudignoreを作るときの注意

GCPには .gcloudignore というignoreファイルを書くと、デプロイ時に無視してくれるという特徴があります。

Cloud Functionsのデプロイで、バンドルをデプロイしようとすると対象ファイルはごく一部だけなので、こんな感じの .gcloudignore を書きます。

.gcloudignore
*
!dist
!package.json

package.jsonでは"main": "dist/index.js" を書いているので、本来であればこれは動くはずなのですが、実際には 正常にデータをデプロイできず、ビルドが失敗 します。

これについてはStackOverFlowに投稿があります。

実はCloud FunctionsとApp Engineなどで .gcloudignore の実装が違う(?)のか、Cloud Functionsの時だけ「カレントディレクトリそのものを無視する」という謎の挙動になり、* を入れると想定外の挙動が起き、正常にデプロイされないのでCloud Buildが走らなくなるようです。

一番無難なのは、素直にignoreしていくことです…

.gcloudignore
.idea
.parcel-cache
node_modules
src
.env
.eslintrc.cjs
.gitignore
tsconfig.json

gcp-buildに空の値は入れられない

今回の環境ではローカルでビルドしたものをデプロイするようにしたので、クラウド上でTypescriptのビルドや、ESLintを走らせたくありませんでした。
またdepDependencies に入れてあるので、GCP上でビルドが走ったらパッケージ不足でビルドがコケてしまいます。これを回避しようとします。

ドキュメントを見ると、以下のように記載されています。

デフォルトでは、package.json で build スクリプトが検出されると、Node.js ランタイムによって npm run build が実行されます。アプリケーションを開始する前にビルドステップをさらに制御する必要がある場合は、gcp-build スクリプトを package.json ファイルに追加することで、カスタム ビルドステップを提供できます。

次のいずれかの方法で、ビルドで npm run build スクリプトが実行されないようにすることができます。

  • package.json ファイルに "gcp-build":"" という値を持つ gcp-build スクリプトを追加します。

そこで package.json をこうします。

package.json
"scripts": {
  ...
  "build": "parcel build --no-source-maps",
  "gcp-build": ""
},

そうするとこうなります。

error An unexpected error occurred: "Script must exist".

実は 空の gcp-build を作るというのは罠 で、これを消しても特に問題ありませんでした。

ビルド時のログに特にエラーが出ていないので、buildが走ったような感じもしません(ParcelもdevDependenciesなのでインストールされないはずです。またsrcもデプロイしてないですし、万が一parcelが動いてもコケるはずです)。

邪推ですが、Cloud Functionsでのビルド処理はbuildを見ずに gcp-build を呼び出すように変わったのでしょうか?

いずれにせよ真相は闇の中です……

まとめ

自分がGCP慣れしていないのもそうですが、さすがにドキュメントの通りやったら足をすくわれるのは勘弁してくれ~って感じです。

GCPといいAWSといい、実際に触ってないとわからない知見が多すぎるので、使いこなすのはまさに職人技ですね……

クラウドの道は一日にしてならず、ってコト!?

参考

  • .gcloudignoreのやつ

めちゃくちゃ困っている時にこの記事のコメントに助けられました。本当にありがとうございました🙇

  • gcp-build の罠

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?