terraform报表无法找到mykey.pub

terraform报表无法找到mykey.pub,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,当我运行terraform plan Error: Error in function call on instance.tf line 3, in resource "aws_key_pair" "mykey": 3: public_key = "${file("${var.PATH_TO_PUBLIC_KEY}")}" |---------------- | var.PATH_TO_PUBLIC_KEY is "mykey.pub" Call to func

当我运行terraform plan

Error: Error in function call

  on instance.tf line 3, in resource "aws_key_pair" "mykey":
   3:   public_key = "${file("${var.PATH_TO_PUBLIC_KEY}")}"
    |----------------
    | var.PATH_TO_PUBLIC_KEY is "mykey.pub"

Call to function "file" failed: no file exists at mykey.pub.

在文件系统中,我有以下两个文件

/home/ec2-user/ravi-tf-work-3/Ravi-TF-Work.pem
/home/ec2-user/ravi-tf-work-3/Ravi-TF-Work.pub
我的地形代码如下 main.tf

resource "aws_key_pair" "mykey" {
  key_name = "mykey"
  public_key = "${file("${var.PATH_TO_PUBLIC_KEY}")}"
}

resource "aws_instance" "example" {
  ami = "${lookup(var.AMIS, var.AWS_REGION)}"
  instance_type = "t2.micro"
  key_name = "${aws_key_pair.mykey.key_name}"

  provisioner "file" {
    source = "script.sh"
    destination = "/tmp/script.sh"
  }
  provisioner "remote-exec" {
    inline = [
      "chmod +x /tmp/script.sh",
      "sudo /tmp/script.sh"
    ]
  }
  connection {
    host = "${self.public_ip}"
    user = "${var.INSTANCE_USERNAME}"
    private_key = "${file("${var.PATH_TO_PRIVATE_KEY}")}"
  }
}
variable "AWS_ACCESS_KEY" {}
variable "AWS_SECRET_KEY" {}
variable "AWS_REGION" {
  default = "ap-southeast-2"
}
variable "AMIS" {
  type = "map"
  default = {
    ap-southeast-2 = "ami-039bb4c3a7946ce19"
    ap-southeast-2 = "ami-039bb4c3a7946ce19"
    ap-southeast-1 = "ami-05c6d22d98f97471c"
  }
}

/*
variable "PATH_TO_PRIVATE_KEY" {
  default = "/home/ec2-user/ravi-tf-work-3/Ravi-TF-Work.pem"
}
variable "PATH_TO_PUBLIC_KEY" {
  default = "/home/ec2-user/ravi-tf-work-3/Ravi-TF-Work.pub"
}
*/
variable "PATH_TO_PRIVATE_KEY" {
  default = "mykey"
}
variable "PATH_TO_PUBLIC_KEY" {
  default = "mykey.pub"
}

variable "INSTANCE_USERNAME" {
  default = "ubuntu"
}
vars.tf

resource "aws_key_pair" "mykey" {
  key_name = "mykey"
  public_key = "${file("${var.PATH_TO_PUBLIC_KEY}")}"
}

resource "aws_instance" "example" {
  ami = "${lookup(var.AMIS, var.AWS_REGION)}"
  instance_type = "t2.micro"
  key_name = "${aws_key_pair.mykey.key_name}"

  provisioner "file" {
    source = "script.sh"
    destination = "/tmp/script.sh"
  }
  provisioner "remote-exec" {
    inline = [
      "chmod +x /tmp/script.sh",
      "sudo /tmp/script.sh"
    ]
  }
  connection {
    host = "${self.public_ip}"
    user = "${var.INSTANCE_USERNAME}"
    private_key = "${file("${var.PATH_TO_PRIVATE_KEY}")}"
  }
}
variable "AWS_ACCESS_KEY" {}
variable "AWS_SECRET_KEY" {}
variable "AWS_REGION" {
  default = "ap-southeast-2"
}
variable "AMIS" {
  type = "map"
  default = {
    ap-southeast-2 = "ami-039bb4c3a7946ce19"
    ap-southeast-2 = "ami-039bb4c3a7946ce19"
    ap-southeast-1 = "ami-05c6d22d98f97471c"
  }
}

