将 Cloud Spanner 与 Terraform 结合使用

1. 概览

上次更新日期:2020 年 7 月 23 日

什么是 Cloud Spanner?

Google Cloud Spanner 是一种遍布全球且符合 ACID 标准的数据库,可自动进行副本、分片和事务处理,因此您可以快速扩容以满足任何使用模式的要求,确保产品获得成功。

主要功能

  • 可灵活扩缩的关系型数据库:从架构、SQL 查询到 ACID 事务,关系型数据库应有的一切功能都具备,久经考验,且随时可以在全球范围内扩缩。
  • 可用性达 99.999%:Cloud Spanner 可为多区域实例提供业界领先的 99.999% 可用性(与 99.99% 的可用性相比,停机时间是其十分之一),还可跨单区域和多区域配置提供透明的同步复制功能。
  • 自动分片:Cloud Spanner 可根据请求负载和数据大小自动分片,从而提升性能。因此,您不必太担心如何对数据库进行扩容,从而可以专注于扩展业务。

查看所有功能

学习内容

  • 如何使用 Google Cloud Terraform 提供程序。
  • 使用 Terraform 创建 Cloud Spanner 实例和数据库。
  • 使用 Terraform 修改 Cloud Spanner 资源。
  • 使用 Terraform 删除 Cloud Spanner 资源。

2. 设置和要求

自定进度的环境设置

如果您还没有 Google 账号(Gmail 或 Google Apps),则必须创建一个。登录 Google Cloud Platform Console ( console.cloud.google.com) 并创建一个新项目:

50983ac3fdbbf8d0.png

ea581205026ca8e3.png

请记住项目 ID,它在所有 Google Cloud 项目中都是唯一的名称(上述名称已被占用,您无法使用,抱歉!)。它稍后将在此 Codelab 中被称为 PROJECT_ID

接下来,您需要在 Cloud 控制台中启用结算功能,才能使用 Google Cloud 资源。

在此 Codelab 中运行仅花费几美元,但是如果您决定使用更多资源或继续让它们运行,费用可能更高(请参阅本文档末尾的“清理”部分)。

Google Cloud Platform 的新用户有资格获享$300 免费试用

Authentication

如果您之前未安装过 gcloud 命令行工具,请先安装。安装 gcloud 后,在终端中运行以下命令,激活应用默认凭据:

$ gcloud auth application-default login

Terraform

如果您之前未安装 Terraform,请安装 Terraform

3. Google Cloud Terraform 提供程序

Google Cloud Terraform Provider 提供以下四种 Cloud Spanner 资源:

在此 Codelab 中,我们将创建和管理 Cloud Spanner 实例和数据库。

环境

在开发环境中,为 Terraform 配置文件创建一个新目录。

$ mkdir ~/terraform-spanner
$ cd ~/terraform-spanner

然后,创建一个名为“main.tf”的文件,其中包含以下内容,并将 PROJECT_ID 替换为您自己的 Google Cloud 项目 ID:

$ cat >> main.tf <<'EOF'
provider "google" {
  project = "PROJECT_ID"
}
EOF

在此 Codelab 的其余部分,我们将修改此文件并应用更改。

4. 创建实例和数据库

使用以下内容修改 main.tf 以添加新的 Cloud Spanner 实例:

provider "google" {
  project = "PROJECT_ID"
}

resource "google_spanner_instance" "main" {
  config       = "regional-us-central1"
  display_name = "first-terraform-instance"
  num_nodes    = 3
}

运行以下命令以应用更改:

$ terraform apply
# ...
Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes
# ...
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

应用更改后,您将能够在 Google Cloud 控制台中看到该实例。请注意,创建实例后,您将无法修改区域配置。

48b67416982fa152.png

创建实例后,我们将在后续步骤中创建数据库。使用以下内容修改 main.tf:

provider "google" {
  project = "PROJECT_ID"
}

resource "google_spanner_instance" "main" {
  config       = "regional-us-central1"
  display_name = "first-terraform-instance"
  num_nodes    = 3
}

resource "google_spanner_database" "database" {
  instance = google_spanner_instance.main.name
  name     = "my-first-database"
}

再次使用以下命令应用更改:

$ terraform apply
# ...
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

成功后,my-first-database 将在实例下显示:

9962a71c6b2a3aff.png

5. 修改实例

如前一部分所述,并非实例的所有属性都可以修改。不过,您可以增加/减少节点数量,以调整实例使用的资源。创建的实例有 3 个节点。通过修改 main.tf 文件,我们将节点数增加到 5:

provider "google" {
  project = "PROJECT_ID"
}

resource "google_spanner_instance" "main" {
  config       = "regional-us-central1"
  display_name = "first-terraform-instance"
  num_nodes    = 5
}

resource "google_spanner_database" "database" {
  instance = google_spanner_instance.main.name
  name     = "my-first-database"
}

下一步是应用更改:

$ terraform apply
# ...
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

成功后,实例将使用 5 个节点。

6. 删除数据库

如果您不再需要某个数据库,可以将其永久删除。只需从 main.tf 中移除数据库并应用更改即可。

provider "google" {
  project = "PROJECT_ID"
}

resource "google_spanner_instance" "main" {
  config       = "regional-us-central1"
  display_name = "first-terraform-instance"
  num_nodes    = 5
}
$ terraform apply
# ...
Apply complete! Resources: 0 added, 0 changed, 1 destroyed.

成功删除后,数据库将被永久删除。

7. 删除实例

如果您不再需要某个实例,可以将其永久删除。只需从 main.tf 中移除实例并应用更改即可。

provider "google" {
  project = "PROJECT_ID"
}
$ terraform apply
# ...
Apply complete! Resources: 0 added, 0 changed, 1 destroyed.

成功后,实例将被永久删除。

8. 恭喜!

您已使用 Terraform 创建、修改和删除了 Cloud Spanner 资源。

所学内容

  • 如何使用 Google Cloud Terraform 提供程序。
  • 使用 Terraform 创建 Cloud Spanner 实例和数据库。
  • 使用 Terraform 修改 Cloud Spanner 资源。
  • 使用 Terraform 删除 Cloud Spanner 资源。

了解详情