チュートリアル: Ansible を使用して Azure ルート テーブルを構成する

重要

この記事のサンプル プレイブックを実行するには、Ansible 2.8 (以降) が必要です。

Azure では、Azure のサブネット、仮想ネットワーク、およびオンプレミスのネットワーク間のトラフィックが自動的にルーティングされます。 ご使用環境のルーティングをより制御する必要がある場合は、ルート テーブルを作成することができます。

この記事では、次のことについて説明します。

ルート テーブルを作成する、仮想ネットワークとサブネットを作成する、ルート テーブルをサブネットに関連付ける、ルート テーブルのサブネットとの関連付けを解除する、ルートを作成および削除する、ルート テーブルのクエリを実行する、ルート テーブルを削除する

前提条件

  • Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

ルート テーブルの作成

このセクションのプレイブック コードはルート テーブルを作成します。 ルート テーブルの制限については、Azure の制限に関する記事を参照してください。

次のプレイブックを 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 }}"

ansible-playbook を使用してプレイブックを実行します

ansible-playbook route_table_create.yml

サブネットへのルート テーブルの関連付け

このセクションのプレイブック コードは、次のことを行います。

  • 仮想ネットワークを作成します
  • 仮想ネットワーク内にサブネットを作成する
  • サブネットにルート テーブルを関連付ける

ルート テーブルは仮想ネットワークには関連付られません。 むしろ、ルート テーブルは仮想ネットワークのサブネットに関連付けられます。

仮想ネットワークとルート テーブルは、同じ Azure の場所とサブスクリプションに共存している必要があります。

サブネットとルート テーブルは、一対多のリレーションシップを持ちます。 サブネットは、関連付けられたルート テーブルなしで定義することも、1 つのルート テーブルを使用して定義することもできます。 ルート テーブルは、ゼロ、1 つ、または多数のサブネットに関連付けることができます。

サブネットからのトラフィックは、次に基づいてルーティングされます。

  • ルート テーブル内に定義されているルート
  • 既定のルート
  • オンプレミス ネットワークから伝達されたルート

仮想マシンは Azure Virtual Network ゲートウェイに接続する必要があります。 ゲートウェイは ExpressRoute、または VPN (VPN ゲートウェイで BGP を使用する場合) にすることができます。

次のプレイブックを 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 }}"

ansible-playbook を使用してプレイブックを実行します

ansible-playbook route_table_associate.yml

サブネットからのルート テーブルの関連付けの解除

このセクションのプレイブック コードは、ルート テーブルのサブネットとの関連付けを解除します。

ルート テーブルのサブネットとの関連付けを解除するときは、サブネットの route_tableNone に設定します。

次のプレイブックを 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"

ansible-playbook を使用してプレイブックを実行します

ansible-playbook route_table_dissociate.yml

ルートの作成

このセクションのプレイブック コードは、ルート テーブル内にルートを作成します。

次のプレイブックを 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 }}"

プレイブックを実行する前に、次の注意事項を参照してください。

  • virtual_network_gatewaynext_hop_type と定義されます。 Azure のルート選択方法の詳細については、ルーティングの概要に関するページを参照してください。
  • address_prefix10.1.0.0/16 と定義されます。 このプレフィックスをルート テーブル内で重複させることはできません。

ansible-playbook を使用してプレイブックを実行します

ansible-playbook route_create.yml

ルートの削除

このセクションのプレイブック コードは、ルート テーブルからルートを削除します。

次のプレイブックを 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

ansible-playbook を使用してプレイブックを実行します

ansible-playbook route_delete.yml

ルート テーブル情報の取得

このセクションのプレイブックは、Ansible モジュール azure_rm_routetable_facts を使用してルート テーブル情報を取得します。

次のプレイブックを 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]

ansible-playbook を使用してプレイブックを実行します

ansible-playbook route_table_facts.yml

ルート テーブルの削除

このセクションのプレイブック コードはルート テーブルを削除します。

ルート テーブルが削除されると、そのルートもすべて削除されます。

ルート テーブルがサブネットに関連付けられている場合は削除できません。 ルート テーブルを削除する前に、ルート テーブルのすべてのサブネットとの関連付けを解除してください。

次のプレイブックを 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

ansible-playbook を使用してプレイブックを実行します

ansible-playbook route_table_delete.yml

次のステップ