/*
variable "PATH_TO_PRIVATE_KEY" {
  default = "/home/ec2-user/ravi-tf-work-3/Ravi-TF-Work.pem"
}
variable "PATH_TO_PUBLIC_KEY" {
  default = "/home/ec2-user/ravi-tf-work-3/Ravi-TF-Work.pub"
}
*/
variable "PATH_TO_PRIVATE_KEY" {
  default = "mykey"
}
variable "PATH_TO_PUBLIC_KEY" {
  default = "mykey.pub"
}

variable "INSTANCE_USERNAME" {
  default = "ubuntu"
}
在我的AWS帐户中,我有私钥,我下载了public of nameRavi TF Work.pem 我通过以下命令将*.pem转换为*.pub:

ssh-keygen -y -f private_key1.pem > public_something_else.pub
地形版本如下

Terraform v0.12.5
+ provider.aws v2.20.0
在这个阶段,我对AWS帐户中的私钥和我下载的公钥(pem文件,转换为pub文件)以及如何使其工作感到困惑


任何线索都将不胜感激

您似乎已经注释掉了实际钥匙的位置:

/*
variable "PATH_TO_PRIVATE_KEY" {
  default = "/home/ec2-user/ravi-tf-work-3/Ravi-TF-Work.pem"
}
variable "PATH_TO_PUBLIC_KEY" {
  default = "/home/ec2-user/ravi-tf-work-3/Ravi-TF-Work.pub"
}
*/
variable "PATH_TO_PRIVATE_KEY" {
  default = "mykey"
}
variable "PATH_TO_PUBLIC_KEY" {
  default = "mykey.pub"
}
取消注释并删除虚拟定义:

variable "PATH_TO_PRIVATE_KEY" {
  default = "/home/ec2-user/ravi-tf-work-3/Ravi-TF-Work.pem"
}
variable "PATH_TO_PUBLIC_KEY" {
  default = "/home/ec2-user/ravi-tf-work-3/Ravi-TF-Work.pub"
}

您似乎已经注释掉了实际钥匙的位置:

/*
variable "PATH_TO_PRIVATE_KEY" {
  default = "/home/ec2-user/ravi-tf-work-3/Ravi-TF-Work.pem"
}
variable "PATH_TO_PUBLIC_KEY" {
  default = "/home/ec2-user/ravi-tf-work-3/Ravi-TF-Work.pub"
}
*/
variable "PATH_TO_PRIVATE_KEY" {
  default = "mykey"
}
variable "PATH_TO_PUBLIC_KEY" {
  default = "mykey.pub"
}
取消注释并删除虚拟定义:

variable "PATH_TO_PRIVATE_KEY" {
  default = "/home/ec2-user/ravi-tf-work-3/Ravi-TF-Work.pem"
}
variable "PATH_TO_PUBLIC_KEY" {
  default = "/home/ec2-user/ravi-tf-work-3/Ravi-TF-Work.pub"
}

我这样做了,现在出现了新的错误``aws\u key\u pair.mykey:Creating。。。错误:错误导入密钥对:InvalidKeyPair。重复:密钥对“Ravi TF Work”已存在。状态代码:400,请求id:c85eedd4-0ee5-40a5-a17b-cccea72d5544在instance.tf第1行,在资源“aws\U密钥对”“mykey”中:1:资源“aws\U密钥对”“mykey”{`@学习者您可以更新(重写)吗所有信息的问题?我这样做了,我现在得到了新的错误``aws\U密钥对。mykey:创建…错误:错误导入密钥对:InvalidKeyPair。重复:密钥对“Ravi TF Work”已经存在。状态代码:400,请求id:c85eedd4-0ee5-40a5-a17b-cccea72d5544,在实例上。TF行1,在资源“aws\U密钥对”“mykey”:1:resource“aws\u key\u pair”“mykey”{``@学习者您能用所有信息更新(重写)问题吗?