使用 Ansible 在 Azure 中建立 Linux 虛擬機

警告

本文參考 CentOS,亦即接近生命週期結束 (EOL) 狀態的 Linux 發行版本。 請據以考慮您的使用和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指引

本文提供用來設定 Linux 虛擬機的範例 Ansible 劇本。

在本文中,您將學會如何:

  • 建立資源群組
  • 建立虛擬網路
  • 建立公用 IP 位址
  • 建立網路安全性群組
  • 建立虛擬網路介面卡
  • 建立虛擬機器

1.設定您的環境

  • Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

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-playbook 以執行 Ansible 劇本。

ansible-playbook main.yml

5.確認結果

執行 az vm list 以確認 VM 已建立。

az vm list -d -o table --query "[?name=='myVM']"

6. 連線 至 VM

執行 SSH 命令以連線到新的 Linux VM。 將 <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區段,因此命令完成時會顯示結果。

下一步