如何用Terraform(google/provider ≥4.0.0)实现GCP Cloud SQL导入存储桶SQL Dump?
用Terraform实现Cloud SQL SQL文件导入(等价于
gcloud sql import sql) 你可以直接使用Terraform Google Provider的google_sql_import_job资源来实现和gcloud sql import sql完全等价的操作,无需依赖本地执行命令。以下是具体实现方案:
核心配置代码
假设你已经创建了Cloud SQL实例、目标数据库和存储桶,只需添加以下资源定义:
resource "google_sql_import_job" "sql_dump_import" { provider = google # 或google-beta,版本≥4.0.0均支持 name = "import-sql-dump-${timestamp()}" # 生成唯一Job名称,避免重复执行冲突 instance = google_sql_database_instance.my_mysql_instance.name database = google_sql_database.my_database.name import_context { file_type = "SQL" uri = "gs://${google_storage_bucket.sql_dump_bucket.name}/sql-dump.sql" # 若你的实例需要指定导入用户(如root),可取消注释以下配置 # user = "root" } # 确保所有前置资源就绪后再执行导入 depends_on = [ google_sql_database_instance.my_mysql_instance, google_sql_database.my_database, google_storage_bucket.sql_dump_bucket ] }
关键注意事项
- 权限配置:必须确保Cloud SQL实例的服务账号拥有存储桶的
storage.objects.get权限,否则导入会失败。可通过以下IAM资源配置:
resource "google_storage_bucket_iam_member" "sql_import_access" { bucket = google_storage_bucket.sql_dump_bucket.name role = "roles/storage.objectViewer" member = "serviceAccount:${google_sql_database_instance.my_mysql_instance.service_account_email}" } # 将IAM权限配置加入导入Job的依赖链 resource "google_sql_import_job" "sql_dump_import" { # ... 原有配置 depends_on = [ google_sql_database_instance.my_mysql_instance, google_sql_database.my_database, google_storage_bucket.sql_dump_bucket, google_storage_bucket_iam_member.sql_import_access ] }
Job唯一性:
name字段必须唯一,使用timestamp()可以保证每次执行terraform apply时生成新的Job名称,适合需要重复导入的场景。如果只需要执行一次,也可以手动指定固定名称,但后续修改配置时不会重新触发导入。超时处理:若导入的SQL文件较大,可通过
timeouts块延长等待时间:
resource "google_sql_import_job" "sql_dump_import" { # ... 原有配置 timeouts { create = "2h" # 根据文件大小调整,默认超时时间可能不足 } }
内容的提问来源于stack exchange,提问作者agotfrid
相关产品推荐
相关产品推荐

