Tutorial: Configurar tabelas de rotas do Azure usando o Ansible
Importante
O Ansible 2.8 (ou posterior) é necessário para executar os guias estratégicos de exemplo deste artigo.
O Azure roteia o tráfego automaticamente entre redes virtuais, redes locais e sub-redes do Azure. Se você precisar de mais controle sobre o roteamento do ambiente, crie uma tabela de rotas.
Neste artigo, você aprenderá como:
Criar uma tabela de rotas Criar uma rede virtual e uma sub-rede Associar uma tabela de rotas a uma sub-rede Desassociar uma tabela de rotas de uma sub-rede Criar e excluir rotas Consultar uma tabela de rotas Excluir uma tabela de rotas
Pré-requisitos
- Assinatura do Azure: caso você não tenha uma assinatura do Azure, crie uma conta gratuita antes de começar.
Instalar o Ansible: escolha uma das seguintes opções:
- Instalar e configurar o Ansible em uma máquina virtual do Linux
- Configurar o Azure Cloud Shell e, se você não tiver acesso a uma máquina virtual do Linux, criar uma máquina virtual com o Ansible.
Criar uma tabela de rotas
O código do guia estratégico nesta seção cria uma tabela de rotas. Para obter informações sobre os limites da tabela de rotas, confira limites do Azure.
Salve o guia estratégico a seguir como route_table_create.yml
:
- hosts: localhost
vars:
route_table_name: myRouteTable
resource_group: myResourceGroup
tasks:
- name: Create a route table
azure_rm_routetable:
name: "{{ route_table_name }}"
resource_group: "{{ resource_group }}"
Executar o guia estratégico usando ansible-playbook
ansible-playbook route_table_create.yml
Associar uma tabela de rotas a uma sub-rede
O código do guia estratégico nesta seção:
- Cria uma rede virtual
- Cria uma sub-rede dentro da rede virtual
- Associa uma tabela de rotas a uma sub-rede
As tabelas de rotas não estão associadas às redes virtuais. Em vez disso, as tabelas de rotas são associadas a sub-rede de uma rede virtual.
A rede virtual e a tabela de rotas devem coexistir na mesma assinatura e localização do Azure.
As sub-redes e as tabelas de rotas têm uma relação um-para-muitos. Uma sub-rede pode ser definida sem tabelas de rotas associadas ou com apenas uma tabela de rotas. As tabelas de rotas podem ser associadas a nenhuma, apenas uma ou várias sub-redes.
O tráfego da sub-rede é roteado com base em:
- rotas definidas nas tabelas de rotas
- rotas padrão
- rotas propagadas de uma rede local
A rede virtual deve estar conectada ao gateway de rede virtual do Azure. O gateway pode ser o ExpressRoute, ou VPN se usar o BGP com um gateway de VPN.
Salve o guia estratégico a seguir como route_table_associate.yml
:
- hosts: localhost
vars:
subnet_name: mySubnet
virtual_network_name: myVirtualNetwork
route_table_name: myRouteTable
resource_group: myResourceGroup
tasks:
- name: Create virtual network
azure_rm_virtualnetwork:
name: "{{ virtual_network_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.3
- name: Create a subnet with route table
azure_rm_subnet:
name: "{{ subnet_name }}"
virtual_network_name: "{{ virtual_network_name }}"
resource_group: "{{ resource_group }}"
address_prefix_cidr: "10.1.0.0/24"
route_table: "{{ route_table_name }}"
Executar o guia estratégico usando ansible-playbook
ansible-playbook route_table_associate.yml
Desassociar uma tabela de rotas de uma sub-rede
O código do guia estratégico nesta seção dissocia uma tabela de rotas de uma sub-rede.
Ao dissociar uma tabela de rotas de uma sub-rede, defina a route_table
da sub-rede como None
.
Salve o guia estratégico a seguir como route_table_dissociate.yml
:
- hosts: localhost
vars:
subnet_name: mySubnet
virtual_network_name: myVirtualNetwork
resource_group: myResourceGroup
tasks:
- name: Dissociate a route table
azure_rm_subnet:
name: "{{ subnet_name }}"
virtual_network_name: "{{ virtual_network_name }}"
resource_group: "{{ resource_group }}"
address_prefix_cidr: "10.1.0.0/24"
Executar o guia estratégico usando ansible-playbook
ansible-playbook route_table_dissociate.yml
Criar uma rota
O código do guia estratégico nesta seção cria uma rota dentro de uma tabela de rotas.
Salve o guia estratégico a seguir como route_create.yml
:
- hosts: localhost
vars:
route_name: myRoute
route_table_name: myRouteTable
resource_group: myResourceGroup
tasks:
- name: Create route
azure_rm_route:
name: "{{ route_name }}"
resource_group: "{{ resource_group }}"
next_hop_type: virtual_network_gateway
address_prefix: "10.1.0.0/16"
route_table_name: "{{ route_table_name }}"
Antes de executar o guia estratégico, confira as observações a seguir:
virtual_network_gateway
é definido comonext_hop_type
. Para saber mais sobre como o Azure escolhe as rotas, confira Visão geral de roteamento.address_prefix
é definido como10.1.0.0/16
. O prefixo não pode ser duplicado dentro da tabela de rotas.
Executar o guia estratégico usando ansible-playbook
ansible-playbook route_create.yml
Excluir uma rota
O código do guia estratégico nesta seção exclui uma rota de uma tabela de rotas.
Salve o guia estratégico a seguir como route_delete.yml
:
- hosts: localhost
vars:
route_name: myRoute
route_table_name: myRouteTable
resource_group: myResourceGroup
tasks:
- name: Remove route
azure_rm_route:
name: "{{ route_name }}"
resource_group: "{{ resource_group }}"
route_table_name: "{{ route_table_name }}"
state: absent
Executar o guia estratégico usando ansible-playbook
ansible-playbook route_delete.yml
Obter informações de uma tabela de rotas
O código do guia estratégico nesta seção usa o módulo do Ansible azure_rm_routetable_facts
para recuperar informações da tabela de rotas.
Salve o guia estratégico a seguir como route_table_facts.yml
:
- hosts: localhost
vars:
route_table_name: myRouteTable
resource_group: myResourceGroup
tasks:
- name: Get route table information
azure_rm_routetable_facts:
resource_group: "{{ resource_group }}"
name: "{{ route_table_name }}"
register: query
- debug:
var: query.route_tables[0]
Executar o guia estratégico usando ansible-playbook
ansible-playbook route_table_facts.yml
Excluir uma tabela de rotas
O código do guia estratégico nesta seção exclui uma tabela de rotas.
Quando uma tabela de rotas é excluída, todas as suas rotas também são excluídas.
Uma tabela de rotas não poderá ser excluída se estiver associada a uma sub-rede. Desassocie a tabela de rotas de todas as sub-redes antes de tentar excluí-la.
Salve o guia estratégico a seguir como route_table_delete.yml
:
- hosts: localhost
vars:
route_table_name: myRouteTable
resource_group: myResourceGroup
tasks:
- name: Create a route table
azure_rm_routetable:
name: "{{ route_table_name }}"
resource_group: "{{ resource_group }}"
state: absent
Executar o guia estratégico usando ansible-playbook
ansible-playbook route_table_delete.yml