Créer une machine virtuelle Linux dans Azure avec Ansible
Cet article présente un exemple de playbook Ansible pour la configuration d’une machine virtuelle Linux.
Dans cet article, vous apprendrez comment :
- Créer un groupe de ressources
- Créez un réseau virtuel
- Créer une adresse IP publique
- Créer un groupe de sécurité réseau
- Créer une carte d’interface réseau virtuelle
- Création d'une machine virtuelle
1. Configurer votre environnement
- Abonnement Azure : Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Installer Ansible. Pour cela, choisissez l’une des options suivantes :
- Installez et configurez Ansible sur une machine virtuelle Linux
- Configurez Azure Cloud Shell.
2. Créer une paire de clés SSH
Exécutez la commande suivante : Quand vous y êtes invité, spécifiez les fichiers à créer dans le répertoire suivant :
/home/azureuser/.ssh/authorized_keys
.ssh-keygen -m PEM -t rsa -b 4096
Copiez le contenu du fichier de clé publique. Par défaut, le fichier de clé publique est nommé
id_rsa.pub
. La valeur est une chaîne longue commençant par « ssh-rsa ». Vous aurez besoin de cette valeur à l’étape suivante.
3. Implémenter le playbook Ansible
Créez un répertoire dans lequel tester et exécuter l’exemple de code Ansible et définissez-le comme répertoire actuel.
Créez un fichier nommé
main.yml
et insérez le code suivant. Remplacez l’espace réservé<key_data>
par la valeur de clé publique obtenue à l’étape précédente.- 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. Exécuter le playbook
Exécutez ansible-playbook pour exécuter le playbook Ansible.
ansible-playbook main.yml
5. Vérifier les résultats
Exécutez az vm list pour vérifier que la machine virtuelle a été créée.
az vm list -d -o table --query "[?name=='myVM']"
6. Se connecter à la machine virtuelle
Exécutez la commande SSH pour vous connecter à votre nouvelle machine virtuelle Linux. Remplacez l’espace réservé <ip-address> par l’adresse IP de l’étape précédente.
ssh azureuser@<ip_address> -i /home/azureuser/.ssh/authorized_keys/id_rsa
Nettoyer les ressources
Enregistrez le code suivant en tant que
delete_rg.yml
.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rg
Exécutez le playbook en utilisant la commande ansible-playbook. Remplacez l’espace réservé par le nom du groupe de ressources à supprimer. Toutes les ressources du groupe de ressources seront supprimées.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
Points essentiels :
- En raison de la variable
register
et de la sectiondebug
du playbook, les résultats s’affichent quand la commande se termine.
- En raison de la variable