Amazon ec2 无法利用现有pem文件通过terraform创建EC2 instanceby

Amazon ec2 无法利用现有pem文件通过terraform创建EC2 instanceby,amazon-ec2,terraform-provider-aws,Amazon Ec2,Terraform Provider Aws,我想知道如何停止错误消息中的无限循环,以便它创建AWS EC2实例 下面的地形代码: provider "aws" { region = "${var.location}" } resource "aws_instance" "ins1_ec2" { ami = "${var.ami}" instance_type = "${var.inst_type}" tags = { Name = "cluster" } provisioner "

我想知道如何停止错误消息中的无限循环,以便它创建AWS EC2实例

下面的地形代码:

 provider "aws" {
  region = "${var.location}"
}

resource "aws_instance" "ins1_ec2" {
  ami           = "${var.ami}"
  instance_type = "${var.inst_type}"

  tags = {
    Name = "cluster"
  }
  provisioner "remote-exec" {
    inline = [
      "hostnamectl set-hostname centos-76-1",
    ]
  }
}

resource "aws_eip" "ins1_eip" {
  instance = "${aws_instance.ins1_ec2.id}"
  vpc      = false
}

resource "aws_instance" "ins2_ec2" {
  ami           = "${var.ami}"
  instance_type = "${var.inst_type}"

 provisioner "remote-exec" {
    inline = [
      "hostnamectl set-hostname centos-76-2",
    ]
  }

  tags = {
    Name = "cluster"
  }
}

resource "aws_eip" "ins2_eip" {
  instance = "${aws_instance.ins2_ec2.id}"
  vpc      = false
}
出错,并显示以下消息:

* aws_instance.ins2_ec2: timeout - last error: ssh: handshake failed: agent: failed to list keys
* aws_instance.ins1_ec2: timeout - last error: ssh: handshake failed: agent: failed to list keys
我的笔记本电脑上有一个pem文件,我可以在AWS构建服务器上获取它,所以我可以在EC2实例创建中使用key_name?我拥有的pem文件名“test.pem”是私钥吗

我不知道的是如何使用我已经拥有的key_name(test.pem)或用户名/密码登录到VM。似乎没有在aws_实例块中创建用户名和密码的规定

Terraform EC2实例文档位于以下链接:

如果您想在使用terraform创建EC2实例时将密钥附加到EC2实例,您需要首先在AWS控制台上创建密钥,下载
.pem
文件并将密钥对名称复制到剪贴板上

Terraform脚本需要正确的密钥名才能将其与ec2实例关联

如果您想从terraform对实例执行任何远程操作,则需要执行以下操作

  • 实例应该具有terraform可以连接的IP
  • Terraform需要通过SSH或RDP连接到实例
  • 这两种方法都要求在建立连接时使用先前下载的密钥文件(.pem文件)
  • 因此,连接是地形配置中缺少的部分

    考虑以下terraform配置,创建一个带有相关密钥的
    t1.micro
    实例,然后通过SSH在实例上创建一个文件

    网络需求,如vpc、子网、路由表、internet网关、安全组等,已在AWS控制台中创建,其各自的ID正在下面的地形配置中使用

    provider "aws" {
        region = "<<region>>",
        access_key="<<access_key>>",
        secret_key="<<secret_key>>"
    }
    
    resource "aws_instance" "ins1_ec2" {
        ami           = "<<ami_id>>"
        instance_type = "<<instance_type>>"
        //id of the public subnet so that the instance is accessible via internet to do SSH
        subnet_id = "<<subnet_id>>"
    
        //id of the security group which has ports open to all the IPs
        vpc_security_group_ids=["<<security_group_id>>"]
    
        //assigning public IP to the instance is required.
        associate_public_ip_address=true
        key_name = "<<key_name>>"
        tags = {
           Name = "cluster"
        }
    
        provisioner "remote-exec" {
            inline = [
                //Executing command to creating a file on the instance
                "echo 'Some data' > SomeData.txt",
            ]
    
            //Connection to be used by provisioner to perform remote executions
            connection {
                //Use public IP of the instance to connect to it.
                host          = "${aws_instance.ins1_ec2.public_ip}"
                type          = "ssh"
                user          = "ec2-user"
                private_key   = "${file("<<pem_file>>")}"
                timeout       = "1m"
                agent         = false
            }
        }
    }
    
    resource "aws_eip" "ins1_eip" {
        instance = "${aws_instance.ins1_ec2.id}"
        vpc      = true
    }
    
    提供程序“aws”{
    地区=”,
    
    access_key=“以下内容对我有效

  • 创建一个安全组,并确保在入站规则中添加了源0.0.0.0/0的SSH(端口22)
  • 复制安全组的ID,并将其添加到密钥专有网络安全组ID的terraform配置列表中
  • 前往AWS控制台,创建新密钥对或找到要使用的现有密钥
  • 从控制台获取密钥对的名称,并在terraform配置中引用密钥key\u name
  • 如果创建了新密钥,请确保下载了pem文件并将权限更改为
    chmod 400 myPrivateKey.pem
  • 应用terraform配置后,只需以
    ssh-i myPrivateKey.pem ec2 user@
  • ec2资源的地形配置如下所示:

    resource "aws_instance" "my-sample" {
      ami                         = "ami-xxxxx"
      instance_type               = "t2.micro"
      associate_public_ip_address = true
      key_name                    = "MyPrivateKey"
      vpc_security_group_ids      = ["sg-0f073685ght54lkm"]
    }
    

    如果您在AWS控制台上创建了密钥对,则需要在terraform脚本中提供该密钥的名称。Read。创建实例后,您可以使用为同一密钥下载的pem文件通过SSH连接到该实例。Read*AWS_instance.ins2_ec2:中断-最后一个错误:SSH:握手失败:代理:无法列出密钥*AWS_instance.ins1_ec2:发生1个错误:*aws_instance.ins1_ec2:启动源实例时出错:InvalidKeyPair.NotFound:密钥对'SrinivasTest.pem'不存在状态代码:400,请求id:81cab80d-48e6-43c1-aa53-807417599e33[centos@ip-172-31-29-250地形]$ls SrinivasTest.pem SrinivasTest.pem[centos@ip-172-31-29-250地形]$pwd/数据/地形[centos@ip-172-31-29-250地形]$ls main.tf main.tf[centos@ip-172-31-29-250地形]$cat main.tf | grep key_name key_name=“SrinivasTest.pem”[centos@ip-172-31-29-250 terraform]$在服务器上的main.tf文件所在位置添加了私钥,内部引用为“SrinivasTest.pem”"它仍然不起作用…您不需要terraform中的私钥或pen文件。您需要aws控制台中的密钥名。Pem文件将用于执行SSH。但创建实例时,您只需要密钥名,以便terraform将密钥与实例关联。谢谢您,Chetan!我今晚将验证它,如果它起作用,我将接受这一点作为答案。非常感谢!在文档中完全相同,但没有运气…*aws_instance.ins2_ec2:超时-最后一个错误:ssh:握手失败:代理:未能列出密钥*aws_instance.ins1_ec2:超时-最后一个错误:ssh:握手失败:代理:未能列出密钥sshcentos@13.127.3.118-i SrinivasTest.pem lsb_发布-许可书房ied(公钥)。
    ssh:handshake失败
    在运行terraform脚本时,或者在尝试从本地计算机执行ssh时,您是否遇到此错误?terraform脚本。我在某处读到terraform可能正在执行ssh以进行远程执行,因此增加了220的等待时间,但仍然没有运气:(