Terraform创建GCP App Engine时获取默认服务账号为空报错求助
解决方案:Terraform创建GCP App Engine并授权默认服务账号
问题根源在于新项目中,App Engine应用尚未创建时,google_app_engine_default_service_account 数据资源会在Terraform计划阶段尝试获取服务账号信息,但此时服务账号还未生成,导致返回null,进而在拼接IAM成员字符串时报错。以下是两种可行的解决方法:
方法1:为数据资源添加依赖关系
给数据资源添加depends_on,强制Terraform先完成App Engine应用的创建,再去获取服务账号信息:
resource "google_app_engine_application" "app" { project = var.project_id location_id = var.region } data "google_app_engine_default_service_account" "default" { project = var.project_id depends_on = [google_app_engine_application.app] } resource "google_project_iam_member" "secretmanagerSecretAccessor" { project = var.project_id role = "roles/secretmanager.secretAccessor" member = "serviceAccount:${data.google_app_engine_default_service_account.default.email}" }
方法2:直接从App Engine资源获取服务账号(推荐)
google_app_engine_application资源创建成功后会自动输出service_account_email属性,直接使用该属性即可,无需额外的数据资源,彻底避免依赖时序问题:
resource "google_app_engine_application" "app" { project = var.project_id location_id = var.region } resource "google_project_iam_member" "secretmanagerSecretAccessor" { project = var.project_id role = "roles/secretmanager.secretAccessor" member = "serviceAccount:${google_app_engine_application.app.service_account_email}" }
内容的提问来源于stack exchange,提问作者passer
相关产品推荐
相关产品推荐

