You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform中根据环境配置不同SSH密钥的metadata?

解决方案

你当前的写法存在两个核心问题:

  1. 重复定义了metadata变量,Terraform不允许重复声明同一个属性/变量,会直接报错;
  2. count是资源级别的参数,不能放在metadata这个映射对象内部使用。

下面提供两种简洁易维护的实现方式:

方式一:直接用条件表达式(适合少量环境场景)

在ssh-keys字段通过环境变量直接判断赋值,其他固定字段直接复用:

metadata = {
  ssh-keys = var.ENV_TYPE == "ENV-1" ? "centos:ssh-rsa AAAAsfdsds..." : "centos:ssh-rsa BBBBsfdsds..."
  instance_role = var.GCP_CUSTOM_METADATA
  app_env_monitoring = var.GCP_CUSTOM_METADATA_MONITORING
}

方式二:用map映射(适合未来可能扩展多环境的场景)

先定义环境与SSH密钥的对应关系,再通过环境变量取值,后续新增环境只需修改映射表:

# 定义环境到密钥的映射关系
locals {
  env_ssh_keys = {
    "ENV-1" = "centos:ssh-rsa AAAAsfdsds..."
    "ENV-2" = "centos:ssh-rsa BBBBsfdsds..."
  }
}

# 在metadata中引用映射值
metadata = {
  ssh-keys = local.env_ssh_keys[var.ENV_TYPE]
  instance_role = var.GCP_CUSTOM_METADATA
  app_env_monitoring = var.GCP_CUSTOM_METADATA_MONITORING
}

可选优化:添加默认值容错

如果担心输入的环境不在映射范围内导致报错,可以用lookup函数添加默认密钥:

ssh-keys = lookup(local.env_ssh_keys, var.ENV_TYPE, "centos:ssh-rsa 默认备用密钥内容...")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:01:18