Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek ukazuje, jak nasadit virtuální počítač s Windows Serverem 2019 v Azure pomocí Ansible.
V tomto článku se naučíte:
- Vytvoření skupiny zdrojů
- Vytvoření virtuální sítě, veřejné IP adresy, skupiny zabezpečení sítě a síťového rozhraní
- Nasazení virtuálního počítače s Windows Serverem
- Připojení k virtuálnímu počítači přes WinRM
- Spuštění playbooku Ansible pro konfiguraci služby Windows IIS
Požadavky
- Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
- Instanční objekt Azure: Vytvořte instanční objekt a poznamenejte si následující hodnoty: appId, displayName, password a tenant.
Nainstalujte Ansible: Proveďte jednu z následujících možností:
- Instalace a konfigurace Ansible na virtuálním počítači s Linuxem
- Konfigurace Azure Cloud Shellu
Přidání podpory WinRM do Ansible
Ke komunikaci přes WinRM potřebuje řídicí server Ansible balíček pywinrmPythonu .
Spuštěním následujícího příkazu na serveru Ansible nainstalujte pywinrm:
pip install "pywinrm>=0.3.0"
Další informace naleznete v tématu Vzdálená správa systému Windows pro Ansible.
Vytvoření skupiny zdrojů
Vytvořte playbook Ansible s názvem azure_windows_vm.yml a zkopírujte do playbooku následující obsah:
---
- name: Create Azure VM
hosts: localhost
connection: local
tasks:
- name: Create resource group
azure_rm_resourcegroup:
name: myResourceGroup
location: eastus
klíčové body:
- Nastavení
hostsna localhost aconnectionspuštění_local_playbooku místně na serveru Ansible.
Vytvoření virtuální sítě a podsítě
Přidejte do playbooku azure_windows_vm.yml Ansible následující úlohy pro vytvoření virtuální sítě:
- name: Create virtual network
azure_rm_virtualnetwork:
resource_group: myResourceGroup
name: vNet
address_prefixes: "10.0.0.0/16"
- name: Add subnet
azure_rm_subnet:
resource_group: myResourceGroup
name: subnet
address_prefix: "10.0.1.0/24"
virtual_network: vNet
Vytvoření veřejné IP adresy
Přidejte do playbooku azure_windows_vm.yml následující úkoly, které vytvoří veřejnou IP adresu:
- name: Create public IP address
azure_rm_publicipaddress:
resource_group: myResourceGroup
allocation_method: Static
name: pip
register: output_ip_address
- name: Output public IP
debug:
msg: "The public IP is {{ output_ip_address.state.ip_address }}"
klíčové body:
- Modul Ansible
registerslouží k uložení výstupu zazure_rm_publicipaddressproměnné s názvemoutput_ip_address. - Modul
debugslouží k výstupu veřejné IP adresy virtuálního počítače do konzoly.
Vytvoření skupiny zabezpečení sítě a NIC (Síťová karta)
Skupina zabezpečení sítě definuje, jaký provoz je povolený a nemá povolený přístup k virtuálnímu počítači.
Pokud chcete otevřít porty WinRM a HTTP, přidejte do playbooku azure_windows_vm.yml Ansible následující úlohy:
- name: Create Network Security Group
azure_rm_securitygroup:
resource_group: myResourceGroup
name: networkSecurityGroup
rules:
- name: 'allow_rdp'
protocol: Tcp
destination_port_range: 3389
access: Allow
priority: 1001
direction: Inbound
- name: 'allow_web_traffic'
protocol: Tcp
destination_port_range:
- 80
- 443
access: Allow
priority: 1002
direction: Inbound
- name: 'allow_powershell_remoting'
protocol: Tcp
destination_port_range:
- 5985
- 5986
access: Allow
priority: 1003
direction: Inbound
- name: Create a network interface
azure_rm_networkinterface:
name: nic
resource_group: myResourceGroup
virtual_network: vNet
subnet_name: subnet
security_group: networkSecurityGroup
ip_configurations:
- name: default
public_ip_address_name: pip
primary: True
Klíčové body:
- Karta virtuálního síťového rozhraní připojí virtuální počítač k virtuální síti, veřejné IP adrese a skupině zabezpečení.
- Vytvoří
azure_rm_securitygroupskupinu zabezpečení sítě Azure, která povolí provoz WinRM ze serveru Ansible na vzdáleného hostitele povolením portu5985a5986.
Vytvoření virtuálního počítače
Dále vytvořte virtuální počítač, který používá všechny prostředky, které jste vytvořili v předchozích částech tohoto článku.
Do playbooku azure_windows_vm.yml Ansible přidejte následující úkol:
- name: Create VM
azure_rm_virtualmachine:
resource_group: myResourceGroup
name: win-vm
vm_size: Standard_DS1_v2
admin_username: azureuser
admin_password: "{{ password }}"
network_interfaces: nic
os_type: Windows
image:
offer: WindowsServer
publisher: MicrosoftWindowsServer
sku: 2019-Datacenter
version: latest
no_log: true
Hodnota admin_password{{ password }} je proměnná Ansible, která obsahuje heslo virtuálního počítače s Windows. Pokud chcete danou proměnnou var_prompts bezpečně naplnit, přidejte položku na začátek playbooku.
- name: Create Azure VM
hosts: localhost
connection: local
vars_prompt:
- name: password
prompt: "Enter local administrator password"
tasks:
Klíčové body:
- Vyhněte se ukládání citlivých dat jako prostého textu. Slouží
var_promptsk naplnění proměnných za běhu. Přidejteno_log: true, aby se hesla nemohla zaznamenávat.
Konfigurace naslouchacího procesu WinRM
Ansible používá PowerShell k připojení a konfiguraci vzdálených hostitelů Windows přes WinRM.
Chcete-li nakonfigurovat WinRM, přidejte následující ext azure_rm_virtualmachineextension:
- name: Create VM script extension to enable HTTPS WinRM listener
azure_rm_virtualmachineextension:
name: winrm-extension
resource_group: myResourceGroup
virtual_machine_name: win-vm
publisher: Microsoft.Compute
virtual_machine_extension_type: CustomScriptExtension
type_handler_version: '1.9'
settings: '{"fileUris": ["https://raw.githubusercontent.com/ansible/ansible-documentation/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"],"commandToExecute": "powershell -ExecutionPolicy Unrestricted -File ConfigureRemotingForAnsible.ps1"}'
auto_upgrade_minor_version: true
Ansible se nemůže připojit k virtuálnímu počítači, dokud nebude plně nakonfigurovaný WinRM.
Přidejte do playbooku následující úlohy a počkejte na připojení WinRM:
- name: Get facts for one Public IP
azure_rm_publicipaddress_info:
resource_group: myResourceGroup
name: pip
register: publicipaddresses
- name: set public ip address fact
set_fact: publicipaddress="{{ publicipaddresses | json_query('publicipaddresses[0].ip_address')}}"
- name: wait for the WinRM port to come online
wait_for:
port: 5986
host: '{{ publicipaddress }}'
timeout: 600
Klíčové body:
- Tento
azure_rm_virtualmachineextensionmodul umožňuje spustit skript PowerShellu místně v Azure Windows. Spuštěním skriptu PowerShelluConfigureRemotingForAnsible.ps1nakonfigurujete WinRM vytvořením certifikátů podepsaných svým držitelem a otevřením potřebných portů pro připojení Ansible. - Modul
azure_rm_publicipaddress_infose dotazuje na veřejnou IP adresu z Azure a pakset_factuloží výstup do proměnné, kterou máwait_formodul použít.
Kompletní ukázkový playbook Ansible
Tato část obsahuje celý ukázkový playbook Ansible, který jste vytvořili v průběhu tohoto článku.
---
- name: Create Azure VM
hosts: localhost
connection: local
vars_prompt:
- name: password
prompt: "Enter local administrator password"
tasks:
- name: Create resource group
azure_rm_resourcegroup:
name: myResourceGroup
location: eastus
- name: Create virtual network
azure_rm_virtualnetwork:
resource_group: myResourceGroup
name: vNet
address_prefixes: "10.0.0.0/16"
- name: Add subnet
azure_rm_subnet:
resource_group: myResourceGroup
name: subnet
address_prefix: "10.0.1.0/24"
virtual_network: vNet
- name: Create public IP address
azure_rm_publicipaddress:
resource_group: myResourceGroup
allocation_method: Static
name: pip
register: output_ip_address
- name: Output public IP
debug:
msg: "The public IP is {{ output_ip_address.state.ip_address }}"
- name: Create Network Security Group
azure_rm_securitygroup:
resource_group: myResourceGroup
name: networkSecurityGroup
rules:
- name: 'allow_rdp'
protocol: Tcp
destination_port_range: 3389
access: Allow
priority: 1001
direction: Inbound
- name: 'allow_web_traffic'
protocol: Tcp
destination_port_range:
- 80
- 443
access: Allow
priority: 1002
direction: Inbound
- name: 'allow_powershell_remoting'
protocol: Tcp
destination_port_range:
- 5985
- 5986
access: Allow
priority: 1003
direction: Inbound
- name: Create a network interface
azure_rm_networkinterface:
name: nic
resource_group: myResourceGroup
virtual_network: vNet
subnet_name: subnet
security_group: networkSecurityGroup
ip_configurations:
- name: default
public_ip_address_name: pip
primary: True
- name: Create VM
azure_rm_virtualmachine:
resource_group: myResourceGroup
name: win-vm
vm_size: Standard_DS1_v2
admin_username: azureuser
admin_password: "{{ password }}"
network_interfaces: nic
os_type: Windows
image:
offer: WindowsServer
publisher: MicrosoftWindowsServer
sku: 2019-Datacenter
version: latest
no_log: true
- name: Create VM script extension to enable HTTPS WinRM listener
azure_rm_virtualmachineextension:
name: winrm-extension
resource_group: myResourceGroup
virtual_machine_name: win-vm
publisher: Microsoft.Compute
virtual_machine_extension_type: CustomScriptExtension
type_handler_version: '1.9'
settings: '{"fileUris": ["https://raw.githubusercontent.com/ansible/ansible-documentation/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"],"commandToExecute": "powershell -ExecutionPolicy Unrestricted -File ConfigureRemotingForAnsible.ps1"}'
auto_upgrade_minor_version: true
- name: Get facts for one Public IP
azure_rm_publicipaddress_info:
resource_group: myResourceGroup
name: pip
register: publicipaddresses
- name: set public ip address fact
set_fact: publicipaddress="{{ publicipaddresses | json_query('publicipaddresses[0].ip_address')}}"
- name: wait for the WinRM port to come online
wait_for:
port: 5986
host: '{{ publicipaddress }}'
timeout: 600
Připojení k virtuálnímu počítači s Windows
Vytvořte nový playbook Ansible s názvem connect_azure_windows_vm.yml a zkopírujte do playbooku následující obsah:
---
- hosts: all
vars_prompt:
- name: ansible_password
prompt: "Enter local administrator password"
vars:
ansible_user: azureuser
ansible_connection: winrm
ansible_winrm_transport: ntlm
ansible_winrm_server_cert_validation: ignore
tasks:
- name: Test connection
win_ping:
Spusťte Ansible playbook.
ansible-playbook connect_azure_windows_vm.yml -i <publicIPaddress>,
Nahraďte <publicIPaddress> adresou virtuálního počítače.
klíčové body:
- Konfigurace Ansible určuje, jak se Ansible připojuje a ověřuje u vzdálených hostitelů. Proměnné, které je potřeba definovat pro připojení k hostiteli s Windows, závisí na typu připojení WinRM a na možnosti ověřování, kterou jste zvolili. Další informace naleznete v tématu Připojení k hostiteli systému Windows a možnosti ověřování systému Windows.
- Přidání čárky za veřejnou IP adresu obchází analyzátor inventáře Ansible. Tato technika umožňuje spouštět playbooky bez souboru inventáře.
Vyčistěte zdroje
Uložte následující kód jako
delete_rg.yml.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rgSpusťte playbook pomocí příkazu ansible-playbook . Zástupný symbol nahraďte názvem skupiny prostředků, která se má odstranit. Odstraní se všechny prostředky v rámci skupiny prostředků.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"Klíčové body:
-
registerVzhledem k proměnné adebugčásti playbooku se výsledky zobrazí po dokončení příkazu.
-