使用从控制台下载的 Terraform 部署基础

Google Cloud 控制台中的云基础设置指南可让企业管理员使用引导式界面配置企业级 Google Cloud 基础,并直接从 Google Cloud 控制台进行部署或将其下载为 Terraform。

管理员可以配置组织实体、用户和群组;关联或设置结算账号;配置资源(文件夹和项目)层次结构、IAM 政策、初始网络以及集中式日志记录和监控。

当客户将其配置下载为 Terraform 时,控制台会生成 Terraform 文件供以后部署。本教程介绍了如何部署下载的 Terraform 文件,并考虑了以前部署的任何基础架构资源。

准备工作

查看使用 Terraform 的最佳实践,其中包含跨团队成员和工作流使用 Terraform 进行有效部署的指南。

如果您已通过点击控制台中的“部署”按钮来部署基础配置,现在想要使用您自己的流水线部署下载的 Terraform 配置,则必须执行以下操作:

  • 下载控制台生成的 Terraform 状态文件。
  • 在您自己的流水线过程中添加下载的状态文件。

如需了解详情,请参阅从控制台部署后部署下载的 Terraform

使用 Cloud Shell 部署 Terraform

Cloud Shell 预装了 Terraform 并预先进行身份验证,使您可以快速开始使用。

  1. 在控制台设置指南中,点击下载为 Terraform 并保存配置。
  2. 打开 Cloud Shell
  3. 在 Cloud Shell 中,创建一个目录并前往此目录:

    mkdir cloud-foundation-example && cd cloud-foundation-example
    
  4. 上传您在第 1 步中下载的 Terraform 配置。

    从 Cloud Shell 更多菜单中,选择上传,然后点击选择文件以选择 Terraform 配置。将目标目录设置为您在上一步创建的文件夹,然后点击上传

  5. 确保当前目录为 cloud-foundation-example

  6. 创建 Cloud Storage 存储桶以存储 Terraform 远程状态。远程状态允许 Terraform 使用 Cloud Storage 等对象存储来存储有关 Terraform 管理的基础架构的状态信息。此配置可提供团队委派和状态锁定等优势。

    要创建 Cloud Storage 存储桶,请运行以下命令:

    gsutil mb gs://tf-state-PROJECT_ID
    
  7. backend.tf 文件中定义 Terraform 后端配置,并替换 PROJECT_ID 以匹配您在上一步使用的项目 ID。如需了解详情,请参阅在 Cloud Storage 中存储 Terraform 状态

    # backend.tf
    terraform {
          backend "gcs" {
            bucket  = "tf-state-PROJECT_ID"
            prefix  = "terraform/state"
          }
    }
    
  8. 运行 terraform init。此过程会初始化包含 Terraform 配置文件和后端的工作目录。

  9. 运行 terraform plan 以查看 Terraform 创建的资源。输出示例:

    ...
    Plan: 6 to add, 0 to change, 0 to destroy.
    Note: You didn't use the -out option to save this plan, so Terraform can't
    guarantee to take exactly these actions if you run "terraform apply" now.
    

  10. 运行 terraform apply 以应用配置,这会将资源部署到 Google Cloud。出现提示时,输入 yes

  11. 探索 Google Cloud 控制台以验证资源是否现已部署到您的账号或项目中。

使用 Cloud Shell 重新部署 Terraform

Terraform 将有关已部署资源的信息存储在 Terraform 状态文件中。如果您已按照上述步骤部署配置,我们强烈建议您重复使用同一后端来自动检测、删减和更新导出的新配置定义的资源。

  1. 在控制台设置指南中,点击下载为 Terraform 并保存配置。
  2. 打开 Cloud Shell
  3. 在 Cloud Shell 中,创建一个新目录并前往此目录:
    mkdir cloud-foundation-example-redeploy && cd cloud-foundation-example-redeploy
    
  4. 上传您在第 1 步中下载的 Terraform 配置。

    从 Cloud Shell 更多菜单中,选择上传,然后点击选择文件以选择 Terraform 配置。将目标目录设置为您在上一步创建的文件夹,然后点击上传

  5. 确保当前目录为 cloud-foundation-example-redeploy

  6. 确保之前创建的 Cloud Storage 后端存储桶和状态文件存在。

    gsutil ls gs://tf-state-PROJECT_ID/terraform/state/
    
    输出示例:
    gs://tf-state-PROJECT_ID/terraform/state/default.tfstate
    

  7. 通过重复使用相同的存储桶和前缀,在 backend.tf 文件中定义 Terraform 后端配置。

    # backend.tf
    terraform {
          backend "gcs" {
            bucket  = "tf-state-PROJECT_ID"
            prefix  = "terraform/state"
          }
    }
    
  8. 运行 terraform init。此过程会初始化包含 Terraform 配置文件和后端的工作目录。

  9. 运行 terraform plan 以查看 Terraform 创建、更改或销毁的资源。 输出示例:

    ...
    Plan: 2 to add, 3 to change, 4 to destroy.
    Note: You didn't use the -out option to save this plan, so Terraform can't
    guarantee to take exactly these actions if you run "terraform apply" now.
    

  10. 运行 terraform apply 以应用配置,这会将资源部署到 Google Cloud。出现提示时,输入 yes

  11. 探索 Google Cloud 控制台以验证资源是否现已部署到您的账号或项目中。

从控制台部署后部署下载的 Terraform

如果您已使用控制台中的“部署”按钮部署基础配置,则会生成 Terraform 状态文件。如果您现在想下载使用您自己的流水线进行部署的 Terraform 配置,则必须添加在控制台部署期间生成的 Terraform 状态文件。

如需下载和使用状态文件,请执行以下操作:

  1. 如需下载 Terraform 状态文件,请完成管理 Terraform 状态文件中的步骤:

    1. 锁定部署
    2. 下载状态文件
    3. 解锁部署
  2. 如需将您下载的状态文件移动到 Cloud Storage 存储桶,请参阅将 Terraform 状态存储在 Cloud Storage 存储桶中

  3. 如需重新部署 Terraform 配置,请参阅使用 Cloud Shell 重新部署 Terraform

排查 Terraform 部署问题

使用现有资源部署 Terraform

如果下载的 Terraform 配置尝试创建已存在的资源,Terraform 会退出并显示 409 错误代码。如需解决这些错误,您可以使用 Google Cloud 控制台或 gcloud CLI 删除资源,然后重新应用 Terraform 配置。或者,如果这些资源至关重要且无法删除,您可以将资源导入 Terraform 状态

使用 Terraform、Cloud Build 和 GitOps 以代码形式管理基础架构

我们建议您参阅此教程,了解完整说明。此选项适用于希望以可预测的方式反复更改基础架构的平台管理员和操作者。本指南假设您熟悉 Google Cloud、Linux 和 GitHub。此选项的简要步骤如下:

  1. 设置 GitHub 代码库。
  2. 将 Terraform 配置为在 Cloud Storage 存储桶中存储状态。
  3. 向您的 Cloud Build 服务账号授予权限。
  4. 将 Cloud Build 连接到您的 GitHub 代码库。
  5. 更改功能分支中的环境配置。
  6. 将更改升级到开发环境。
  7. 将更改升级到生产环境。