チュートリアル: Ansible を使用して Azure Virtual Network ピアリングを構成する

重要

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

仮想ネットワーク (VNet) ピアリングを使用すると、2 つの Azure 仮想ネットワークをシームレスに接続することができます。 ピアリングされた 2 つの仮想ネットワークは、接続において、見かけ上 1 つのネットワークとして機能します。

同じ仮想ネットワーク内の VM 間のトラフィックは、プライベート IP アドレスを使用してルーティングされます。 同様に、ピアリングされた仮想ネットワーク内の VM 間のトラフィックは、Microsoft のバックボーン インフラストラクチャを介してルーティングされます。 その結果、異なる仮想ネットワーク内の VM が相互に通信することができます。

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

  • 2 つの仮想ネットワークを作成する
  • 2 つの仮想ネットワークをピアリングする
  • 2 つのネットワーク間のピアリングを削除する

前提条件

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

2 つのリソース グループを作成する

リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。

このセクションのサンプル プレイブック コードは、次の目的で使用します。

  • 2 つのリソース グループを作成する
  - name: Create a resource group
    azure_rm_resourcegroup:
      name: "{{ resource_group }}"
      location: "{{ location }}"
  - name: Create secondary resource group
    azure_rm_resourcegroup:
      name: "{{ resource_group_secondary }}"
      location: "{{ location }}"

最初の仮想マシンを作成する

このセクションのサンプル プレイブック コードは、次の目的で使用します。

  • 仮想ネットワークの作成
  • 仮想ネットワーク内のサブネットを作成する
  - name: Create first virtual network
    azure_rm_virtualnetwork:
      resource_group: "{{ resource_group }}"
      name: "{{ vnet_name1 }}"
      address_prefixes: "10.0.0.0/16"
  - name: Add subnet
    azure_rm_subnet:
      resource_group: "{{ resource_group }}"
      name: "{{ vnet_name1 }}"
      address_prefix: "10.0.0.0/24"
      virtual_network: "{{ vnet_name1 }}"

2 番目の仮想ネットワークを作成する

このセクションのサンプル プレイブック コードは、次の目的で使用します。

  • 仮想ネットワークの作成
  • 仮想ネットワーク内のサブネットを作成する
  - name: Create second virtual network
    azure_rm_virtualnetwork:
      resource_group: "{{ resource_group_secondary }}"
      name: "{{ vnet_name2 }}"
      address_prefixes: "10.1.0.0/16"
  - name: Add subnet
    azure_rm_subnet:
      resource_group: "{{ resource_group }}"
      name: "{{ vnet_name2 }}"
      address_prefix: "10.1.0.0/24"
      virtual_network: "{{ vnet_name2 }}"

2 つの仮想ネットワークをピアリングする

このセクションのサンプル プレイブック コードは、次の目的で使用します。

  • 仮想ネットワーク ピアリングを初期化する
  • 前に作成した 2 つの仮想ネットワークをピアリングする
  - name: Initial vnet peering
    azure_rm_virtualnetworkpeering:
      resource_group: "{{ resource_group }}"
      name: "{{ peering_name }}"
      virtual_network: "{{ vnet_name1 }}"
      remote_virtual_network:
        resource_group: "{{ resource_group_secondary }}"
        name: "{{ vnet_name2 }}"
      allow_virtual_network_access: true
      allow_forwarded_traffic: true

  - name: Connect vnet peering
    azure_rm_virtualnetworkpeering:
      resource_group: "{{ resource_group_secondary }}"
      name: "{{ peering_name }}"
      virtual_network: "{{ vnet_name2 }}"
      remote_virtual_network:
        resource_group: "{{ resource_group }}"
        name: "{{ vnet_name1 }}"
      allow_virtual_network_access: true
      allow_forwarded_traffic: true

仮想ネットワーク ピアリングを削除する

このセクションのサンプル プレイブック コードは、次の目的で使用します。

  • 前に作成した 2 つの仮想ネットワーク間のピアリングを削除する
  - name: Delete vnet peering
    azure_rm_virtualnetworkpeering:
      resource_group: "{{ resource_group }}"
      name: "{{ peering_name }}"
      virtual_network: "{{ vnet_name1 }}"
      state: absent

サンプル プレイブックを取得する

完全なサンプル プレイブックを取得するには、次の 2 つの方法があります。

  • プレイブックをダウンロードして、vnet_peering.yml に保存する。
  • vnet_peering.yml という名前の新規ファイルを作成して、それに次の内容をコピーする。
- hosts: localhost
  tasks:
    - name: Prepare random postfix
      set_fact:
        rpfx: "{{ 1000 | random }}"
      run_once: yes

