Tutorial: Configurar tabelas de rotas do Azure usando o Ansible

Importante

O Ansible 2.8 (ou posterior) é necessário para executar os playbooks de exemplo neste artigo.

O Azure roteia automaticamente o tráfego entre sub-redes do Azure, redes virtuais e redes locais. Se precisar de mais controle sobre o roteamento do seu ambiente, você pode criar uma tabela de rotas.

Neste artigo, vai aprender a:

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

  • Subscrição do Azure: se não tem uma subscrição do Azure, crie uma conta gratuita antes de começar.

Criar uma tabela de rotas

O código do playbook nesta seção cria uma tabela de rotas. Para obter informações sobre limites de tabela de rotas, consulte Limites do Azure.

Guarde o manual de procedimentos seguinte 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 }}"

Execute o playbook usando o ansible-playbook

ansible-playbook route_table_create.yml

Associar uma tabela de rotas a uma sub-rede

O código do playbook nesta seção:

  • Cria uma rede virtual
  • Cria uma sub-rede dentro da rede virtual
  • Associa uma tabela de rotas à sub-rede

As tabelas de rotas não estão associadas a redes virtuais. Em vez disso, as tabelas de rotas estão associadas à sub-rede de uma rede virtual.

A rede virtual e a tabela de rotas devem coexistir no mesmo local e assinatura do Azure.

Sub-redes e tabelas de rotas têm uma relação um-para-muitos. Uma sub-rede pode ser definida sem nenhuma tabela de rotas associada ou uma tabela de rotas. As tabelas de rotas podem ser associadas a nenhuma, uma ou muitas sub-redes.

O tráfego da sub-rede é roteado com base em:

  • rotas definidas em tabelas de rotas
  • rotas padrão
  • Rotas propagadas a partir de uma rede local

A rede virtual deve estar conectada a um gateway de rede virtual do Azure. O gateway pode ser ExpressRoute ou VPN se estiver usando BGP com um gateway VPN.

Guarde o manual de procedimentos seguinte 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 }}"

Execute o playbook usando o ansible-playbook

ansible-playbook route_table_associate.yml

Dissociar uma tabela de rotas de uma sub-rede

O código do playbook nesta seção dissocia uma tabela de rotas de uma sub-rede.

Ao dissociar uma tabela de rotas de uma sub-rede, defina o route_table para a sub-rede como None.

Guarde o manual de procedimentos seguinte 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"

Execute o playbook usando o ansible-playbook

ansible-playbook route_table_dissociate.yml

Criar uma rota

O código do playbook nesta seção é uma rota dentro de uma tabela de rotas.

Guarde o manual de procedimentos seguinte 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 playbook, consulte as seguintes notas:

  • virtual_network_gateway é definida como next_hop_type. Para obter mais informações sobre como o Azure seleciona rotas, consulte Visão geral de roteamento.
  • address_prefix é definida como 10.1.0.0/16. O prefixo não pode ser duplicado dentro da tabela de rotas.

Execute o playbook usando o ansible-playbook

ansible-playbook route_create.yml

Excluir uma rota

O código do playbook nesta seção exclui uma rota de uma tabela de rotas.

Guarde o manual de procedimentos seguinte 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

Execute o playbook usando o ansible-playbook

ansible-playbook route_delete.yml

Obter informações da tabela de rotas

O código do playbook nesta seção usa o módulo azure_rm_routetable_facts Ansible para recuperar informações da tabela de rotas.

Guarde o manual de procedimentos seguinte 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]

Execute o playbook usando o ansible-playbook

ansible-playbook route_table_facts.yml

Excluir uma tabela de rotas

O código do playbook nesta seção é 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 pode ser excluída se estiver associada a uma sub-rede. Dissocie a tabela de rotas de quaisquer sub-redes antes de tentar excluir a tabela de rotas.

Guarde o manual de procedimentos seguinte 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

Execute o playbook usando o ansible-playbook

ansible-playbook route_table_delete.yml

Próximos passos