我正在尝试使用配置文件“文件”将本地文件复制到Windows Azure VM上,然后使用Terraform创建它 .
我使用以下命令启用了自定义脚本扩展:
resource "azurerm_virtual_machine_extension" "VM" {
name = "WinRM"
location = "${azurerm_resource_group.VM.location}"
resource_group_name = "${azurerm_resource_group.VM.name}"
virtual_machine_name = "${azurerm_virtual_machine.VM01.name}"
publisher = "Microsoft.Compute"
type = "CustomScriptExtension"
type_handler_version = "1.8"
我在我的NSG中打开了5985端口:
security_rule {
name = "AllowWinRM"
priority = 300
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "5985"
source_address_prefix = "*"
destination_address_prefix = "*"
}
我的操作系统配置设置为:
os_profile_windows_config {
provision_vm_agent = true
winrm {
protocol="http"
}
}
最后我尝试复制文件:
resource "null_resource" "VM" {
provisioner "file" {
source = "output.txt"
destination = "c:\\temp\\output.txt"
connection {
type = "winrm"
user = "${var.adminusername}"
password = "${var.adminpassword}"
host = "${azurerm_public_ip.VM1_pip.ip_address}"
port = "5985"
timeout = "20m"
}
}
}
每当我尝试“应用”它时,它会达到20分钟超时并因以下错误而失败(公共IP被删除):
azurerm_virtual_machine_extension.VM:compute.VirtualMachineExtensionsClient#CreateOrUpdate:发送请求失败:StatusCode = 200 - 原始错误:Code =“”Message =“”* null_resource.buildagent:timeout - 上一个错误:未知错误发布http:// PublicIP: 5985 / wsman:拨tcp PublicIP:5985:connectex:连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接主机无法响应而 Build 连接失败 .
首先,我这样做是否正确?似乎所有东西都设置正确,但最后一步仍然失败 .
1 回答
默认情况下,标准映像上未启用WinRM . 如果您将脚本预先上载到可公开访问的URL(如Azure存储Blob),则
CustomScriptExtension
可以正常工作 .我使用我的TFS CI管道(参见图片)执行此操作,该管道在每次提交时触发:收集文件并将其上载到Azure Blob .
Terraform
azurerm_virtual_machine_extension
有类似的代码或者,在DSC扩展的情况下