빠른 시작: Ansible을 사용하여 Azure에서 Linux 가상 머신 구성Quickstart: Configure Linux virtual machines in Azure using Ansible

선언적 언어인 Ansible을 사용하면 Ansible 플레이북을 통해 자동으로 Azure 리소스를 만들고, 구성하고, 배포할 수 있습니다.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 플레이북 섹션에서는 eastus 위치에 myResourceGroup이라는 리소스 그룹을 만듭니다.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 가상 머신을 만들 때 가상 네트워크를 만들거나 기존 가상 네트워크를 사용해야 합니다.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 플레이북 섹션에서는 10.0.0.0/16 주소 공간에 myVnet이라는 가상 네트워크를 만듭니다.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

공용 IP 주소를 통해 인터넷 리소스가 Azure 리소스에 대한 인바운드와 통신할 수 있습니다.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 리소스에서 나오는 아웃바운드 트래픽과 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 interface 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 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: <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 interface card] *******************************
    changed: [localhost]
    
    TASK [Create VM] **********************************************************
    changed: [localhost]
    
    PLAY RECAP ****************************************************************
    localhost                  : ok=8    changed=7    unreachable=0    failed=0
    
  10. SSH 명령은 Linux VM에 액세스하는 데 사용됩니다.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