Создание виртуальных машин Linux в Azure с помощью Ansible

Внимание

Эта статья ссылается на CentOS, дистрибутив Linux, который приближается к состоянию конца жизни (EOL). Обратите внимание на использование и план соответствующим образом. Дополнительные сведения см. в руководстве centOS End Of Life.

Эта статья содержит пример сборника схем Ansible для настройки виртуальной машины Linux.

Вы узнаете, как выполнять следующие задачи:

  • Создание или изменение группы ресурсов
  • Создание виртуальной сети
  • Создание общедоступного IP-адреса
  • Создание группы безопасности сети
  • Создание виртуального сетевого интерфейса
  • Создание виртуальной машины

1. Настройка среды

2. Создание пары ключей SSH

  1. Выполните следующую команду. При появлении запроса укажите файлы, которые будут созданы в каталоге /home/azureuser/.ssh/authorized_keys.

    ssh-keygen -m PEM -t rsa -b 4096
    
  2. Скопируйте содержимое файла открытого ключа. По умолчанию файл открытого ключа называется id_rsa.pub. Значение представляет собой длинную строку, начинающуюся с ssh-rsa. Это значение понадобится вам на следующем шаге.

3. Реализация сборника схем Ansible

  1. Создайте каталог для тестирования и выполнения примера кода Ansible, а затем сделайте его текущим каталогом.

  2. Создайте файл с именем 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: CentOS
            publisher: OpenLogic
            sku: '7.5'
            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

Очистка ресурсов

  1. Сохраните следующий код как delete_rg.yml.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. Чтобы запустить сборник схем, выполните команду ansible-playbook. Замените заполнитель именем удаляемой группы ресурсов. В указанной группе ресурсов будут удалены все ресурсы.

    ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
    

    Основные моменты:

    • В связи с наличием переменной register и раздела debug в сборнике схем результаты будут отображены после завершения команды.

Следующие шаги