
Spanner 基础设施即代码基于 Terraform 的 Cloud Spanner 实例与数据库管理实践【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills本文以spanner-basics技能中的 Terraform 参考文档为主线讲解如何通过 Google Cloud Terraform Provider 以基础设施即代码IaC方式构建、变更并版本化 Cloud Spanner 的实例与数据库并结合技能库中的核心概念与 CLI 参考说明各资源参数含义、IAM 资源管理与安全操作边界帮助读者把 Spanner 的日常运维纳入可审查、可复现的 Terraform 工作流。一、文档定位spanner-basics 技能中的 Terraform 参考在当前仓库中spanner-basics 是面向 Cloud Spanner 的基础技能用于辅助完成实例与数据库的创建、高性能 Schema 设计以及数据查询。README.md 将其归类在 “Databases and analytics” 板块。该技能通过 Reference Directory 组织多份参考文档其中 terraform-usage.md 专门回答一个问题如何用 Terraform 构建、变更并版本化 Spanner 基础设施。与之配套的其他参考文档各有分工理解这种分工有助于把 Terraform 参考放回整体工作流中参考文档关注点core-concepts.mdSpanner 架构、一致性模型与多 SQL 方言cli-usage.mdgcloud spanner命令行操作iam-security.md角色、权限与数据治理最佳实践client-library-usage.mdJava、Go、Python、Node.js 客户端库terraform-usage.md本文主线Terraform 资源配置schema-design.md主键选择与交错表设计core-concepts.md 对 Spanner 的定位是一个完全托管的、面向关键业务mission-critical的数据库服务兼具关系型数据库结构与非关系型的水平扩展能力提供全局事务一致性与自动同步复制的高可用并支持 GoogleSQL 与 PostgreSQL 两种 SQL 方言面向需要强一致性、最高 99.999% 可用性的工作负载。把这样的基础设施交给 Terraform 管理意味着实例规格、地域配置、访问控制策略都能随代码一起进入版本库与代码评审流程而不是一次性的控制台点击操作。二、Provider 支持的 Spanner 资源terraform-usage.md 明确指出Google Cloud Terraform Provider 支持以下四个 Spanner 资源google_spanner_instance创建和管理 Spanner 实例承载计算能力与存储配额的顶层容器google_spanner_database在指定实例下创建数据库google_spanner_instance_iam管理实例级 IAM 访问策略google_spanner_database_iam管理数据库级 IAM 访问策略。从资源命名结构看前两者对应“资源本体”后两者对应“资源之上的授权”。这种拆分是 Google Provider 的典型模式数据面资源与安全面资源解耦使不同团队例如平台组管实例、业务组管库级授权可以在同一套 Terraform 工程中按模块划分职责。实例级授权适合授予“管理整个实例”的平台角色数据库级授权则适合按库收敛权限——具体的角色选择与治理实践技能库将其放在 iam-security.md 中说明这里不展开。三、完整示例配置创建实例与数据库原文档给出的完整示例如下本文在其基础上补充逐参数注释# 创建 Spanner 实例所有数据库必须挂载在某个实例之下 resource google_spanner_instance example { name example-instance # 实例名项目内唯一 config regional-us-central1 # 实例配置地域形态与位置 display_name Example Instance # 人类可读的展示名称 nodes 1 # 固定节点数本例为最小规模起步 } # 创建数据库通过引用实例资源建立隐式依赖 resource google_spanner_database example { instance google_spanner_instance.example.name # 依赖实例确保实例先创建完成 name example-database }3.1 实例资源参数解读结合示例代码可以确认各字段的语义name实例名称是后续google_spanner_database.instance引用以及 CLI 中--instance参数所使用的标识config取值形如regional-us-central1编码了部署形态regional 表示多区域冗余与位置前缀。选择它时要与业务的地域合规要求和时延预期匹配这也是为什么示例特意给出而非省略该字段display_name仅用于展示便于在控制台与gcloud spanner instances list输出中辨认实例nodes节点数量决定实例的吞吐与存储容量基线。示例采用nodes 1是典型的最小起步配置。值得注意的是cli-usage.md 展示了gcloud spanner instances create除了固定节点--nodes1外还支持自动扩缩容模式--autoscaling-min-nodes1 --autoscaling-max-nodes3。对照之下可以看出本文档示例演示的是最直接的固定节点形态属于 Terraform 配置 Spanner 的最小可用范式若需要在 IaC 中表达自动扩缩容策略应在 Provider 文档中查阅实例资源的对应字段而技能库本身只承诺了上述示例所覆盖的基本用法。3.2 数据库资源与隐式依赖google_spanner_database通过instance google_spanner_instance.example.name引用实例资源这行引用让 Terraform 自动解析出依赖关系保证terraform apply时先创建实例、再创建数据库无需手工控制顺序name为数据库名称对应 CLI 中gcloud spanner databases create name --instanceinstance的第一个位置参数。数据库创建之后表结构DDL并不在此示例中出现。这与技能库的整体分工一致SKILL.md 的 “Schema Evolution DDL” 工作流规定模式变更CREATE/ALTER/DROP 表与索引通过gcloud spanner databases ddl update应用而主键选择与交错表设计遵循 schema-design.md。换言之Terraform 负责“实例与库”这层基础设施Schema 层由 CLI 工作流管理——读代码或 Agent 执行任务时应清楚这一边界。四、与 CLI 工作流的对照将 Terraform 示例与 cli-usage.md 中的命令并排对照可以确认两者管理的是同一组资源操作gcloud CLITerraform本文示例创建实例固定节点gcloud spanner instances create my-instance --configregional-us-central1 --descriptionMy Instance --nodes1google_spanner_instance资源创建实例自动扩缩容gcloud spanner instances create ... --autoscaling-min-nodes1 --autoscaling-max-nodes3见 3.1 说明需查 Provider 文档创建数据库gcloud spanner databases create my-database --instancemy-instancegoogle_spanner_database资源授权IAM 相关命令角色与治理见 iam-security.mdgoogle_spanner_instance_iam/google_spanner_database_iam资源创建备份gcloud spanner backups create my-backup --instance... --database... --retention-period7d技能库未在此参考中覆盖这种对照的价值在于一次性操作如临时备份、临时查询gcloud spanner databases execute-sql my-database --instancemy-instance --sqlSELECT 1留在 CLI而需要长期维护、需要评审与回滚的基础设施变更进入 Terraform。五、安全边界变更 Spanner 资源前必须显式确认技能库对 Spanner 操作设定了明确的安全约束SKILL.md 的 Safety 部分要求在对非模拟器环境执行任何 DML/DDL 变更或破坏性操作如删除表、索引或其他 Spanner 资源之前必须获得用户的显式确认。不得自动执行应输出命令例如gcloud spanner databases ddl update并请求用户明确批准。这一约束对 Terraform 工作流同样适用并映射为以下实践先terraform plan后apply任何会变更 Spanner 实例规格、节点数或授权策略的提交都应让 plan 输出可被评审警惕terraform destroy删除实例是不可逆操作属于上述“破坏性操作”范畴执行前必须获得显式批准。对生产环境尤其要像 Cloud SQL 参考中对deletion_protection的处理那样可对照 cloud-sql-basics 的 iac-usage.md 中“生产环境防止误删”的注释风格在流程上设置门禁访问失败时不阻塞SKILL.md 同时规定当数据库访问不可用或认证失败时不应反复尝试验证实例、数据库或表是否存在而应假定提供的资源存在并直接生成 DDL 命令——这条规则保证 IaC 生成流程不被网络或凭据问题卡死。六、在仓库中继续阅读主线参考terraform-usage.md —— 四个支持资源与完整示例配置技能入口SKILL.md —— 核心原则性能优先、避免单调主键热点、优先交错表、安全约束与常见工作流配套参考core-concepts.md、cli-usage.md、iam-security.md、client-library-usage.md、schema-design.md同构对照cloud-sql-basics 的 iac-usage.md 展示了仓库内另一款数据库产品 Terraform 参考的写法可比较deletion_protection、备份配置等生产化细节的组织方式。按此脉络读者可以先用本文的 Terraform 配置完成“实例 数据库 IAM”的基础设施声明再依据 cli-usage 与 schema-design 的参考完成 DDL 演进与查询验证从而在spanner-basics技能覆盖的完整生命周期内以代码化管理 Spanner。【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考