Ansible を使用して Azure で Linux 仮想マシンを作成する

注意事項

この記事では、間もなくサポート終了 (EOL) 状態になる Linux ディストリビューションである CentOS について説明します。 適宜、使用と計画を検討してください。 詳細については、「CentOS のサポート終了に関するガイダンス」を参照してください。

この記事では、Linux 仮想マシンを構成するための Ansible プレイブックのサンプルを示します。

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

  • リソース グループの作成
  • 仮想ネットワークの作成
  • パブリック IP アドレスの作成
  • ネットワーク セキュリティ グループを作成します
  • 仮想ネットワーク インターフェイス カードの作成
  • 仮想マシンの作成

1. 環境を構成する

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

2. SSH キーの組を作成する

  1. 次のコマンドを実行します。 ダイアログが表示されたら、次のディレクトリに作成するファイルを指定します: /home/azureuser/.ssh/authorized_keys

    ssh-keygen -m PEM -t rsa -b 4096
    
  2. 公開キー ファイルの内容をコピーします。 既定では、公開キー ファイルの名前は id_rsa.pub です。 値は、"ssh-rsa" で始まる長い文字列です。 この値は次の手順で必要になります。

3. Ansible プレイブックを実装する

  1. サンプルの Ansible コードをテストして実行するディレクトリを作成し、それを現在のディレクトリにします。

  2. main.yml という名前のファイルを作成し、次のコードを挿入します。 プレースホルダー <key_data> を前の手順の公開キーの値に置き換えます。

    - name: Create Azure VM
      hosts: localhost
      connection: local
      tasks:
      - name: Create resource group
        azure_rm_resourcegroup:
          name: myResourceGroup
          location: eastus
      - name: Create virtual network
        azure_rm_virtualnetwork:
          resource_group: myResourceGroup
          name: myVnet
          address_prefixes: "10.0.0.0/16"
      - name: Add subnet
        azure_rm_subnet:
          resource_group: myResourceGroup
          name: mySubnet
          address_prefix: "10.0.1.0/24"
          virtual_network: myVnet
      - name: Create public IP address
        azure_rm_publicipaddress:
          resource_group: myResourceGroup
          allocation_method: Static
          name: myPublicIP
        register: output_ip_address
      - name: Public IP of VM
        debug:
          msg: "The public IP is {{ output_ip_address.state.ip_address }}."
      - name: Create Network Security Group that allows SSH
        azure_rm_securitygroup:
          resource_group: myResourceGroup
          name: myNetworkSecurityGroup
          rules:
            - name: SSH
              protocol: Tcp
              destination_port_range: 22
              access: Allow
              priority: 1001
              direction: Inbound
      - name: Create virtual network interface card
        azure_rm_networkinterface:
          resource_group: myResourceGroup
          name: myNIC
          virtual_network: myVnet
          subnet: mySubnet
          public_ip_name: myPublicIP
          security_group: myNetworkSecurityGroup
      - name: Create VM
        azure_rm_virtualmachine:
          resource_group: myResourceGroup
          name: myVM
          vm_size: Standard_DS1_v2
          admin_username: azureuser
          ssh_password_enabled: false
          ssh_public_keys:
            - path: /home/azureuser/.ssh/authorized_keys
              key_data: "<key_data>"
          network_interfaces: myNIC
          image:
            offer: CentOS
            publisher: OpenLogic
            sku: '7.5'
            version: latest
    

4. プレイブックを実行する

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

ansible-playbook main.yml

5. 結果を確認する

az vm list を実行して、VM が作成されたことを確認します。

az vm list -d -o table --query "[?name=='myVM']"

6. VM に接続する

SSH コマンドを実行して、新しい Linux VM に接続します。 <ip-address> プレースホルダーは、前の手順で確認した IP アドレスに置き換えてください。

ssh azureuser@<ip_address> -i /home/azureuser/.ssh/authorized_keys/id_rsa

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

  1. delete_rg.yml として次のコードを保存します。

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. ansible-playbook コマンドを使用してプレイブックを実行します。 プレースホルダーは、削除するリソース グループの名前に置き換えます。 リソース グループ内のすべてのリソースが削除されます。

    ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
    

    重要なポイント:

    • プレイブックの register 変数と debug セクションにより、コマンドの完了時に結果が表示されます。

次のステップ