Conecte-se à máquina do Azure via ip público do terraform

2

Eu realizei a máquina virtual no Azure com o Terraform (a partir de uma imagem do Packer). Após a criação da máquina virtual, eu executaria alguns comandos remotamente na máquina recém-criada.

A máquina tem um ip piblico, mas esse ip é anexado dinamicamente ao novo grupo de recursos criado pelo terrafrom. Neste caso, não conheço o ip puclic antes do início da terraform.

Infelizmente, o provisionador de exec remoto precisa de um ip para conectar e conectar ssh. Como posso resolver esse problema?

    
por GergA 23.11.2017 / 10:09

1 resposta

1

Você tem dois métodos para fazer isso.

1.Quando você cria VM, usando o nome DNS. HOST é <dns name>.<location>.cloudapp.azure.com .

No arquivo tf, crie um IP público como abaixo:

# create public IPs
resource "azurerm_public_ip" "ip" {
    name = "tfip"
    location = "ukwest"
    resource_group_name = "${azurerm_resource_group.rg.name}"
    public_ip_address_allocation = "dynamic"
    domain_name_label = "sometestdn"

    tags {
        environment = "staging"
    }
}

Crie uma conexão como a abaixo:

   connection {
        host = "sometestdn.ukwest.cloudapp.azure.com"
        user = "testuser"
        type = "ssh"
        private_key = "${file("~/.ssh/id_rsa_unencrypted")}"
        timeout = "1m"
        agent = true
    }

    provisioner "remote-exec" {
        inline = [
          "sudo apt-get update",
          "sudo apt-get install docker.io -y",
          "git clone https://github.com/somepublicrepo.git",
          "cd Docker-sample",
          "sudo docker build -t mywebapp .",
          "sudo docker run -d -p 5000:5000 mywebapp"
        ]
    }

2.Use Extensão de script personalizado do Azure .

The Custom Script Extension downloads and executes scripts on Azure virtual machines. This extension is useful for post deployment configuration, software installation, or any other configuration / management task.

Você poderia escrever seu tf como abaixo:

resource "azurerm_virtual_machine_extension" "helloterraformvm" {
  name                 = "hostname"
  location             = "West US"
  resource_group_name  = "${azurerm_resource_group.helloterraformvm.name}"
  virtual_machine_name = "${azurerm_virtual_machine.helloterraformvm.name}"
  publisher            = "Microsoft.OSTCExtensions"
  type                 = "CustomScriptForLinux"
  type_handler_version = "1.2"

  settings = <<SETTINGS
    {
        "commandToExecute": "apt-get install docker.io -y"
    }
SETTINGS
}

Para mais informações, consulte esta pergunta semelhante.

    
por 23.11.2017 / 10:20