Если вы хотите присоединить ключ к экземпляру EC2 во время его создания с помощью terraform, вам необходимо сначала создать ключ на консоли AWS, загрузить файл .pem
и скопировать имя пары ключей в буфер обмена.
Для сценария Terraform требуется правильное имя ключа для его привязки к экземпляру ec2.
Если вы хотите выполнить какое-либо удаленное действие дляДля экземпляра из terraform требуются следующие вещи.
- У экземпляра должен быть IP, к которому может подключиться terraform.
- Terraform необходимо подключиться к экземпляру через SSH или RDP.
- Оба способа требуют, чтобы файл ключа (.pem), загруженный ранее, использовался при установлении соединения.
Так что connection здесь отсутствуетв конфигурации terraform.
Рассмотрите следующую конфигурацию terraform для создания одного экземпляра t1.micro
с ассоциированным с ним ключом, а затем для создания файла в экземпляре с помощью SSH.
Требования к сетитакие как vpc, подсеть, таблицы маршрутов, интернет-шлюз, группы безопасности и т. д., уже созданы в консоли AWS, и их соответствующие идентификаторы используются в конфигурации 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
}
Когда вы запускаете команду terraform apply
, если terraform может выполнить SSH для экземпляра, она должна отобразить следующее сообщение.
Вы можете по-прежнему видеть ошибки, если выполняемые команды не выполняются из-за некоторых других ошибок или проблем с разрешениями.Но если вы видите сообщение, как указано выше, это означает, что terraform успешно подключился к экземпляру.
Это конфигурация terraform, которая создаст экземпляр ec2, подключится к нему через SSH и выполнит на нем задачи удаленного выполнения.
Файл .pem
также можно использовать для выполнения SSH на экземпляре с локального компьютера.
Это должно помочь вам решить проблему.
Дополнительная информация о подключение в терраформе доступно здесь