我正在尝试使用terraform模块,并且在密钥创建方面遇到问题。我想为模块的每次运行生成一个新的aws_key_pair。我收到了
aws_key_pair.default:错误导入KeyPair:InvalidKeyPair.Duplicate:密钥对'keyname'已经存在。
我想为模块的每次运行生成一个新的密钥(使用不同的名称),但是对于如何实现这一点却一无所知。
我有variables.tf
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}")}"
哪个会生成第一个密钥。当模块运行时,它将尝试重新创建已经存在的相同密钥。我希望它创建第二个,第三个等等,分别命名为key: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"
答案 0 :(得分:0)
在您的<your subdomain name>.serveo.net
中:
variable.tf
在您的variable "key_pair_names" {
description = "EC2 Key pair names"
default = [
"keyname1",
"keyname2"
]
}
中:
resources.tf
注意:本地文件的名称必须与创建的远程密钥对相同
如果直接在该目录中运行terraform,请运行:
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)}")}"
}
使用`terraform.tfvars:
terraform apply -var-file=terraform.tfvars
如果您正在使用其他key_pair_names = [
"keyname1",
"keyname2",
"keyname3"
]
文件中的模块:
main.tf
答案 1 :(得分:0)
如果其他人有这个问题,我可以使用terraform random_id来解决此问题
resource "random_id" "keypair" {
byte_length = 8
}
resource "keypair" "default" {
name = "${random_id.keypair.hex}"
答案 2 :(得分:0)
要在每次运行时获得唯一的键名,可以在terraform(https://www.terraform.io/docs/configuration/interpolation.html#uuid-)中使用uuid
函数
您可以将代码块定义为
resource "key_pair" "default"
key_name = "keyname-${uuid()}"
public_key = "${file("${var.key_path}")}"
但是您要针对公钥使用不同的密钥对尝试实现什么?