Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede , Ansible ile Azure'da Windows Server 2019 VM'sini dağıtma adımları gösterilmektedir.
Bu makalede şunları öğreneceksiniz:
- Bir kaynak grubu oluşturun
- Sanal ağ, genel IP, ağ güvenlik grubu ve ağ arabirimi oluşturma
- Windows Server sanal makinesi dağıtma
- WinRM aracılığıyla sanal makineye bağlanma
- Windows IIS'yi yapılandırmak için Ansible playbook'u çalıştırma
Önkoşullar
- Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
- Azure hizmet sorumlusu: Aşağıdaki değerleri not ederek bir hizmet sorumlusu oluşturun: appId, displayName, password ve tenant.
Ansible'ı Yükleme: Aşağıdaki seçeneklerden birini yapın:
- Ansible'ı Linux sanal makinesine yükleme ve yapılandırma
- Azure Cloud Shell'i yapılandırma
Ansible'a WinRM Desteği Ekleme
WinRM üzerinden iletişim kurmak için Ansible denetim sunucusu python paketine pywinrmihtiyaç duyar.
Yüklemek için pywinrm, Ansible sunucusunda aşağıdaki komutu çalıştırın.
pip install "pywinrm>=0.3.0"
Daha fazla bilgi için bkz. Ansible için Windows Uzaktan Yönetimi.
Bir kaynak grubu oluşturun
adlı azure_windows_vm.yml bir Ansible playbook oluşturun ve aşağıdaki içerikleri playbook'a kopyalayın:
---
- name: Create Azure VM
hosts: localhost
connection: local
tasks:
- name: Create resource group
azure_rm_resourcegroup:
name: myResourceGroup
location: eastus
Önemli noktalar:
localhost veolarak ayarlandığında , playbook Ansible sunucusunda yerel olarak çalışır.
Sanal ağı ve alt ağı oluşturma
Bir sanal ağ oluşturmak için azure_windows_vm.yml Ansible playbook'a aşağıdaki görevleri ekleyin:
- 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
Genel IP adresi oluşturma
Aşağıdaki görevleri azure_windows_vm.yml playbook'a ekleyerek genel bir IP adresi oluşturun.
- 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 }}"
Önemli noktalar:
- Ansible
registermodülü, çıkışınıazure_rm_publicipaddressadlıoutput_ip_addressbir değişkende depolamak için kullanılır. - Modül
debug, konsola VM'nin genel IP adresini çıkarmak için kullanılır.
Ağ güvenlik grubu ve NIC oluşturma
Ağ güvenlik grubu, vm'ye erişmesine izin verilen ve erişilmeyen trafiği tanımlar.
WinRM ve HTTP bağlantı noktalarını açmak için Ansible playbook'a azure_windows_vm.yml aşağıdaki görevleri ekleyin:
- 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
Önemli noktalar:
- Sanal ağ arabirim kartı VM'nizi sanal ağına, genel IP adresine ve güvenlik grubuna bağlar.
-
azure_rm_securitygroupAnsible sunucusundan uzak ana bilgisayara WinRM trafiğine izin vermek için5985ve5986bağlantı noktalarına izin veren bir Azure ağ güvenlik grubu oluşturur.
Sanal makine oluşturun
Ardından, bu makalenin önceki bölümlerinde oluşturduğunuz tüm kaynakları kullanan bir sanal makine oluşturun.
Ansible playbook'a azure_windows_vm.yml aşağıdaki görevi ekleyin:
- 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
admin_password değeri{{ password }}, Windows VM parolasını içeren bir Ansible değişkenidir. Bu değişkeni güvenli bir şekilde doldurmak için playbook'un başına bir var_prompts giriş ekleyin.
- name: Create Azure VM
hosts: localhost
connection: local
vars_prompt:
- name: password
prompt: "Enter local administrator password"
tasks:
Önemli noktalar:
- Hassas verileri düz metin olarak depolamaktan kaçının. Çalışma zamanında değişkenleri doldurmak için kullanın
var_prompts. Parolaların günlüğe kaydedilmesini önlemek içinno_log: trueekleyin.
WinRM Dinleyicisini yapılandırma
Ansible, WinRM aracılığıyla Windows uzak konaklarına bağlanmak ve yapılandırmak için PowerShell kullanır.
WinRM'yi yapılandırmak için aşağıdaki ext azure_rm_virtualmachineextensionöğesini ekleyin:
- 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, WinRM tam olarak yapılandırılana kadar VM'ye bağlanamaz.
WinRM bağlantısını beklemek için playbook'unuza aşağıdaki görevleri ekleyin:
- 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
Önemli noktalar:
- Bu modül,
azure_rm_virtualmachineextensionAzure Windows'ta yerel olarak bir PowerShell betiği çalıştırmanıza olanak tanır.ConfigureRemotingForAnsible.ps1PowerShell betiğini çalıştırmak, otomatik olarak imzalanan sertifikalar oluşturarak ve Ansible'ın bağlanması için gerekli bağlantı noktalarını açarak WinRM'yi yapılandırıyor. - Modül,
azure_rm_publicipaddress_infoAzure'dan genel IP adresini sorgular ve ardındanset_factçıkışı modülün kullanması için bir değişkendewait_fordepolar.
Tam bir Ansible çalışma kitabı örneği
Bu bölümde, bu makale boyunca oluşturduğunuz örnek Ansible playbook'unun tamamı listelenir.
---
- 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
Windows sanal makinesine bağlanma
adlı connect_azure_windows_vm.yml yeni bir Ansible playbook oluşturun ve aşağıdaki içerikleri playbook'a kopyalayın:
---
- 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:
Ansible playbook'unu çalıştırın.
ansible-playbook connect_azure_windows_vm.yml -i <publicIPaddress>,
<publicIPaddress> adresini sanal makinenizin adresiyle değiştirin.
Önemli noktalar:
- Ansible yapılandırması, Ansible'ın uzak konaklara nasıl bağlandığını ve kimlik doğrulamasını belirler. Bir Windows konağına bağlanmak için tanımlamanız gereken değişkenler, WinRM bağlantı türünüz ve seçtiğiniz kimlik doğrulama seçeneğine bağlıdır. Daha fazla bilgi için bkz. Windows Konağına Bağlanma ve Windows Kimlik Doğrulama Seçenekleri.
- Genel IP adresinden sonra virgül eklemek Ansible'ın envanter ayrıştırıcısını atlar. Bu teknik, playbook'ları envanter dosyası olmadan çalıştırmanızı sağlar.
Kaynakları temizle
Aşağıdaki kodu olarak
delete_rg.ymlkaydedin.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rgansible-playbook komutunu kullanarak playbook'u çalıştırın. Yer tutucuyu silinecek kaynak grubunun adıyla değiştirin. Kaynak grubundaki tüm kaynaklar silinir.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"Önemli noktalar:
- Playbook'un
registerdeğişkeni vedebugbölümü nedeniyle, komut tamamlandığında sonuçlar görüntülenir.
- Playbook'un