Stellen Sie über Terraform eine öffentliche IP-Verbindung mit dem Azure-Computer her

560
GergA

Ich habe die virtuelle Maschine in Azure erfolgreich mit Terraform (aus einem Packer-Image) erstellt. Nachdem die virtuelle Maschine erstellt wurde, führte ich einige Befehle auf der neu erstellten Maschine aus der Ferne aus.

Die Maschine hat eine piblic-IP-Adresse, die jedoch dynamisch an die neue Ressourcengruppe angehängt wurde, die von Terrafrom erstellt wurde. In diesem Fall kenne ich die Puclic-IP nicht, bevor die Terraform startet.

Leider benötigt der Remote-Exec-Provisioner eine IP, um eine Verbindung herzustellen und SSH Connect herzustellen. Wie kann ich dieses Problem lösen?

2

1 Antwort auf die Frage

1
Shui Shengbao

Sie haben zwei Möglichkeiten, dies zu tun.

1.Wenn Sie VM erstellen, verwenden Sie den DNS-Namen. HOST ist <dns name>.<location>.cloudapp.azure.com.

Erstellen Sie in der Datei die öffentliche IP-Adresse wie folgt:

# create public IPs resource "azurerm_public_ip" "ip" { name = "tfip" location = "ukwest" resource_group_name = "$" public_ip_address_allocation = "dynamic" domain_name_label = "sometestdn"  tags { environment = "staging" } } 

Erstellen Sie eine Verbindung wie unten:

 connection { host = "sometestdn.ukwest.cloudapp.azure.com" user = "testuser" type = "ssh" private_key = "$" 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.Verwenden Sie die benutzerdefinierte Azure- Skripterweiterung .

Die benutzerdefinierte Skripterweiterung lädt Skripts auf virtuellen Azure-Maschinen herunter und führt sie aus. Diese Erweiterung ist nützlich für die Konfiguration nach der Bereitstellung, für die Softwareinstallation oder für andere Konfigurations- / Verwaltungsaufgaben.

Sie könnten Ihre tf wie folgt schreiben:

resource "azurerm_virtual_machine_extension" "helloterraformvm" { name = "hostname" location = "West US" resource_group_name = "$" virtual_machine_name = "$" publisher = "Microsoft.OSTCExtensions" type = "CustomScriptForLinux" type_handler_version = "1.2"  settings = <<SETTINGS { "commandToExecute": "apt-get install docker.io -y" } SETTINGS } 

Weitere Informationen finden Sie in dieser ähnlichen Frage .

Arbeitet. Danke dir. Das "Terraform" -Label wäre in superuser.com sehr hilfreich GergA vor 6 Jahren 0
Natürlich mache ich das GergA vor 6 Jahren 0