#windows #virtual-machine #winrm #terraform-provider-azure
#Windows #виртуальная машина #winrm #terraform-provider-azure
Вопрос:
Я хочу создать виртуальную машину Windows Azure, скопировать некоторый файл и запустить на этой виртуальной машине простую команду, используя сценарий terraform. Проблема в том, что я могу создать виртуальную машину, но не могу подключиться через winrm.
provider "azurerm" {
subscription_id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
tenant_id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
resource "azurerm_virtual_network" "vnet" {
name = "cmTFVnet"
address_space = ["10.0.0.0/16"]
location = "South India"
resource_group_name = "cservice"
}
resource "azurerm_subnet" "subnet" {
name = "cmTFSubnet"
resource_group_name = "cservice"
virtual_network_name = "${azurerm_virtual_network.vnet.name}"
address_prefix = "10.0.2.0/24"
}
resource "azurerm_public_ip" "publicip" {
name = "cmTFPublicIP"
location = "South India"
resource_group_name = "cservice"
public_ip_address_allocation = "dynamic"
}
resource "azurerm_network_security_group" "nsg" {
name = "cmTFNSG"
location = "South India"
resource_group_name = "cservice"
security_rule {
name = "SSH"
priority = 340
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "22"
source_address_prefix = "*"
destination_address_prefix = "*"
}
security_rule {
name = "winrm"
priority = 1010
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "5985"
source_address_prefix = "*"
destination_address_prefix = "*"
}
security_rule {
name = "winrm-out"
priority = 100
direction = "Outbound"
access = "Allow"
protocol = "*"
source_port_range = "*"
destination_port_range = "5985"
source_address_prefix = "*"
destination_address_prefix = "*"
}
}
resource "azurerm_network_interface" "nic" {
name = "cmNIC"
location = "South India"
resource_group_name = "cservice"
network_security_group_id = "${azurerm_network_security_group.nsg.id}"
ip_configuration {
name = "compilerNICConfg"
subnet_id = "${azurerm_subnet.subnet.id}"
private_ip_address_allocation = "dynamic"
public_ip_address_id = "${azurerm_public_ip.publicip.id}"
}
}
resource "azurerm_virtual_machine" "vm" {
name = "cmTFVM"
location = "South India"
resource_group_name = "cservice"
network_interface_ids = ["${azurerm_network_interface.nic.id}"]
vm_size = "Standard_D2s_v3"
storage_image_reference
{
id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
storage_os_disk {
name = "cmOsDisk"
managed_disk_type = "Premium_LRS"
create_option = "FromImage"
}
os_profile {
computer_name = "hostname"
admin_username = "test"
admin_password = "test@123"
}
os_profile_windows_config {
enable_automatic_upgrades = "true"
provision_vm_agent ="true"
winrm = {
protocol = "http"
}
}
provisioner "remote-exec" {
connection = {
type = "winrm"
user = "test"
password = "test@123"
agent = "false"
https = false
insecure = true
}
inline = [
"cd..",
"cd..",
"cd docker",
"mkdir test"
]
}
}
Виртуальная машина успешно создана, но не может подключиться с помощью WINRM
, но я получаю следующую ошибку в «remote-exec»:
azurerm_virtual_machine.vm: тайм-аут — последняя ошибка: сообщение о неизвестной ошибке http://:5985/wsman : набрать tcp: 5985: connectex: попытка подключения завершилась неудачей, поскольку подключенная сторона не ответила должным образом через определенный промежуток времени, или установленный сбой соединения, поскольку подключенный хост не ответил. или ошибка ответа http: 401 — недопустимый тип содержимого
Комментарии:
1. Нам нужна дополнительная информация, чтобы помочь… Такие примеры кода, сообщения об ошибках, документы, за которыми вы следите, вещи, которые вы пробовали
2. Можете ли вы указать, что вы сделали, и какой документ вы соблюдаете, и что является самым важным, что вы хотите знать? Просто дайте более подробную информацию.
3. Еще какие-нибудь обновления?
4. пока не возникнет та же проблема. Есть ли какой-либо другой способ скопировать файл на виртуальную машину с помощью сценария terraform. по сути, это сценарий развертывания, мы не хотим, чтобы в нем появлялось взаимодействие с пользователем
Ответ №1:
При создании виртуальной машины Windows Azure WINRM по умолчанию не настроена. Поэтому, если вы хотите подключить виртуальную машину через WINRM, вы должны настроить WINRM после времени создания виртуальной машины или во время создания.
Вы можете выполнить действия в разделе Настройка WinRM после создания виртуальной машины. И вы также можете настроить его во время создания. Существует пример, показывающий, что через шаблон Azure. Это также окажет небольшую помощь. См. раздел Развертывание виртуальной машины Windows и настройка прослушивателя WinRM Https.
Комментарии:
1. Все еще возникает та же проблема. Есть ли какой-либо другой способ скопировать файл на виртуальную машину с помощью сценария terraform. по сути, это сценарий развертывания, мы не хотим, чтобы в нем появлялось взаимодействие с пользователем.
2. @ShrutiSijaria Да, для этого вы можете использовать расширение виртуальной машины с помощью сценария PowerShell, это рекомендуется. Смотрите расширение виртуальной машины в Terraform . В сценарии PowerShell вы можете использовать AzCopy или scp по своему усмотрению.