Terraform 地形资源使用模块生成多个密钥对
我正在尝试使用terraform模块,但在密钥创建方面遇到了问题。我想为模块的每次运行生成一个新的aws_密钥对。我收到 aws_key_pair.default:错误导入密钥对:InvalidKeyPair。重复:密钥对“keyname”已存在 我想为模块的每次运行生成一个新的密钥(使用不同的名称),但我不知道如何实现这一点 我有一个变量Terraform 地形资源使用模块生成多个密钥对,terraform,Terraform,我正在尝试使用terraform模块,但在密钥创建方面遇到了问题。我想为模块的每次运行生成一个新的aws_密钥对。我收到 aws_key_pair.default:错误导入密钥对:InvalidKeyPair。重复:密钥对“keyname”已存在 我想为模块的每次运行生成一个新的密钥(使用不同的名称),但我不知道如何实现这一点 我有一个变量 variable "key_pair_name" { description = "EC2 Key pair name" default = ""
variable "key_pair_name" {
description = "EC2 Key pair name"
default = ""
}
在resources.tf中
resource "key_pair" "default"
key_name = "keyname"
public_key = "${file("${var.key_path}")}"
这将生成第一个关键帧。当模块运行时,它将再次尝试重新创建已存在的相同密钥。我想让它创建第二个、第三个等分别命名的键,即:keyname1、keyname2、keyname3或一个随机字符串
我正在努力
resource "random_id" "key_pair_name" {
name = {
key_name = "${random_id.key_name}"
}
byte_length = 8
}
我从一个简单的main.tf开始
module "one" {
source = "/modules/test-example"
写入模块
在变量.tf中:
variable "key_pair_names" {
description = "EC2 Key pair names"
default = [
"keyname1",
"keyname2"
]
}
resource "key_pair" "default" {
count = "${length(var.key_pair_names)}"
key_name = "${element(var.key_pair_names, count.index)}"
public_key = "${file("${element(var.key_pair_names, count.index)}")}"
}
在您的参考资料中.tf
:
variable "key_pair_names" {
description = "EC2 Key pair names"
default = [
"keyname1",
"keyname2"
]
}
resource "key_pair" "default" {
count = "${length(var.key_pair_names)}"
key_name = "${element(var.key_pair_names, count.index)}"
public_key = "${file("${element(var.key_pair_names, count.index)}")}"
}
NB:本地文件的名称需要与创建的远程密钥对相同
重写变量
- 如果您直接在该目录中运行terraform,请运行:
terraform apply -var-file=terraform.tfvars
使用“terraform.tfvars”:
key_pair_names = [
"keyname1",
"keyname2",
"keyname3"
]
- 如果您正在使用其他
main.tf
文件中的模块:
module "key_pair" {
path = "path/to/module"
key_pair_names = [
"keyname1",
"keyname2",
"keyname3"
]
}
如果其他人有这个问题,我可以使用terraform random\u id解决这个问题
resource "random_id" "keypair" {
byte_length = 8
}
resource "keypair" "default" {
name = "${random_id.keypair.hex}"
要在每次运行时实现唯一的keyname,可以在terraform()中使用uuid
函数
您可以将代码块定义为
resource "key_pair" "default"
key_name = "keyname-${uuid()}"
public_key = "${file("${var.key_path}")}"
但是,对于公钥,使用不同的密钥对,您想要实现什么呢?您是否有其他tf文件调用您的模块?是的,只是一个简单的“main.tf”您想要实现什么?为什么你要一遍又一遍地上传同一个公钥,却给它起了不同的名字?如果它有一个随机名称,您打算稍后如何引用它?从variables.tf line“keyname1”中获取“分析列表时意外标记:IDENT”,我可能错过了引号。我编辑了答案以添加它们。谢谢,我发现…获取“key\u pair.default:资源计数不能引用变量:key\u pair\u名称“如果您还没有完成,我就用变量的var前缀更新了答案,现在已经添加了,init通过了,但是计划失败了,因为${file(${element(var.key\u pair\u names,count.index)}”)中没有这样的文件或目录。”