クイック スタート:Ansible を使用して Azure で Linux 仮想マシンを構成するQuickstart: Configure Linux virtual machines in Azure using Ansible

Ansible には宣言型の言語が使用され、Azure リソースの作成、構成、デプロイを Ansible の "プレイブック" で自動化することができます。Using a declarative language, Ansible allows you to automate the creation, configuration, and deployment of Azure resources via Ansible playbooks. この記事では、Linux 仮想マシンを構成するための Ansible プレイブックのサンプルを示します。This article presents a sample Ansible playbook for configuring Linux virtual machines. この記事の最後には、Ansible プレイブック全体を掲載しています。The complete Ansible playbook is listed at the end of this article.

前提条件Prerequisites

  • Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。Azure subscription: If you don't have an Azure subscription, create a free account before you begin.

リソース グループの作成Create a resource group

Ansible では、リソースのデプロイ先となるリソース グループが必要です。Ansible needs a resource group in which your resources are deployed. 次のサンプル Ansible プレイブック セクションでは、myResourceGroup という名前のリソース グループを eastus という場所に作成します。The following sample Ansible playbook section creates a resource group named myResourceGroup in the eastus location:

- name: Create resource group
  azure_rm_resourcegroup:
    name: myResourceGroup
    location: eastus

仮想ネットワークの作成Create a virtual network

Azure 仮想マシン (VM) を作成する場合、仮想ネットワークを作成するか、既存の仮想ネットワークを使用する必要があります。When you create an Azure virtual machine, you must create a virtual network or use an existing virtual network. 仮想ネットワークにおける仮想マシンへの望ましいアクセス方法を決定する必要もあります。You also need to decide how your virtual machines are intended to be accessed on the virtual network. 次のサンプル Ansible プレイブック セクションでは、myVnet という名前の仮想ネットワークを 10.0.0.0/16 アドレス空間に作成します。The following sample Ansible playbook section creates a virtual network named myVnet in the 10.0.0.0/16 address space:

- name: Create virtual network
  azure_rm_virtualnetwork:
    resource_group: myResourceGroup
    name: myVnet
    address_prefixes: "10.0.0.0/16"

仮想ネットワークにデプロイされているすべての Azure リソースは、仮想ネットワーク内のサブネットにデプロイされます。All Azure resources deployed into a virtual network are deployed into a subnet within a virtual network.

次のサンプル Ansible プレイブック セクションでは、myVnet 仮想ネットワークに mySubnet という名前のサブネットを作成します。The following sample Ansible playbook section creates a subnet named mySubnet in the myVnet virtual network:

- name: Add subnet
  azure_rm_subnet:
    resource_group: myResourceGroup
    name: mySubnet
    address_prefix: "10.0.1.0/24"
    virtual_network: myVnet

パブリック IP アドレスの作成Create a public IP address

インターネット リソースから Azure リソースに入ってくる通信には、パブリック IP アドレスが使用されます。Public IP addresses allow Internet resources to communicate inbound to Azure resources. また、パブリック IP アドレスにより、Azure リソースから公開されている Azure サービスへのアウトバウンド通信が可能になります。Public IP addresses also enable Azure resources to communicate outbound to public-facing Azure services. どちらのシナリオでも、リソースに割り当てられた IP アドレスがアクセスされます。In both scenarios, an IP address assigned to the resource being accessed. そのアドレスは、割り当てが解除されるまで、そのリソース専用になります。The address is dedicated to the resource until you unassign it. パブリック IP アドレスがリソースに割り当てられていない場合でも、リソースはインターネットにアウトバウンド通信できます。If a public IP address isn't assigned to a resource, the resource can still communicate outbound to the Internet. 接続は、Azure が使用可能な IP アドレスを動的に割り当てることによって行われます。The connection is made by Azure dynamically assigning an available IP address. 動的に割り当てられたアドレスは、リソース専用ではありません。The dynamically assigned address isn't dedicated to the resource.

次のサンプル Ansible プレイブック セクションでは、myPublicIP という名前のパブリック IP アドレスを作成します。The following sample Ansible playbook section creates a public IP address named myPublicIP:

- name: Create public IP address
  azure_rm_publicipaddress:
    resource_group: myResourceGroup
    allocation_method: Static
    name: myPublicIP

ネットワーク セキュリティ グループの作成Create a network security group

ネットワーク セキュリティ グループでは、仮想ネットワーク内の Azure リソース間のネットワーク トラフィックがフィルター処理されます。Network security groups filter network traffic between Azure resources in a virtual network. Azure リソースのインバウンド トラフィックとアウトバウンド トラフィックを制御するセキュリティ規則が定義されています。Security Rules are defined that govern inbound and outbound traffic to and from Azure resources. Azure リソースとネットワーク セキュリティ グループについて詳しくは、「Azure サービスの仮想ネットワーク統合」をご覧くださいFor more information about Azure resources and network security groups, see Virtual network integration for Azure services

次のプレイブックでは、myNetworkSecurityGroup という名前のネットワーク セキュリティ グループを作成します。The following playbook creates a network security group named myNetworkSecurityGroup. そのネットワーク セキュリティ グループには、TCP ポート 22 での SSH トラフィックを許可する規則が含まれます。The network security group includes a rule that allows SSH traffic on TCP port 22.

