質問: terraformからpublicipを介してazureマシンに接続します (packerイメージから)terraformを使用してazureで仮想マシンを作成することに成功しました。仮想マシンを作成した後、新しく作成したマシンでいくつかのコマンドをリモートで実行します。マシンにはpiblicipがありますが、そのipはterrafromによって作成された新しいリソースグループに動的に接続されています。この場合、テラフォームが開始する前に、私はpuclicipを知りません。残念ながら、remote-execプロビジョナーは接続してssh接続するためにipを必要とします。どうすればその問題を解決できますか?
回答: これを行うには2つの方法があります。1.dns名を使用してvmを作成する場合。ホストは<dns name>.<location>.cloudapp.azure.com。tfファイルで、次のようにパブリックipを作成します。# 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" } } 以下のような接続を作成します。 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.使用 azureカスタムスクリプト拡張 。 カスタムスクリプト拡張機能は、azure仮想マシンにスクリプトをダウンロードして実行します。この拡張機能は、展開後の構成、ソフトウェアのインストール、またはその他の構成/管理タスクに役立ちます。 あなたは以下のようにあなたのtfを書くことができます: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 } 詳細については、この同様の 質問 を参照してください。