はじめに
最近、Stream Firestore to BigQuery を利用しており、Firebase FirestoreのデータをリアルタイムでBigQueryにストリーミングしようと試みた際、特定のエラーに遭遇しました。この記事では、そのエラーの内容、試みた解決策、そして最終的な解決方法について説明します。
解決方法
まずは結論から。
Firebase Extention で設定しているサービスアカウントから何故か Editor 権限が削除されていたため、付与しました。
エラーの内容
Stream Firestore to BigQuery をデプロイしようとした際、次のエラーメッセージが表示されました。
RESOURCE_ERROR at /deployments/firebase-ext-firestore-translate-text/resources/serviceAccount-firestore-translate-text: {"ResourceType":"gcp-types/iam-v1:projects.serviceAccounts","ResourceErrorCode":"403","ResourceErrorMessage":{"code":403,"message":"Permission 'iam.serviceAccounts.create' denied on resource (or it may not exist).","status":"PERMISSION_DENIED","details":[{"@type":"type.googleapis.com/google.rpc.ErrorInfo","reason":"IAM_PERMISSION_DENIED","domain":"iam.googleapis.com","metadata":{"permission":"iam.serviceAccounts.create"}}],"statusMessage":"Forbidden","requestPath":"https://iam.googleapis.com/v1/projects//serviceAccounts","httpMethod":"POST"}}
試したこと
このエラーを解決するために、以下の手順を試みました。
- ユーザーに「オーナー」権限を付与
- 「Cloud Tasks Enqueuer」「Cloud Datastore User」権限を持っているサービスアカウントを作成
- 他の拡張機能をインストール(同様のエラーが表示され、インストールできない)
- Stream Firestore to BigQueryをアンインストール(同様のエラーが表示され、アンインストールできない)
これらの方法ではエラーを解決できません。
解決までの手順
まずはエラー文で検索すると、下記の Issue を発見しました。
【日本語訳】
私の場合、クラウドサービスのアカウントに十分な権限がなくなっていました。どうやら、途中で紛失してしまったようです...。
Google Cloud API Service Agent (@cloudservices.gserviceaccount.com) に必要なロールが全て入っていることを確認してください。デフォルトでは「Editor」(roles/editor)になっているはずです。
そして権限を追加します。
具体的な手順は以下の通りです。
- Google Cloud Console にアクセスし、プロジェクトを選択します。
- 左側のナビゲーションメニューで「IAM と管理」を選択し、「IAM」をクリックします。
- サービスアカウントの一覧から、エラーで言及されているサービスアカウントを見つけます。
- サービスアカウントの横にあるペンシルアイコンをクリックして編集画面に移動します。
- 「役割を追加」ボタンをクリックし、「プロジェクト」カテゴリの中から「エディター」役割を選択し、追加します。
- 変更を保存します。
これにより、サービスアカウントにエディター権限が付与され、Stream Firestore to BigQuery のデプロイが正常に完了しました。
まとめ
今回の記事では、Stream Firestore to BigQuery のデプロイ時に遭遇したエラーと、その解決方法について解説しました。原因は、サービスアカウントからエディター権限が削除されていたことでした。
Google Cloud Platform (GCP) の権限管理は複雑であり、エラーが発生することがあります。権限に関するエラーに遭遇した場合は、サービスアカウントの役割と権限を確認し、適切な権限が付与されているかどうかを確認してください。また、公式ドキュメントや関連する GitHub Issue を参照することで、同様の問題に対処した他のユーザーからの解決策が得られることがあります。
今後も、技術的な問題や解決方法について共有していきますので、引き続きご覧いただければ幸いです。