运行terraform apply时出现密钥错误

运行terraform apply时出现密钥错误,terraform,Terraform,运行terraform apply时,我得到一个密钥错误。我只是在学习地形。我似乎无法在线找到解决此问题的方法: machine:terraform$ terraform apply aws_instance.nginix: Creating... ami: "" => "ami-d1180894" associate_public_ip_address: "" => "<computed>

运行terraform apply时,我得到一个密钥错误。我只是在学习地形。我似乎无法在线找到解决此问题的方法:

   machine:terraform$ terraform apply
   aws_instance.nginix: Creating...
     ami:                          "" => "ami-d1180894"
     associate_public_ip_address:  "" => "<computed>"
     availability_zone:            "" => "<computed>"
     ebs_block_device.#:           "" => "<computed>"
     ephemeral_block_device.#:     "" => "<computed>"
     instance_state:               "" => "<computed>"
     instance_type:                "" => "t2.nano"
     ipv6_address_count:           "" => "<computed>"
     ipv6_addresses.#:             "" => "<computed>"
     key_name:                     "" => "terraform-keys2"
     network_interface.#:          "" => "<computed>"
     network_interface_id:         "" => "<computed>"
     placement_group:              "" => "<computed>"
     primary_network_interface_id: "" => "<computed>"
     private_dns:                  "" => "<computed>"
     private_ip:                   "" => "<computed>"
     public_dns:                   "" => "<computed>"
     public_ip:                    "" => "<computed>"
     root_block_device.#:          "" => "<computed>"
     security_groups.#:            "" => "<computed>"
     source_dest_check:            "" => "true"
     subnet_id:                    "" => "<computed>"
     tenancy:                      "" => "<computed>"
     volume_tags.%:                "" => "<computed>"
     vpc_security_group_ids.#:     "" => "<computed>"
   Error applying plan:

   1 error(s) occurred:

   * aws_instance.nginix: 1 error(s) occurred:

   * aws_instance.nginix: Error launching source instance: InvalidKeyPair.NotFound: The key pair 'terraform-keys2' does not exist
    status code: 400, request id: 993cc401-4c7a-4e4b-9630-71bc4b5729b0

   Terraform does not automatically rollback in the face of errors.
   Instead, your Terraform state file has been partially updated with
   any resources that successfully completed. Please address the error
   above and apply again to incrementally change your infrastructure.
machine:terraform$terraform应用
aws_instance.nginix:正在创建。。。
ami:“”=>“ami-d1180894”
关联公共ip地址:“”=>“”
可用性分区:“”=>“”
ebs_块_设备。#:“”=>“”
短暂的块设备。\:“”=>“”
实例“”状态:“”=>“”
实例类型:“”=>“t2.nano”
ipv6地址计数:“”=>“”
ipv6#地址:“”=>“”
按键名称:“”=>“terraform-keys2”
网络接口。\:“”=>“”
网络接口id:“”=>“”
位置组:“”=>“”
主网络接口id:=>“”
专用dns:“”=>“”
专用ip:“”=>“”
公共dns:“”=>“”
公共ip:“”=>“”
根目录\u块\u设备。\:“”=>“”
安全组。#:“”=>“”
源目的地检查:“”=>“真”
子网id:“”=>“”
租约:“”=>“”
卷标签。%:“”=>“”
专有网络安全组ID:“”=>“”
应用计划时出错:
发生1个错误:
*aws_instance.nginix:发生1个错误:
*aws_instance.nginix:启动源实例时出错:InvalidKeyPair.NotFound:密钥对“terraform-keys2”不存在
状态代码:400,请求id:993cc401-4c7a-4e4b-9630-71bc4b5729b0
Terraform在遇到错误时不会自动回滚。
相反,您的地形状态文件已使用
成功完成的所有资源。请纠正错误
并再次应用以增量方式更改您的基础结构。

我试图转到AWS控制台并创建一个密钥对,但这似乎无助于解决此错误,请检查您是否已在您正在处理的区域中创建密钥对
terraform-keys2

aws_instance.nginix:启动源实例时出错:InvalidKeyPair.NotFound:密钥对
terraform-keys2
不存在 状态代码:400,请求id:993cc401-4c7a-4e4b-9630-71bc4b5729b0


在您的机器上,使用如下命令创建密钥对
ssh-keygen-f terraform-keys2

然后,您的配置应该在aws中具有如下所示的资源
aws\u密钥对

resource "aws_key_pair" "terraform-keys2" {
  key_name = "terraform-keys2"
  public_key = "terraform-keys2.pub"
}

解决方案:

请运行下面的命令,您应该已经安装了aws cli

aws ec2 import-key-pair --public-key-material file://~/.ssh/id_rsa.pub --key-name my-key

如果在引号中引用aws_密钥对资源,也可能发生此错误,如下所示:

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

resource "aws_instance" "example" {
  ami           = var.AMIS[var.AWS_REGION]
  instance_type = "t4g.micro"
  key_name      = "aws_key_pair.mykey.key_name"
  ...
}
...
key_name      = aws_key_pair.mykey.key_name
...
我在一次冲动的事故中做了定量标记,我花了一段时间才注意到我的sysntax错误。所以它应该是这样的:

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

resource "aws_instance" "example" {
  ami           = var.AMIS[var.AWS_REGION]
  instance_type = "t4g.micro"
  key_name      = "aws_key_pair.mykey.key_name"
  ...
}
...
key_name      = aws_key_pair.mykey.key_name
...

您是否在运行Terraform的同一区域创建了密钥对?它的名字是
terraform-keys2
?我去了AWS控制台并通过控制台创建了一个密钥对。我没有看到在区域中创建它的选项。您必须设置区域。AWS密钥对对于每个区域都是唯一的。或者,您可以将密钥对作为Terraform的一部分创建。我也遇到了同样的问题,上面给出的解决方案对我来说非常有效:)似乎需要给出密钥的内容,而不是路径:
public\u key=“${file(${path.root}/Terraform-keys2.pub”)}
应该可以