자습서: Ansible을 사용하여 Azure 리소스의 동적 인벤토리 구성Tutorial: Configure dynamic inventories of your Azure resources using Ansible

Ansible은 다양한 원본(Azure와 같은 클라우드 원본 포함)에서 동적 인벤토리로 인벤토리 정보를 가져오는 데 사용할 수 있습니다.Ansible can be used to pull inventory information from various sources (including cloud sources such as Azure) into a dynamic inventory.

이 자습서에서는 Ansible을 사용하여 다음을 수행합니다.In this tutorial, Ansible is used to:

  • 두 개의 테스트 가상 머신 구성Configure two test virtual machines.
  • 가상 머신 중 하나에 태그 지정Tag one of the virtual machines
  • 태그가 지정된 가상 머신에 Nginx 설치Install Nginx on the tagged virtual machines
  • 구성된 Azure 리소스를 포함하는 동적 인벤토리 구성Configure a dynamic inventory that includes the configured Azure resources

필수 조건Prerequisites

  • Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 무료 계정 을 만듭니다.Azure subscription: If you don't have an Azure subscription, create a free account before you begin.

테스트 VM 만들기Create the test VMs

  1. Azure Portal에 로그인합니다.Sign in to the Azure portal.

  2. Cloud Shell을 엽니다.Open Cloud Shell.

  3. 이 자습서의 가상 머신을 보관할 Azure 리소스 그룹을 만듭니다.Create an Azure resource group to hold the virtual machines for this tutorial.

    중요

    이 단계에서 만든 Azure 리소스 그룹에는 모두 소문자로 구성된 이름이 있어야 합니다.The Azure resource group you create in this step must have a name that is entirely lower-case. 그렇지 않으면 동적 인벤토리를 생성하지 못합니다.Otherwise, the generation of the dynamic inventory will fail.

    az group create --resource-group ansible-inventory-test-rg --location eastus
    
  4. 다음 방법 중 하나를 사용하여 Azure에 두 개의 Linux 가상 머신을 만듭니다.Create two Linux virtual machines on Azure using one of the following techniques:

    • Ansible 플레이북 - Azure에서 Ansible을 사용하여 기본 가상 머신 만들기 문서에서 Ansible 플레이북으로부터 가상 머신을 만드는 방법을 보여 줍니다.Ansible playbook - The article, Create a basic virtual machine in Azure with Ansible illustrates how to create a virtual machine from an Ansible playbook. 플레이북을 사용하여 두 개의 가상 머신 중 하나 또는 둘 다를 정의하는 경우 암호 대신 SSH 연결이 사용되는지 확인합니다.If you use a playbook to define one or both of the virtual machines, ensure that the SSH connection is used instead of a password.

    • Azure CLI - Cloud Shell에서 다음 명령을 각각 실행하여 두 가상 머신을 만듭니다.Azure CLI - Issue each of the following commands in the Cloud Shell to create the two virtual machines:

      az vm create --resource-group ansible-inventory-test-rg \
                   --name ansible-inventory-test-vm1 \
                   --image UbuntuLTS --generate-ssh-keys
      
      az vm create --resource-group ansible-inventory-test-rg \
                   --name ansible-inventory-test-vm2 \
                   --image UbuntuLTS --generate-ssh-keys
      

VM에 태그 지정Tag a VM

사용자 정의 범주별로 태그를 사용하여 Azure 리소스를 구성할 수 있습니다.You can use tags to organize your Azure resources by user-defined categories.

다음 az resource tag 명령을 입력하여 ansible-inventory-test-vm1 가상 머신에 nginx 키를 사용한 태그를 지정합니다.Enter the following az resource tag command to tag the virtual machine ansible-inventory-test-vm1 with the key nginx:

az resource tag --tags nginx --id /subscriptions/<YourAzureSubscriptionID>/resourceGroups/ansible-inventory-test-rg/providers/Microsoft.Compute/virtualMachines/ansible-inventory-test-vm1

동적 인벤토리 생성Generate a dynamic inventory

가상 머신이 정의되고 태그가 지정되면 동적 인벤토리를 생성해야 합니다.Once you have your virtual machines defined (and tagged), it's time to generate the dynamic inventory.

Ansible 2.8 이전 버전 사용Using Ansible version < 2.8

