AnsibleでAzureリソースのデプロイを行ってみよう

この記事は更新から24ヶ月以上経過しているため、最新の情報を別途確認することを推奨いたします。

こんにちはDXソリューション統括部の村松です。

今回はAnsibleでAzureリソースのデプロイを行ってみようと思います。

 

Ansibleとはオープンソースの構成管理ツールで”Infrastructure as Code(コードによるインフラ構成)”を実装する上でよく利用されるツールです。

例えば、OS、ミドルウェアおよびネットワークの設定変更の内容をコードとして定義しておき、複数のサーバやネットワーク機器にその内容を一括で反映させることができます。
Ansibleでは、PlaybookというYAML形式のテキストファイルに定型業務をタスクとして記述し、それをAnsibleに実行させることにより、様々な処理を実現できます。

Azureを使い込んでいる人に”Infrastructure as Code(コードによるインフラ)”の話をすると、JSON形式のARMテンプレートによるリソースのデプロイを想像されるかと思います。

AnsibleにもAzure向けのモジュールが用意されていて、AzureリソースをAnsibleのPlaybookからデプロイすることができます。


今回はAnsibleの実行環境を構成し、そこから仮想マシン,仮想ネットワークといったAzureリソースをデプロイしてみましょう。

1.SPN(サービスプリンシパル)の登録
1-1.サブスクリプションが紐ついているAzure ADテナントにSPNを登録します。

1-2.以下の情報を控えておきます。
  サブスクリプションID
  アプリケーションID
  テナントID

1-3.SPN用アプリケーションキーの発行し、以下の情報を控えておきます。
  アプリケーションキー

1-4.登録したSPNに対してサブスクリプションの”共同作成者ロール”を割り当てます。

 

2.Ansible環境のデプロイ
2-1.AnsibleをインストールするLinuxサーバ(今回はCentOS7.4を利用)を用意します。

2-2.Linuxサーバ(CentOS7.4)にログインして、以下のコマンドを実行します。

  >>sudo yum check-update; sudo yum install -y gcc libffi-devel python-devel openssl-devel epel-release
  >>sudo yum install -y python-pip python-wheel
  >>sudo pip install ansible[azure]

2-3.ホームディレクトリに配下に.azureというディレクトリを作成します。
  >>mkdir ~/.azure

2-4.credentialsというファイルを作成します。
  >>vi ~/.azure/credentials

2-5.そのファイルに次の行を挿入します。 プレースホルダーをサービス プリンシパルの値に置き換えます。
  [default]
  subscription_id=<1-2で控えておいたサブスクリプションID>
  client_id=<1-2で控えておいたアプリケーションID>
  secret=<1-3で控えておいたアプリケーションキー>
  tenant=<1-2で控えておいたテナントID>

 

3.AnsibleからAzureリソースのデプロイ(仮想ネットワーク)

3-1.仮想ネットワーク構成用のymlファイルを作成します。
  >>vi network-deploy.yml

3-2.以下のようにymlファイルにコードを記載します。

———————————————————————————————————–

    - name: Create Azure Virtual Network
      hosts: localhost
      connection: local
      vars:
       rg_name: network-rg
       vnet_name: vnet01
       nsg_name: web-nsg
       subnet_name: web-subnet

    tasks:
    - name: Create resource group
      azure_rm_resourcegroup:
      name: “{{ rg_name }}”
      location: eastus

    - name: Create virtual network
      azure_rm_virtualnetwork:
       resource_group: “{{ rg_name }}”
       name: “{{ vnet_name }}”
       address_prefixes: “10.6.0.0/16”

    - name: Create Network Security Group
      azure_rm_securitygroup:
      resource_group: “{{ rg_name }}”
      name: “{{ nsg_name }}”

      rules:
      - name: WEB
       protocol: Tcp
       destination_port_range: 80
       access: Allow
       priority: 1001
       direction: Inbound

    - name: Add subnet
      azure_rm_subnet:
       resource_group: “{{ rg_name }}”
       name: “{{ subnet_name }}”
       address_prefix: “10.6.1.0/24”
       virtual_network: “{{ vnet_name }}”
       security_group: “{{ nsg_name }}”


 

