🔥

Next.js を Firebase Hosting でデプロイして GitHub Actions も設定する際に必要なこと

2024/10/12に公開

はじめに

VercelCloudflare Pages などのサービスを使うことで、Next.js アプリケーションを簡単にデプロイすることができますが、実は Firebase Hosting でも Next.js アプリケーションをデプロイすることができたので試してみました。

https://firebase.google.com/docs/hosting/frameworks/nextjs?hl=ja

Firebase CLI で 様々な設定ができますが、その中で GitHub Actions も設定できます。

https://firebase.google.com/docs/hosting/github-integration?hl=ja

firebase init hosting:github

が、これだけではデプロイができませんでした。
追加でいくつか設定をする必要があったので、その際に必要なことをまとめます。

結論

2024/10/12 時点では以下を設定する必要がありました。

各エラーについて

GitHub Actions を実行し、Error の下の方に書いてあることを実行し、次のエラーが出る。ということを複数回繰り返しました。
以下が今回出てきたエラーです。

Permissions denied enabling artifactregistry.googleapis.com.

Permissions denied enabling artifactregistry.googleapis.com.
Please ask a project owner to visit the following URL to enable this service:

https://console.cloud.google.com/apis/library/artifactregistry.googleapis.com?project={__project_id__}

Artifact Registry API を使うそう

Cloud Functions deployment requires the Cloud Build API to be enabled. The current credentials do not have permission to enable APIs for project {__project_id__}.

Error: Cloud Functions deployment requires the Cloud Build API to be enabled. The current credentials do not have permission to enable APIs for project {__project_id__}.

Please ask a project owner to visit the following URL to enable Cloud Build:

https://console.cloud.google.com/apis/library/cloudbuild.googleapis.com?project={__project_id__}

Cloud Build API を使うそう

Permissions denied enabling run.googleapis.com.

Error: Permissions denied enabling run.googleapis.com.
Please ask a project owner to visit the following URL to enable this service:

https://console.cloud.google.com/apis/library/run.googleapis.com?project={__project_id__}

Cloud Run Admin API を使うそう

Permissions denied enabling eventarc.googleapis.com.

Error: Permissions denied enabling eventarc.googleapis.com.
Please ask a project owner to visit the following URL to enable this service:

https://console.cloud.google.com/apis/library/eventarc.googleapis.com?project={__project_id__}

Eventarc API を使うそう

Missing required permission on project {__project_id__} to deploy new HTTPS functions. The permission cloudfunctions.functions.setIamPolicy is required to deploy the following functions:

Error: Missing required permission on project {__project_id__} to deploy new HTTPS functions. The permission cloudfunctions.functions.setIamPolicy is required to deploy the following functions:

- {__function_name__}

To address this error, please ask a project Owner to assign your account the "Cloud Functions Admin" role at the following URL:

https://console.cloud.google.com/iam-admin/iam?project={__project_id__}

GitHub Actions のサービスアカウントに Cloud Functions Admin のロールを付与する必要があるそう。
元々は Cloud Functions Developer がついていたはず。

Caller is missing permission 'iam.serviceaccounts.actAs' on service account

"HTTP Error: 403, Caller is missing permission 'iam.serviceaccounts.actAs' on service account projects/-/serviceAccounts/{__hoge_compute__}.gserviceaccount.com.
Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/{__hoge_compute__}.gserviceaccount.com.
You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/{__hoge_compute__}.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser'where MEMBER has a prefix like 'user:' or 'serviceAccount:'.
Details and instructions for the Cloud Console can be found at https://cloud.google.com/functions/docs/reference/iam/roles#additional-configuration.

GitHub Actions のサービスアカウントに サービス アカウント ユーザー のロールを付与する必要があるそう。

こちらのサイトを参考にさせていただきました。

https://qiita.com/MAKOTO1995/items/130a87e485b1d275fa04

おわりに

CLI で簡単に設定ができるのはありがたいのですが、デプロイしようとして初めて気が付く設定が多い(しかも一つずつ潰していくことになる)のは難点ですね。
公式ドキュメントにもそれらしいことは書いていないので、何かミスをしていたのかも...?

同じエラーに遭遇した人の参考になれば幸いです。

Firebase App Hosting について

https://firebase.google.com/docs/app-hosting?hl=ja

Firebase App Hosting というものも最近追加されたようです。
が、色々と試しているうちに無料枠で使える枠がなくなり詰んでしまったので、今回は Firebase Hosting の webframeworks 機能を使っています。
(無料で一つ、バックエンドだったか何かを作れるのですが、削除しても枠が戻りませんでした 😭)

GitHubで編集を提案

Discussion