Ansible은 Azure 리소스의 동적 인벤토리를 생성하는 azure_rm.py라는 Python 스크립트를 제공합니다.Ansible provides a Python script named azure_rm.py that generates a dynamic inventory of your Azure resources. 다음 단계에서는 azure_rm.py 스크립트를 사용하여 두 개의 테스트 Azure Virtual Machines에 연결하는 과정을 안내합니다.The following steps walk you through using the azure_rm.py script to connect to your two test Azure virtual machines:

  1. GNU wget 명령을 사용하여 azure_rm.py 스크립트를 검색합니다.Use the GNU wget command to retrieve the azure_rm.py script:

    wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/azure_rm.py
    
  2. chmod 명령을 사용하여 azure_rm.py 스크립트에 대한 액세스 권한을 변경합니다.Use the chmod command to change the access permissions to the azure_rm.py script. 다음 명령은 +x 매개 변수를 사용하여 지정된 파일(azure_rm.py)의 실행을 허용합니다.The following command uses the +x parameter to allow for execution (running) of the specified file (azure_rm.py):

    chmod +x azure_rm.py
    
  3. ansible 명령을 사용하여 리소스 그룹에 연결합니다.Use the ansible command to connect to your resource group:

    ansible -i azure_rm.py ansible-inventory-test-rg -m ping 
    
  4. 연결되면 다음과 비슷한 결과가 표시됩니다.Once connected, you see results similar to the following output:

    ansible-inventory-test-vm1 | SUCCESS => {
        "changed": false,
        "failed": false,
        "ping": "pong"
    }
    ansible-inventory-test-vm2 | SUCCESS => {
        "changed": false,
        "failed": false,
        "ping": "pong"
    }
    

Ansible 2.8 이상 버전Ansible version >= 2.8

Ansible 2.8부터 Ansible은 Azure 동적 인벤토리 플러그 인을 제공합니다.Starting with Ansible 2.8, Ansible provides an Azure dynamic-inventory plugin. 다음 단계는 이 플러그 인을 안내합니다.The following steps walk you through using the plugin:

  1. 인벤토리 플러그 인에는 구성 파일이 필요합니다.The inventory plugin requires a configuration file. 구성 파일은 azure_rm으로 끝나야 하고 확장명이 yml 또는 yaml이어야 합니다.The configuration file must end in azure_rm and have an extension of either yml or yaml. 이 자습서 예제에서는 다음 플레이북을 myazure_rm.yml로 저장합니다.For this tutorial example, save the following playbook as myazure_rm.yml:

    plugin: azure_rm
    include_vm_resource_groups:
    - ansible-inventory-test-rg
    auth_source: auto
    
  2. 다음 명령을 실행하여 리소스 그룹의 VM을 Ping합니다.Run the following command to ping VMs in the resource group:

    ansible all -m ping -i ./myazure_rm.yml
    
  3. 위의 명령을 실행하는 경우 다음과 같은 오류가 나타날 수 있습니다.When running the preceding command, you could receive the following error:

    Failed to connect to the host via ssh: Host key verification failed.
    

    "호스트 키 확인" 오류가 발생하면 Ansible 구성 파일에 다음 줄을 추가합니다.If you do receive the "host-key verification" error, add the following line to the Ansible configuration file. Ansible 구성 파일은 /etc/ansible/ansible.cfg에 있습니다.The Ansible configuration file is located at /etc/ansible/ansible.cfg.

    host_key_checking = False
    
  4. 플레이북이 실행되면 다음 출력과 비슷한 결과가 표시됩니다.When you run the playbook, you see results similar to the following output:

    ansible-inventory-test-vm1_0324 : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    ansible-inventory-test-vm2_8971 : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    

VM 태그를 사용하도록 설정Enable the VM tag

태그를 설정한 경우 태그를 "사용하도록 설정"해야 합니다.Once you've set a tag, you need to "enable" that tag. 태그를 사용하도록 설정하는 한 가지 방법은 export 명령을 통해 환경 변수 AZURE_TAGS에 태그를 내보내는 것입니다.One way to enable a tag is by exporting the tag to an environment variable AZURE_TAGS via the export command:

export AZURE_TAGS=nginx
  • Ansible 2.8 이전 버전을 사용하는 경우 다음 명령을 실행합니다.If you're using Ansible < 2.8, run the following command:

    ansible -i azure_rm.py ansible-inventory-test-rg -m ping
    
  • Ansible 2.8 이상 버전을 사용하는 경우 다음 명령을 실행합니다.If you're using Ansible >= 2.8, run the following command:

    ansible all -m ping -i ./myazure_rm.yml
    

이제 하나의 가상 머신(태그가 AZURE_TAGS 환경 변수로 내보낸 값과 일치하는 가상 머신)만 표시됩니다.You now see only one virtual machine (the one whose tag matches the value exported into the AZURE_TAGS environment variable):

ansible-inventory-test-vm1 | SUCCESS => {
    "changed": false,
    "failed": false,
    "ping": "pong"
}

태그가 지정된 VM에 Nginx 설정Set up Nginx on the tagged VM

