使用 Ansible 在 Azure 中创建 Linux 虚拟机
本文提供了一个用于配置 Linux 虚拟机的示例 Ansible playbook。
在本文中,学习如何:
- 创建资源组
- 创建虚拟网络
- 创建公共 IP 地址
- 创建网络安全组
- 创建虚拟网络接口卡
- 创建虚拟机
1.配置环境
- Azure 订阅:如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
安装 Ansible - 执行以下任一选项:
- 在 Linux 虚拟机上安装和配置 Ansible
- 配置 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 playbook
创建用于测试和运行示例 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. 运行 playbook
使用 ansible-playbook 运行 Ansible playbook。
ansible-playbook main.yml
5. 验证结果
运行 az vm list 验证 VM 是否已创建。
az vm list -d -o table --query "[?name=='myVM']"
6. 连接到 VM
运行 SSH 命令以连接到新的 Linux VM。 将 <ip-address> 占位符替换为上一步骤中的 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 命令运行 playbook。 将占位符替换为要删除的资源组的名称。 将删除资源组内的所有资源。
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
要点:
- 由于 playbook 的
register
变量和debug
部分,因此在命令完成时,将显示结果。
- 由于 playbook 的