- 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

仮想ネットワーク インターフェイス カードの作成Create a virtual network interface card

仮想ネットワーク インターフェイス カードは、仮想マシンを特定の仮想ネットワーク、パブリック IP アドレス、およびネットワーク セキュリティ グループに接続します。A virtual network interface card connects your virtual machine to a given virtual network, public IP address, and network security group.

サンプル Ansible プレイブックの次のセクションでは、作成した仮想ネットワーク リソースに接続された myNIC という名前の仮想ネットワーク インターフェイス カードが作成されます。The following section in a sample Ansible playbook section creates a virtual network interface card named myNIC connected to the virtual networking resources you've created:

- name: Create virtual network inteface card
  azure_rm_networkinterface:
    resource_group: myResourceGroup
    name: myNIC
    virtual_network: myVnet
    subnet: mySubnet
    public_ip_name: myPublicIP
    security_group: myNetworkSecurityGroup

仮想マシンの作成Create a virtual machine

最後の手順は、この記事の先行セクションで作成したリソースをすべて使用する仮想マシンの作成です。The final step is to create a virtual machine that uses all the resources you've created in the previous sections of this article.

このセクションで紹介するサンプル Ansible プレイブック セクションは、myVM という名前の仮想マシンを作成し、myNIC という名前の仮想ネットワーク インターフェイス カードをアタッチするものです。The sample Ansible playbook section presented in this section creates a virtual machine named myVM and attaches the virtual network interface card named myNIC. <your-key-data> プレースホルダーは、実際に所有している完全な公開キー データに置き換えてください。Replace the <your-key-data> placeholder with your own complete public key data.

- 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: <your-key-data>
    network_interfaces: myNIC
    image:
      offer: CentOS
      publisher: OpenLogic
      sku: '7.5'
      version: latest

サンプル Ansible プレイブック全体Complete sample Ansible playbook

このセクションに掲載したのは、この記事で作成してきたサンプル Ansible プレイブック全体です。This section lists the entire sample Ansible playbook that you've built up over the course of this article.

- 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: Dump public IP for VM which will be created
    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 inteface 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: <your-key-data>
      network_interfaces: myNIC
      image:
        offer: CentOS
        publisher: OpenLogic
        sku: '7.5'
        version: latest

サンプル Ansible プレイブックの実行Run the sample Ansible playbook

このセクションでは、この記事で紹介したサンプル Ansible プレイブックを実行してみます。This section walks you through running the sample Ansible playbook presented in this article.

  1. Azure Portal にサインインします。Sign in to the Azure portal.

  2. Cloud Shell を開きます。Open Cloud Shell.

  3. 次のように、(プレイブックを保存するための) azure_create_complete_vm.yml という名前のファイルを作成し、vi エディターで開きます。Create a file (to contain your playbook) named azure_create_complete_vm.yml, and open it in the VI editor, as follows:

    vi azure_create_complete_vm.yml
    
  4. I キーを選択して挿入モードに入ります。Enter insert mode by selecting the I key.

  5. サンプル Ansible プレイブック全体をエディターに貼り付けます。Paste the complete sample Ansible playbook into the editor.

  6. Esc キーを押して、挿入モードを終了します。Exit insert mode by selecting the Esc key.

  7. ファイルを保存し、次のコマンドを入力して vi エディターを終了します。Save the file and exit the vi editor by entering the following command:

    :wq
    
  8. サンプル Ansible プレイブックを実行します。Run the sample Ansible playbook.

    ansible-playbook azure_create_complete_vm.yml
    
  9. 次のような出力結果が表示され、仮想マシンが正常に作成されたことを確認できます。The output looks similar to the following where you can see that a virtual machine has been successfully created:

    PLAY [Create Azure VM] ****************************************************
    
    TASK [Gathering Facts] ****************************************************
    ok: [localhost]
    
    TASK [Create resource group] *********************************************
    changed: [localhost]
    
    TASK [Create virtual network] *********************************************
    changed: [localhost]
    
    TASK [Add subnet] *********************************************************
    changed: [localhost]
    
    TASK [Create public IP address] *******************************************
    changed: [localhost]
    
    TASK [Dump public IP for VM which will be created] ********************************************************************
    ok: [localhost] => {
       "msg": "The public IP is <ip-address>."
    }
    
    TASK [Create Network Security Group that allows SSH] **********************
    changed: [localhost]
    
    TASK [Create virtual network inteface card] *******************************
    changed: [localhost]
    
    TASK [Create VM] **********************************************************
    changed: [localhost]
    
    PLAY RECAP ****************************************************************
    localhost                  : ok=8    changed=7    unreachable=0    failed=0
    
  10. Linux VM にアクセスするには、SSH コマンドを使用します。The SSH command is used to access your Linux VM. <ip-address> プレースホルダーは、前の手順で確認した IP アドレスに置き換えてください。Replace the <ip-address> placeholder with the IP address from the previous step.

    ssh azureuser@<ip-address>
    

次の手順Next steps