Почему не Terraform SSH в мой экземпляр EC2? - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь подключиться к недавно созданному экземпляру EC2 с помощью terraform.Мой хост - Windows 10, и у меня нет проблем с SSH в экземпляре с использованием Bitvise SSH Client с моего хоста, но Terraform не может использовать SSH для создания каталога на экземпляре:

My main.tf:

provider "aws" {
  region = "us-west-2"
}

resource "aws_security_group" "instance" { 
  name = "inlets-server-instance" 
  description = "Security group for the inlets server" 
  ingress { 
    from_port = 22 
    to_port = 22 
    protocol = "tcp" 
    cidr_blocks = ["0.0.0.0/0"] 
  } 

  egress { 
    from_port = 0 
    to_port = 0 
    protocol = "-1" 
    cidr_blocks = ["0.0.0.0/0"] 
  } 
}

resource "aws_instance" "tunnel" {
  ami = "ami-07b4f3c02c7f83d59"
  instance_type = "t2.nano"
  key_name = "${var.key_name}"
  vpc_security_group_ids = [aws_security_group.instance.id]

  tags = {
    Name = "inlets-server"
  }

  provisioner "local-exec" {
    command = "echo ${aws_instance.tunnel.public_ip} > ${var.public_ip_path}"
  }

  provisioner "remote-exec" {
    inline = [
      "mkdir /home/${var.ssh_user}/ansible",
    ]

    connection {
      type        = "ssh"
      host        = "${file("${var.public_ip_path}")}"
      user        = "${var.ssh_user}"
      private_key = "${file("${var.private_key_path}")}"
      timeout     = "1m"
      agent       = false
    }
  }
}

Мой variables.tf:

variable "key_name" {
  description = "Name of the SSH key pair generated in Amazon EC2."
  default     = "aws_ssh_key"
}

variable "public_ip_path" {
  description = "Path to the file that contains the instance's public IP address"
  default     = "ip_address.txt"
}

variable "private_key_path" {
  description = "Path to the private SSH key, used to access the instance."
  default     = "aws_ssh_key.pem"
}

variable "ssh_user" {
  description = "SSH user name to connect to your instance."
  default     = "ubuntu"
}

Все, что я получаю, это попытки соединения:

aws_instance.tunnel (remote-exec): Connecting to remote host via SSH...
aws_instance.tunnel (remote-exec):   Host: XX.XXX.XXX.XXX
aws_instance.tunnel (remote-exec):   User: ubuntu
aws_instance.tunnel (remote-exec):   Password: false
aws_instance.tunnel (remote-exec):   Private key: true
aws_instance.tunnel (remote-exec):   Certificate: false
aws_instance.tunnel (remote-exec):   SSH Agent: false
aws_instance.tunnel (remote-exec):   Checking Host Key: false

и, наконец, тайм-ауты с:

Error: timeout - last error: dial tcp: lookup XX.XXX.XXX.XXX
: no such host

Есть идеи?

1 Ответ

0 голосов
/ 16 июля 2019

Вы не говорили о структуре вашей сети.

Ваш win10 находится внутри VPC? Если нет, правильно ли настроены интернет-шлюз, таблица маршрутизации, NAT-шлюз?

Было бы чище и безопаснее создать ресурс Elastic IP для доступа к IP-адресу вашего компьютера с помощью terraform, а не пытаться получить его от компьютера. Конечно, локальный exec будет быстрее, чем удаленный exec, но вы создаете неявную зависимость, которая может вызвать проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...