Невозможно использовать существующий файл pem для создания экземпляра EC2 с помощью terraform - PullRequest
0 голосов
/ 27 февраля 2019

Мне интересно, как остановить бесконечный цикл в сообщении об ошибке, чтобы он создавал экземпляр AWS EC2?

Код Terraform ниже:

 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 Build, поэтому я могу использовать key_name при создании экземпляра EC2?Имя файла pem как «test.pem», которое у меня есть, является закрытым ключом?

Чего я не знаю, так это как войти в виртуальную машину, используя имя ключа (test.pem), которое у меня уже есть, илиимя пользователя Пароль.Похоже, что нет условий для создания имени пользователя и пароля в блоке aws_instance.

Документация экземпляра Terraform EC2 находится по ссылке ниже: https://www.terraform.io/docs/providers/aws/r/instance.html

1 Ответ

0 голосов
/ 28 февраля 2019

Если вы хотите присоединить ключ к экземпляру EC2 во время его создания с помощью terraform, вам необходимо сначала создать ключ на консоли AWS, загрузить файл .pem и скопировать имя пары ключей в буфер обмена.

SampleKey on AWS Console

Для сценария Terraform требуется правильное имя ключа для его привязки к экземпляру ec2.

Если вы хотите выполнить какое-либо удаленное действие дляДля экземпляра из terraform требуются следующие вещи.

  1. У экземпляра должен быть IP, к которому может подключиться terraform.
  2. Terraform необходимо подключиться к экземпляру через SSH или RDP.
  3. Оба способа требуют, чтобы файл ключа (.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 для экземпляра, она должна отобразить следующее сообщение.

enter image description here

Вы можете по-прежнему видеть ошибки, если выполняемые команды не выполняются из-за некоторых других ошибок или проблем с разрешениями.Но если вы видите сообщение, как указано выше, это означает, что terraform успешно подключился к экземпляру.

Это конфигурация terraform, которая создаст экземпляр ec2, подключится к нему через SSH и выполнит на нем задачи удаленного выполнения.

Файл .pem также можно использовать для выполнения SSH на экземпляре с локального компьютера.

Это должно помочь вам решить проблему.

Дополнительная информация о подключение в терраформе доступно здесь

...