it-swarm-ja.com

terraformからpublicipを介してAzureマシンに接続します

(Packerイメージから)Terraformを使用してAzureで仮想マシンを作成することに成功しました。仮想マシンを作成した後、新しく作成したマシンでいくつかのコマンドをリモートで実行します。

マシンにはpiblicIPがありますが、そのIPはterrafromによって作成された新しいリソースグループに動的に接続されています。この場合、テラフォームが開始する前に、私はpuclicipを知りません。

残念ながら、remote-execプロビジョナーは接続してssh接続するためにIPを必要とします。どうすればその問題を解決できますか?

2
GergA

これを行うには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
}

詳細については、この同様の 質問 を参照してください。

1
Shui shengbao