2017-04-16 4 views
1

Terraformを初めて使用しています。私は2つのUbuntu VMを持つサブネットを持っています。 1つはVM Aで、パブリックIPを持ち、もう1つはVM Bで、プライベートIPとパブリックIPはありません。 Bにファイルをプロビジョニングしてコマンドを実行するTerraformの方法は、最初にVM AにSSHしてからVM Bに入れる必要はありませんか?AzraのTerraformプロビジョニング専用VM

私が見つけたものを、テラフォームでfileプロビジョナーはそうのようなconnectionブロック必要ですから:

 # Example Azure VM provisioner block 
     provisioner "remote-exec" { 
     inline = [ 
      "rsync -Pav [email protected]:~/install.sh ~", 
      "rsync -Pav [email protected]:~/file.txt ~", 
      "sudo ~/install.sh" 
     ] 
     connection { 
      type  = "ssh" 
      user  = "${var.ssh_user_username}" 
      host  = "<something to put here>" 
      private_key = "${file("~/.ssh/azure_key_rsa")}" 
      timeout = "1m" 
      agent = false 
     } 
     } 

をしかし、私はテラフォームに直接プライベートIPに接続することができないので、私はわからないんだけどhostフィールドでこのプロビジョニングを成功させるために置くべきもの。

+0

私はTerraformでこれを行う方法はないと思います。同じ目的のためにsshトンネルをいくつかの回避策で使用できるようにすることについて[継続中の問題](https://github.com/hashicorp/terraform/issues/8367)があります – karysto

+0

私はあなたのニーズを正しく理解しているかどうかわからない私の理解はあなたのVM Bにsshして、 'install.sh'を実行したいのですが、そうですか?私の知識によれば、あなたは 'terraform 'でそれを行うことができます。 'CustomScript'を使って' install.sh'を実行することができます。スクリプトはAzureによって実行され、VMにsshは必要ありません。 Terraformも 'CustomScript'をサポートしています。この例(https://www.terraform.io/docs/providers/azurerm/r/virtual_machine_extension.html)を参照できます。 –

+0

@ Walter-MSFT Terraform内に公開IPがない私設ネットワーク内にVMを直接プロビジョニングする方法があるかどうかは疑問でした。それは正確に必要なもののように見える、あなたはあなたのコメントを答えにすることができますか? – karysto

答えて

1

私の知るところによれば、あなたはテラフォームで直接行うことはできませんでした。 install.shを実行するのにCustom Script extensionを使用できます。スクリプトはAzureによって実行されますが、VMにsshは必要ありません。

カスタムスクリプト拡張設定では、スクリプトの場所や実行するコマンドなどを指定します。この設定は、コマンドラインで指定された設定ファイル、またはAzure Resource Managerテンプレートに格納することができます。機密データは、暗号化され、仮想マシン内でのみ復号化される保護された構成に格納することができます。あなたのシナリオによると、それはあなたが必要とするものと思われます。

TerraformはCustomScriptもサポートしています。これはexampleです。

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

    settings = <<SETTINGS 
    { 
     "commandToExecute": "hostname" 
    } 
SETTINGS 
関連する問題