Создание виртуальных машин Linux в Azure с помощью Ansible
Эта статья содержит пример сборника схем Ansible для настройки виртуальной машины Linux.
Вы узнаете, как выполнять следующие задачи:
- Создание или изменение группы ресурсов
- Создание виртуальной сети
- Создание общедоступного IP-адреса
- Создание группы безопасности сети
- Создание виртуального сетевого интерфейса
- Создание виртуальной машины
1. Настройка среды
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
Установите Ansible: выполните одно из указанных ниже действий.
- Установите и настройте Ansible на виртуальной машине Linux.
- Настройте Azure Cloud Shell
2. Создание пары ключей SSH
Выполните следующую команду. При появлении запроса укажите файлы, которые будут созданы в каталоге
/home/azureuser/.ssh/authorized_keys
.ssh-keygen -m PEM -t rsa -b 4096
Скопируйте содержимое файла открытого ключа. По умолчанию файл открытого ключа называется
id_rsa.pub
. Значение представляет собой длинную строку, начинающуюся с ssh-rsa. Это значение понадобится вам на следующем шаге.
3. Реализация сборника схем Ansible
Создайте каталог для тестирования и выполнения примера кода Ansible, а затем сделайте его текущим каталогом.
Создайте файл с именем
main.yml
и вставьте приведенный ниже код. Замените заполнитель<key_data>
значением открытого ключа из предыдущего шага.- name: Create Azure VM hosts: localhost connection: local tasks: - name: Create resource group azure_rm_resourcegroup: name: myResourceGroup location: eastus - name: Create virtual network azure_rm_virtualnetwork: resource_group: myResourceGroup name: myVnet address_prefixes: "10.0.0.0/16" - name: Add subnet azure_rm_subnet: resource_group: myResourceGroup name: mySubnet address_prefix: "10.0.1.0/24" virtual_network: myVnet - name: Create public IP address azure_rm_publicipaddress: resource_group: myResourceGroup allocation_method: Static name: myPublicIP register: output_ip_address - name: Public IP of VM debug: msg: "The public IP is {{ output_ip_address.state.ip_address }}." - name: Create Network Security Group that allows SSH azure_rm_securitygroup: resource_group: myResourceGroup name: myNetworkSecurityGroup rules: - name: SSH protocol: Tcp destination_port_range: 22 access: Allow priority: 1001 direction: Inbound - name: Create virtual network interface card azure_rm_networkinterface: resource_group: myResourceGroup name: myNIC virtual_network: myVnet subnet: mySubnet public_ip_name: myPublicIP security_group: myNetworkSecurityGroup - name: Create VM azure_rm_virtualmachine: resource_group: myResourceGroup name: myVM vm_size: Standard_DS1_v2 admin_username: azureuser ssh_password_enabled: false ssh_public_keys: - path: /home/azureuser/.ssh/authorized_keys key_data: "<key_data>" network_interfaces: myNIC image: offer: 0001-com-ubuntu-server-jammy publisher: Canonical sku: 22_04-lts version: latest
4. Запуск сборника схем
Чтобы запустить сборник схем Ansible, выполните команду ansible-playbook.
ansible-playbook main.yml
5. Проверка результатов
Выполните az vm list, чтобы проверить, создана ли виртуальная машина.
az vm list -d -o table --query "[?name=='myVM']"
6. Подключение к виртуальной машине
Выполните команду SSH, чтобы подключиться к новой виртуальной машине Linux. Замените <заполнитель IP-адреса> IP-адресом НА IP-адрес из предыдущего шага.
ssh azureuser@<ip_address> -i /home/azureuser/.ssh/authorized_keys/id_rsa
Очистка ресурсов
Сохраните следующий код как
delete_rg.yml
.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rg
Чтобы запустить сборник схем, выполните команду ansible-playbook. Замените заполнитель именем удаляемой группы ресурсов. В указанной группе ресурсов будут удалены все ресурсы.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
Основные моменты:
- В связи с наличием переменной
register
и разделаdebug
в сборнике схем результаты будут отображены после завершения команды.
- В связи с наличием переменной