Amazon ec2 无法利用现有pem文件通过terraform创建EC2 instanceby
我想知道如何停止错误消息中的无限循环,以便它创建AWS EC2实例 下面的地形代码: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 "
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对实例执行任何远程操作,则需要执行以下操作
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的等待时间,但仍然没有运气:(