Tutoriel : Gérer le trafic web avec Azure Application Gateway à l’aide d’Ansible
Important
Ansible 2.7 (ou version ultérieure) est nécessaire pour exécuter les exemples de playbooks dans cet article.
Azure Application Gateway est un équilibreur de charge du trafic web qui vous permet de gérer le trafic vers vos applications web. En fonction de l’adresse IP et du port sources, les équilibreurs de charge traditionnels acheminent le trafic vers une adresse IP de et un port de destination. Application Gateway vous offre un niveau plus précis du contrôle de l’acheminement du trafic en fonction de l’URL. Par exemple, vous pouvez définir que si images
est le chemin de l’URL, le trafic est acheminé vers un ensemble spécifique de serveurs (appelé pool) configuré pour des images.
Dans cet article, vous apprendrez comment :
- Configurer un réseau
- Créer deux instances de conteneurs Azure avec des images HTTPD
- Créer une passerelle d’application qui fonctionne avec les instances de conteneurs Azure dans le pool de serveurs
Prérequis
- 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 et, si vous n’avez pas accès à une machine virtuelle Linux, créez une machine virtuelle avec Ansible.
Créer un groupe de ressources
Le code de playbook dans cette section crée un groupe de ressources Azure. Un groupe de ressources est un conteneur logique dans lequel les ressources Azure sont configurées.
Enregistrez le playbook suivant en tant que rg.yml
:
- hosts: localhost
vars:
resource_group: myResourceGroup
location: eastus
tasks:
- name: Create a resource group
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
Avant d’exécuter le playbook, consultez les notes suivantes :
- Le nom du groupe de ressources est
myResourceGroup
. Cette valeur est utilisée dans tout le tutoriel. - Le groupe de ressources est créé à l’emplacement
eastus
.
Exécutez le playbook en utilisant ansible-playbook
ansible-playbook rg.yml
Créer des ressources réseau
Le code de playbook dans cette section crée un réseau virtuel pour permettre à la passerelle d’application de communiquer avec d’autres ressources.
Enregistrez le playbook suivant en tant que vnet_create.yml
:
- hosts: localhost
vars:
resource_group: myResourceGroup
location: eastus
vnet_name: myVNet
subnet_name: myAGSubnet
publicip_name: myAGPublicIPAddress
publicip_domain: mydomain
tasks:
- name: Create a virtual network
azure_rm_virtualnetwork:
name: "{{ vnet_name }}"
resource_group: "{{ resource_group }}"
address_prefixes_cidr:
- 10.1.0.0/16
- 172.100.0.0/16
dns_servers:
- 127.0.0.1
- 127.0.0.2
- name: Create a subnet
azure_rm_subnet:
name: "{{ subnet_name }}"
virtual_network_name: "{{ vnet_name }}"
resource_group: "{{ resource_group }}"
address_prefix_cidr: 10.1.0.0/24
- name: Create a public IP address
azure_rm_publicipaddress:
resource_group: "{{ resource_group }}"
allocation_method: Dynamic
name: "{{ publicip_name }}"
domain_name_label: "{{ publicip_domain }}"
Avant d’exécuter le playbook, consultez les notes suivantes :
- La section
vars
contient les valeurs qui sont utilisées pour créer les ressources réseau. - Vous devrez modifier ces valeurs pour votre environnement spécifique.
Exécutez le playbook en utilisant ansible-playbook
ansible-playbook vnet_create.yml
Créer des serveurs
Le code de playbook dans cette section crée deux instances de conteneur Azure avec des images HTTPD à utiliser en tant que serveurs web pour la passerelle d’application.
Enregistrez le playbook suivant en tant que aci_create.yml
:
- hosts: localhost
vars:
resource_group: myResourceGroup
location: eastus
aci_1_name: myACI1
aci_2_name: myACI2
tasks:
- name: Create a container with httpd image
azure_rm_containerinstance:
resource_group: "{{ resource_group }}"
name: "{{ aci_1_name }}"
os_type: linux
ip_address: public
location: "{{ location }}"
ports:
- 80
containers:
- name: mycontainer
image: httpd
memory: 1.5
ports:
- 80
- name: Create another container with httpd image
azure_rm_containerinstance:
resource_group: "{{ resource_group }}"
name: "{{ aci_2_name }}"
os_type: linux
ip_address: public
location: "{{ location }}"
ports:
- 80
containers:
- name: mycontainer
image: httpd
memory: 1.5
ports:
- 80
Exécutez le playbook en utilisant ansible-playbook
ansible-playbook aci_create.yml
Créer la passerelle Application Gateway
Le code de playbook dans cette section crée une passerelle d’application nommée myAppGateway
.
Enregistrez le playbook suivant en tant que appgw_create.yml
:
- hosts: localhost
connection: local
vars:
resource_group: myResourceGroup
vnet_name: myVNet
subnet_name: myAGSubnet
location: eastus
publicip_name: myAGPublicIPAddress
appgw_name: myAppGateway
aci_1_name: myACI1
aci_2_name: myACI2
tasks:
- name: Get info of Subnet
azure_rm_resource_facts:
api_version: '2018-08-01'
resource_group: "{{ resource_group }}"
provider: network
resource_type: virtualnetworks
resource_name: "{{ vnet_name }}"
subresource:
- type: subnets
name: "{{ subnet_name }}"
register: subnet
- name: Get info of backend server 1
azure_rm_resource_facts:
api_version: '2018-04-01'
resource_group: "{{ resource_group }}"
provider: containerinstance
resource_type: containergroups
resource_name: "{{ aci_1_name }}"
register: aci_1_output
- name: Get info of backend server 2
azure_rm_resource_facts:
api_version: '2018-04-01'
resource_group: "{{ resource_group }}"
provider: containerinstance
resource_type: containergroups
resource_name: "{{ aci_2_name }}"
register: aci_2_output
- name: Create instance of Application Gateway
azure_rm_appgateway:
resource_group: "{{ resource_group }}"
name: "{{ appgw_name }}"
sku:
name: standard_small
tier: standard
capacity: 2
gateway_ip_configurations:
- subnet:
id: "{{ subnet.response[0].id }}"
name: appGatewayIP
frontend_ip_configurations:
- public_ip_address: "{{ publicip_name }}"
name: appGatewayFrontendIP
frontend_ports:
- port: 80
name: appGatewayFrontendPort
backend_address_pools:
- backend_addresses:
- ip_address: "{{ aci_1_output.response[0].properties.ipAddress.ip }}"
- ip_address: "{{ aci_2_output.response[0].properties.ipAddress.ip }}"
name: appGatewayBackendPool
backend_http_settings_collection:
- port: 80
protocol: http
cookie_based_affinity: enabled
name: appGatewayBackendHttpSettings
http_listeners:
- frontend_ip_configuration: appGatewayFrontendIP
frontend_port: appGatewayFrontendPort
name: appGatewayHttpListener
request_routing_rules:
- rule_type: Basic
backend_address_pool: appGatewayBackendPool
backend_http_settings: appGatewayBackendHttpSettings
http_listener: appGatewayHttpListener
name: rule1
Avant d’exécuter le playbook, consultez les notes suivantes :
appGatewayIP
est définie dans le blocgateway_ip_configurations
. Une référence de sous-réseau est requise pour la configuration IP de la passerelle.appGatewayBackendPool
est définie dans le blocbackend_address_pools
. Une passerelle d’application doit avoir au moins un pool d’adresses principal.appGatewayBackendHttpSettings
est définie dans le blocbackend_http_settings_collection
. Ils spécifient que le port 80 et le protocole HTTP sont utilisés pour la communication.appGatewayHttpListener
est définie dans le blocbackend_http_settings_collection
. Il s’agit de l’écouteur par défaut associé à appGatewayBackendPool.appGatewayFrontendIP
est définie dans le blocfrontend_ip_configurations
. ce paramètre assigne myAGPublicIPAddress à appGatewayHttpListener.rule1
est définie dans le blocrequest_routing_rules
. Il s’agit de la règle de routage par défaut associée à appGatewayHttpListener.
Exécutez le playbook en utilisant ansible-playbook
ansible-playbook appgw_create.yml
La création de la passerelle d’application peut prendre plusieurs minutes.
Tester la passerelle d’application
Dans la section Créer un groupe de ressources, vous spécifiez un emplacement. Notez sa valeur.
Dans la section Créer des ressources réseau, vous spécifiez le domaine. Notez sa valeur.
Pour l’URL de test en remplaçant le modèle suivant par l’emplacement et le domaine :
http://<domain>.<location>.cloudapp.azure.com
.Accédez à l’URL de test.
Si vous voyez la page suivante, la passerelle d’application fonctionne comme prévu.
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
Étapes suivantes
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour