You need to enable JavaScript to run this app. 如何通过Terraform调用gcloud命令 创建启用TLS的Redis可运行示例
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Terraform调用gcloud命令 创建启用TLS的Redis可运行示例

Terraform调用gcloud创建启用TLS的Redis实例实现方案

当前GCP Terraform provider的部分版本未暴露Redis实例TLS加密的原生配置参数,可通过Terraform原生的null_resource能力嵌入gcloud命令调用流程,完成带TLS的Redis实例创建,全程不需要依赖第三方插件。

前置检查项

  • 运行Terraform的主机需提前完成gcloud安装,且已通过gcloud自身的认证流程(如用户登录、服务账号密钥挂载),可直接执行gcloud命令访问目标GCP项目
  • 确认本机gcloud版本支持Redis实例的TLS配置参数--transit-encryption-mode,使用2021年之后的稳定发行版即可正常调用
  • 提前确认目标VPC网络的peering权限正常,避免命令执行时出现网络连通性报错

可直接运行的参考代码

# 配置基础GCP provider
provider "google" {
  project = var.gcp_project_id
  region  = var.gcp_region
}

# 定义输入变量
variable "gcp_project_id" {}
variable "gcp_region" {}
variable "redis_instance_name" {}
variable "redis_memory_size_gb" {
  default = 5
}
variable "redis_tier" {
  default = "STANDARD_HA"
}

# 用null_resource承载gcloud命令执行流程
resource "null_resource" "tls_enabled_redis" {
  # 配置触发执行的判断条件,保证参数无变化时不会重复执行命令
  triggers = {
    instance_name  = var.redis_instance_name
    memory_size   = var.redis_memory_size_gb
    tier          = var.redis_tier
    tls_mode      = "SERVER_AUTHENTICATION"
  }

  # 创建阶段调用gcloud命令启动带TLS的Redis实例
  provisioner "local-exec" {
    command = <<-EOT
      gcloud redis instances create ${var.redis_instance_name} \
        --size=${var.redis_memory_size_gb} \
        --tier=${var.redis_tier} \
        --region=${var.gcp_region} \
        --transit-encryption-mode=SERVER_AUTHENTICATION \
        --network=projects/${var.gcp_project_id}/global/networks/default
    EOT
  }

  # 销毁阶段自动清理GCP侧的Redis实例,避免残留资源产生费用
  provisioner "local-exec" {
    when    = destroy
    command = "gcloud redis instances delete ${var.redis_instance_name} --region=${var.gcp_region} --quiet"
  }
}

# 输出提示,指导后续拉取TLS证书信息
output "redis_tls_config_tip" {
  value = "执行 gcloud redis instances describe ${var.redis_instance_name} --region=${var.gcp_region} --format='value(server_ca_certs[0].cert)' 即可获取TLS连接需要的根证书内容"
}

实操注意事项

  • local-exec的执行上下文是运行Terraform的本地机器,不是云端执行环境,不要在命令字符串里硬编码敏感认证信息,优先依赖本机已配置的gcloud认证上下文
  • 通过该方式创建的Redis实例不会自动纳入Terraform状态管理,如需后续通过Terraform调整实例配置,可通过官方import能力将资源导入Terraform管理范围
  • 必须给所有外部命令配置非交互参数(如上面delete命令里的--quiet),否则Terraform执行过程中会因为等待用户输入卡在执行环节
  • 在null_resource的triggers字段中要枚举所有影响实例配置的参数,保证只有参数发生实际变更时才会重新执行创建命令,避免无意义的重复执行触发资源已存在的报错

内容的提问来源于stack exchange,提问作者Ganesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 17:54:07