チュートリアル: Ansible を使用して Azure ルート テーブルを構成する
重要
この記事のサンプル プレイブックを実行するには、Ansible 2.8 (以降) が必要です。
Azure では、Azure のサブネット、仮想ネットワーク、およびオンプレミスのネットワーク間のトラフィックが自動的にルーティングされます。 ご使用環境のルーティングをより制御する必要がある場合は、ルート テーブルを作成することができます。
この記事では、次のことについて説明します。
ルート テーブルを作成する、仮想ネットワークとサブネットを作成する、ルート テーブルをサブネットに関連付ける、ルート テーブルのサブネットとの関連付けを解除する、ルートを作成および削除する、ルート テーブルのクエリを実行する、ルート テーブルを削除する
前提条件
- Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
Ansible のインストール: 次のいずれかのオプションを実行します。
- Linux 仮想マシンに Ansible をインストールして構成する
- Azure Cloud Shell の構成 - アクセスできる Linux 仮想マシンがない場合は、Ansible で仮想マシンを作成できます。
ルート テーブルの作成
このセクションのプレイブック コードはルート テーブルを作成します。 ルート テーブルの制限については、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_table
を None
に設定します。
次のプレイブックを 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_gateway
はnext_hop_type
と定義されます。 Azure のルート選択方法の詳細については、ルーティングの概要に関するページを参照してください。address_prefix
は10.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