- name: Connect virtual networks with virtual network peering
  hosts: localhost
  connection: local
  vars:
    resource_group: "{{ resource_group_name }}"
    resource_group_secondary: "{{ resource_group_name }}2"
    vnet_name1: "myVnet{{ rpfx }}"
    vnet_name2: "myVnet{{ rpfx }}2"
    peering_name: peer1
    location: eastus2
  tasks:
  - name: Create a resource group
    azure_rm_resourcegroup:
      name: "{{ resource_group }}"
      location: "{{ location }}"
  - name: Create secondary resource group
    azure_rm_resourcegroup:
      name: "{{ resource_group_secondary }}"
      location: "{{ location }}"
  - name: Create first virtual network
    azure_rm_virtualnetwork:
      resource_group: "{{ resource_group }}"
      name: "{{ vnet_name1 }}"
      address_prefixes: "10.0.0.0/16"
  - name: Add subnet
    azure_rm_subnet:
      resource_group: "{{ resource_group }}"
      name: "{{ vnet_name1 }}"
      address_prefix: "10.0.0.0/24"
      virtual_network: "{{ vnet_name1 }}"
  - name: Create second virtual network
    azure_rm_virtualnetwork:
      resource_group: "{{ resource_group_secondary }}"
      name: "{{ vnet_name2 }}"
      address_prefixes: "10.1.0.0/16"
  - name: Add subnet
    azure_rm_subnet:
      resource_group: "{{ resource_group }}"
      name: "{{ vnet_name2 }}"
      address_prefix: "10.1.0.0/24"
      virtual_network: "{{ vnet_name2 }}"
  - name: Initial vnet peering
    azure_rm_virtualnetworkpeering:
      resource_group: "{{ resource_group }}"
      name: "{{ peering_name }}"
      virtual_network: "{{ vnet_name1 }}"
      remote_virtual_network:
        resource_group: "{{ resource_group_secondary }}"
        name: "{{ vnet_name2 }}"
      allow_virtual_network_access: true
      allow_forwarded_traffic: true

  - name: Connect vnet peering
    azure_rm_virtualnetworkpeering:
      resource_group: "{{ resource_group_secondary }}"
      name: "{{ peering_name }}"
      virtual_network: "{{ vnet_name2 }}"
      remote_virtual_network:
        resource_group: "{{ resource_group }}"
        name: "{{ vnet_name1 }}"
      allow_virtual_network_access: true
      allow_forwarded_traffic: true

  - name: Delete vnet peering
    azure_rm_virtualnetworkpeering:
      resource_group: "{{ resource_group }}"
      name: "{{ peering_name }}"
      virtual_network: "{{ vnet_name1 }}"
      state: absent

サンプル プレイブックを実行する

このセクションのサンプル プレイブック コードは、このチュートリアル全体を通して示されるさまざまな機能をテストするために使用します。

以下に、サンプル プレイブックを使用する際に考慮すべき重要な点をいくつか示します。

  • vars セクションで、{{ resource_group_name }} プレースホルダーを実際のリソース グループの名前に置き換えます。

ansible-playbook コマンドを使用してプレイブックを実行します。

ansible-playbook vnet_peering.yml

プレイブックを実行すると、次の結果のような出力が表示されます。

PLAY [localhost] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Prepare random postfix] 
ok: [localhost]

PLAY [Connect virtual networks with virtual network peering] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Create a resource group] 
changed: [localhost]

TASK [Create secondary resource group] 
changed: [localhost]

TASK [Create first virtual network] 
changed: [localhost]

TASK [Add subnet] 
changed: [localhost]

TASK [Create second virtual network] 
changed: [localhost]

TASK [Add subnet] 
changed: [localhost]

TASK [Initial vnet peering] 
changed: [localhost]

TASK [Connect vnet peering] 
changed: [localhost]

TASK [Delete vnet peering] 
changed: [localhost]

PLAY RECAP 
localhost                  : ok=12   changed=9    unreachable=0    failed=0    skipped=0   rescued=0    ignored=0

リソースをクリーンアップする

この記事で作成したリソースが不要になったら、削除してください。

このセクションのサンプル プレイブック コードは、次の目的で使用します。

  • 前に作成した 2 つのリソース グループを削除する

次のプレイブックを cleanup.yml という名前で保存します。

- hosts: localhost	
  vars:	
    resource_group: "{{ resource_group_name-1 }}"	
    resource_group_secondary: "{{ resource_group_name-2 }}"	
  tasks:	
    - name: Delete a resource group	
      azure_rm_resourcegroup:	
        name: "{{ resource_group }}"	
        force_delete_nonempty: yes	
        state: absent	
    - name: Delete a resource group	
      azure_rm_resourcegroup:	
        name: "{{ resource_group_secondary }}"	
        force_delete_nonempty: yes	
        state: absent	

以下に、サンプル プレイブックを使用する際に考慮すべき重要な点をいくつか示します。

  • {{ resource_group_name-1 }} プレースホルダーは、作成した最初のリソース グループの名前に置き換えます。
  • {{ resource_group_name-2 }} プレースホルダーは、作成した 2 番目のリソース グループの名前に置き換えます。
  • 指定した 2 つのリソース グループ内のすべてのリソースが削除されます。

ansible-playbook コマンドを使用してプレイブックを実行します。

ansible-playbook cleanup.yml	

次のステップ