Terraform资源使用模块生成多个key_pair

时间:2019-01-05 15:50:35

标签: terraform

我正在尝试使用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"

3 个答案:

答案 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}")}"

但是您要针对公钥使用不同的密钥对尝试实现什么?