lea*_*ner 6 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 "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
}
Run Code Online (Sandbox Code Playgroud)
它出错并显示以下消息:
* 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
Run Code Online (Sandbox Code Playgroud)
我的笔记本电脑上有一个 pem 文件,我可以在 AWS 构建服务器上获取该文件,这样我就可以在 EC2 实例创建中使用 key_name 吗?我的pem文件名“test.pem”是私钥?
我不知道如何使用我已有的 key_name (test.pem) 或用户名/密码登录虚拟机。似乎没有在 aws_instance 块中创建用户名和密码的规定。
Terraform EC2 实例文档位于以下链接: https ://www.terraform.io/docs/providers/aws/r/instance.html
如果您想在使用 terraform 创建 EC2 实例时将密钥附加到 EC2 实例,则需要首先在 AWS 控制台上创建密钥,下载文件.pem并将密钥对名称复制到剪贴板。
Terraform 脚本需要正确的键名称才能将其关联到 ec2 实例。
如果您想从 terraform 对实例执行任何远程操作,则需要执行以下操作。
因此,连接是 terraform 配置中缺少的部分。
考虑遵循 terraform 配置来创建一个t1.micro具有与其关联的密钥的实例,然后通过 SSH 访问该实例来在该实例上创建一个文件。
网络要求(例如 vpc、子网、路由表、互联网网关、安全组等)已在 AWS 控制台中创建,并且它们各自的 ID 正在下面的 terraform 配置中使用。
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
}
Run Code Online (Sandbox Code Playgroud)
当您运行terraform apply命令时,如果 terraform 能够通过 SSH 连接到实例,它应该显示以下消息。
如果由于某些其他错误或权限问题而执行的命令失败,您可能仍然会看到错误。但如果您看到如上消息,则表示 terraform 已成功连接到实例。
这是 terraform 配置,它将创建一个 ec2 实例,通过 SSH 连接到它并在其上执行远程执行任务。
该.pem文件还可用于从本地计算机在实例上执行 SSH。
这应该可以帮助您解决问题。
有关terraform连接的更多信息,请参见此处
| 归档时间: |
|
| 查看次数: |
8686 次 |
| 最近记录: |