1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Nuxt3 & Firebase環境で、Cloud Functions 1 Genを2 Genへマイグレーションするときの手順

Last updated at Posted at 2024-10-24

概要

  • 最近Cloud FunctionsがCloud Run Functionsにアップグレードされた
  • Nuxt3をFirebaseへデプロイすると、Firebase HostingとSSR等のためにCloud Functionsへデプロイされる
    • 手順
    • Nitroがやってくれている
  • アップグレードされたCloud Functionsへマイグレーションしたいなと思い試したところハマったのでメモする

前提

  • Nuxt3とFirebaseを利用している
  • Cloud Functionsは1 Genを利用している

マイグレーション手順

まず注意する点があります。Cloud Functions 1 Genをすでに利用している場合は、設定を変更しても2 Genとしてデプロイすることができません。

同じ名前の関数がある場合は、一度削除する必要があります。ただ、削除後デプロイという手順を踏むとサービスに影響を与えてしまうので(そのタイミングでフロントロードしようとするとエラーになる)、影響ないようにしたいです。

今回の手順は影響がないようにマイグレーションします。

nuxt.config.tsを変更する

おそらくですが、Nuxtの手順通りで1 Genを利用している場合、Cloud Functions上での関数名は server になっていると思います。先ほどあげたハマりポイントとして、この名前を変更してデプロイしないと、デプロイ途中で失敗してしまうので、これを変更します。

Nuxt3は内部でNitroを利用しているので、2 Genを利用するように修正します。

nuxt.config.ts
// ...
  nitro: {
    preset: 'firebase',
    firebase: {
+     serverFunctionName: 'nuxtServer', // こいつを足す
      nodeVersion: '20',
      gen: 2, // 2 genを利用するようにする
      region: 'us-central1'
    }
  },
// ...

このとき、serverFunctionNameを指定することで、先ほど問題になるぞと書いたCloud Functionsの名前 server 問題を修正することができます。これでデプロイすると、nuxtServerという名前の関数が作成されるようになります。

firebase.jsonを変更する

次に、firebase.jsonを修正します。これもNuxtの手順通りに行っているのであれば下記のようになっているはずですが、変更します。

firebase.json
// ...
  "functions":
  [
    {
      "source": ".output/server",
      "codebase": "nuxt-server",
      "runtime": "nodejs20"
    }
  ],
  "hosting": [
    {
      "site": "dev-cabin",
      "public": ".output/public",
      "cleanUrls": true,
      "ignore": [
        "**/_nuxt/*.map",
        "firebase.*json",
        "**/.*",
        "**/node_modules/**"
      ],
      "rewrites": [
        {
          "source": "**",
-         "function": "server"
+         "function": "nuxtServer"
        }
      ]
    }
  ],
// ...

Firebase hosting側のrewrites -> function の名前をnuxt.config.tsserverFunctionNameで設定した名前に変更します。

デプロイ

デプロイしましょう。

$ NITRO_PRESET=firebase yarn build && \
firebase --project ${PROJECT_ID} \
    --config firebase.json deploy \
    --only functions:nuxt-server,hosting \
    --force

これでデプロイできると思います。デプロイするとnuxtServerがCloud Run Functionsの画面に表示されていると思います。

1 Gen関数の削除

すべてのアクセスが、2 Genへ流れていることが確認できたら、1 Genを削除しましょう。これで完了ですー!

雑感

Cloud FunctionsからCloud Runベースになったのでまだまだわからないことが多いです

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?