태그의 목적은 가상 머신의 하위 그룹을 빠르고 쉽게 사용할 수 있도록 하는 것입니다.The purpose of tags is to enable the ability to quickly and easily work with subgroups of your virtual machines. 예를 들어 nginx 태그를 할당한 가상 머신에만 Nginx를 설치하려고 한다고 가정해 보겠습니다.For example, let's say you want to install Nginx only on virtual machines to which you've assigned a tag of nginx. 다음 단계에서는 수행하는 방법이 쉽다는 것을 보여 줍니다.The following steps illustrate how easy that is to accomplish:

  1. nginx.yml 파일을 만듭니다.Create a file named nginx.yml:

    code nginx.yml
    
  2. 다음 샘플 코드를 편집기에 붙여넣습니다.Paste the following sample code into the editor:

    ---
    - name: Install and start Nginx on an Azure virtual machine
      hosts: all
      become: yes
      tasks:
      - name: install nginx
        apt: pkg=nginx state=installed
        notify:
        - start nginx
    
      handlers:
        - name: start nginx
          service: name=nginx state=started
    
  3. 파일을 저장하고 편집기를 종료합니다.Save the file and exit the editor.

  4. ansible-playbook 명령을 사용하여 플레이북을 실행합니다.Run the playbook using the ansible-playbook command:

    • Ansible 2.8 이전 버전:Ansible < 2.8:
    ansible-playbook -i azure_rm.py nginx.yml
    
    • Ansible 2.8 이상 버전:Ansible >= 2.8:
     ansible-playbook  -i ./myazure_rm.yml  nginx.yml
    
  5. 플레이북을 실행하면 다음 결과와 유사한 출력이 표시됩니다.After running the playbook, you see output similar to the following results:

    PLAY [Install and start Nginx on an Azure virtual machine] 
    
    TASK [Gathering Facts] 
    ok: [ansible-inventory-test-vm1]
    
    TASK [install nginx] 
    changed: [ansible-inventory-test-vm1]
    
    RUNNING HANDLER [start nginx] 
    ok: [ansible-inventory-test-vm1]
    
    PLAY RECAP 
    ansible-inventory-test-vm1 : ok=3    changed=1    unreachable=0    failed=0
    

Nginx 설치 테스트Test Nginx installation

이 섹션에서는 가상 머신에 Nginx가 설치되었는지 테스트하는 한 가지 방법을 설명합니다.This section illustrates one technique to test that Nginx is installed on your virtual machine.

  1. az vm list-ip-addresses 명령을 사용하여 ansible-inventory-test-vm1 가상 머신의 IP 주소를 검색합니다.Use the az vm list-ip-addresses command to retrieve the IP address of the ansible-inventory-test-vm1 virtual machine. 그런 다음, 반환된 값(가상 머신의 IP 주소)은 가상 머신에 연결하기 위한 SSH 명령에 대한 매개 변수로 사용됩니다.The returned value (the virtual machine's IP address) is then used as the parameter to the SSH command to connect to the virtual machine.

    ssh `az vm list-ip-addresses \
    -n ansible-inventory-test-vm1 \
    --query [0].virtualMachine.network.publicIpAddresses[0].ipAddress -o tsv`
    
  2. ansible-inventory-test-vm1 가상 머신에 연결된 상태에서 nginx -v 명령을 실행하여 Nginx가 설치되었는지 확인합니다.While connected to the ansible-inventory-test-vm1 virtual machine, run the nginx -v command to determine if Nginx is installed.

    nginx -v
    
  3. nginx -v 명령이 실행되면 Nginx가 설치되었음을 나타내는 Nginx 버전(두 번째 줄)이 표시됩니다.Once you run the nginx -v command, you see the Nginx version (second line) that indicates that Nginx is installed.

    tom@ansible-inventory-test-vm1:~$ nginx -v
    
    nginx version: nginx/1.10.3 (Ubuntu)
    
    tom@ansible-inventory-test-vm1:~$
    
  4. SSH 세션의 연결을 끊으려면 <Ctrl>D 키보드 조합을 누릅니다.Click the <Ctrl>D keyboard combination to disconnect the SSH session.

  5. ansible-inventory-test-vm2 가상 머신에 대해 앞의 단계를 수행하면 Nginx를 얻을 수 있는 위치를 나타내는 정보 메시지가 표시됩니다(현재 설치되어 있지 않음을 나타냄).Doing the preceding steps for the ansible-inventory-test-vm2 virtual machine yields an informational message indicating where you can get Nginx (which implies that you don't have it installed at this point):

    tom@ansible-inventory-test-vm2:~$ nginx -v
    The program 'nginx' can be found in the following packages:
    * nginx-core
    * nginx-extras
    * nginx-full
    * nginx-lightTry: sudo apt install <selected package>
    tom@ansible-inventory-test-vm2:~$
    

다음 단계Next steps