3-3.保存します。(:wp)

3-4.以下のコマンドを実行して、プレイブックを実行します。 

  >>ansible-playbook network-deploy.yml

3-5.実行すると下記のように仮想ネットワークおよび関連リソースがデプロイされます。

4.AnsibleからAzureリソースのデプロイ(仮想マシン)

4-1.仮想マシン構成用のymlファイルを作成します
  >>vi vm-deploy.yml


4-2.以下のようにymlファイルにコードを記載します。

———————————————————————————————————–

    - name: Create Azure Virtual Machine
      hosts: localhost
      connection: local
      vars:
       vnet_name: vnet01
       nsg_name: web-nsg
       subnet_name: web-subnet
       rg_name: vm-rg
       vm_name: WEB01

    - name: Create resource group
      azure_rm_resourcegroup:
       name: “{{ rg_name }}”
       location: eastus

    - name: Create public IP address
      azure_rm_publicipaddress:
       resource_group: “{{ rg_name }}”
       allocation_method: Static
       name: “{{ vm_name }}_pip”

    - name: Create virtual network interface card
      azure_rm_networkinterface:
       resource_group: “{{ rg_name }}”
       name: “{{ vm_name }}_nic”
       virtual_network: “{{ vnet_name }}”
       subnet: “{{ subnet_name }}”
       public_ip_name: “{{ vm_name }}_pip“

    - name: Create VM
      azure_rm_virtualmachine:
       resource_group: “{{ rg_name }}”
       name: “{{ vm_name }}”
       vm_size: Standard_DS1_v2
       admin_username: azureuser
       admin_password: P@ssw0rd20200104
       network_interfaces: “{{ vm_name }}_nic”
       image:
        offer: CentOS
        publisher: OpenLogic
        sku: ‘7.5’
        version: latest
        managed_disk_type: Standard_LRS 


4-3.保存します。(:wp)

4-4.以下のコマンドを実行して、プレイブックを実行します。
  >>ansible-playbook  vm-deploy.yml

4-5.実行すると下記のように仮想マシンおよび関連リソースがデプロイされます。

これで、Ansibleから仮想マシンと仮想ネットワークがデプロイできました。

AnsibleによるAzureリソースの管理の詳細についてはは以下のドキュメントを参考にしていただければと思います。

 

<Azure 上の Ansible のドキュメント>

https://docs.microsoft.com/ja-jp/azure/developer/ansible/

 

<Azure 上の Ansible のドキュメント>

https://docs.ansible.com/ansible/latest/index.html

 

<Microsoft Azure Guide(AnsibleのAzure向けモジュールについてはこちら)>

https://docs.ansible.com/ansible/latest/scenario_guides/guide_azure.html#providing-credentials-to-azure-modules

 

以上 またの機会にお会いしましょう!

いいね (この記事が参考になった人の数:8)
(↑参考になった場合はハートマークを押して評価お願いします)
読み込み中...

注意事項・免責事項

※技術情報につきましては投稿日時点の情報となります。投稿日以降に仕様等が変更されていることがありますのでご了承ください。

※公式な技術情報の紹介の他、当社による検証結果および経験に基づく独自の見解が含まれている場合がございます。

※これらの技術情報によって被ったいかなる損害についても、当社は一切責任を負わないものといたします。十分な確認・検証の上、ご活用お願いたします。

※当サイトはマイクロソフト社によるサポートページではございません。パーソルプロセス&テクノロジー株式会社が運営しているサイトのため、マイクロソフト社によるサポートを希望される方は適切な問い合わせ先にご確認ください。
 【重要】マイクロソフト社のサポートをお求めの方は、問い合わせ窓口をご確認ください