在将我们现有的基础设施迁移到;基础设施即代码";在安装程序中,我们还需要导入一个现有的Firebase项目。
遵循GCP beta Terraform提供商的说明。以下代码段已添加到相应的地形模块中。
resource "google_firebase_project" "default" {
provider = google-beta
project = "my-project-id"
}
现有Firebase项目的导入是通过运行命令启动的
terraform import google_firebase_project.default my-project-id
这导致了以下输出:
google_firebase_project.default: Importing from ID "my-project-id"...
google_firebase_project.default: Import prepared!
Prepared google_firebase_project for import
google_firebase_project.default: Refreshing state... [id=projects/my-project-id]
Error: Error when reading or editing FirebaseProject "projects/my-project-id": googleapi: Error 403: Your application has authenticated using end user credentials from the Google Cloud SDK or Google Cloud Shell which are not supported by the firebase.googleapis.com. We recommend configuring the billing/quota_project setting in gcloud or using a service account through the auth/impersonate_service_account setting. For more information about service accounts and how to use them in your application, see https://cloud.google.com/docs/authentication/.
使用服务帐户运行Terraform或使用最终用户帐户模拟服务帐户时出现错误。所有身份都具有相应GCP项目的所有者权限。
您的错误消息与您对firebase地形资源的使用没有直接关系,而是与您不能与人类用户对话firebase API这一事实有关。相反,您应该创建一个服务帐户,例如terraform
,授予它创建firebase资源所需的权限,并授予用户模拟服务帐户的权限。
然后你需要像一样配置你的GCP提供商
provider "google" {
impersonate_service_account = "terraform@my-gcp-project.iam.gserviceaccount.com"
}
provider "google-beta" {
impersonate_service_account = "terraform@my-gcp-project.iam.gserviceaccount.com"
}
建议在共享项目中创建一个地形服务帐户,并使用它通过地形创建所有其他资源。另请参阅https://github.com/terraform-google-modules/terraform-google-bootstrap对于这种模式。