Tutorial: Konfigurieren von dynamischen Beständen Ihrer Azure-Ressourcen mit AnsibleTutorial: Configure dynamic inventories of your Azure resources using Ansible

Mit Ansible können Bestandsinformationen aus verschiedenen Quellen (einschließlich Cloudquellen wie Azure) in einen dynamischen Bestand abgerufen werden.Ansible can be used to pull inventory information from various sources (including cloud sources such as Azure) into a dynamic inventory.

In diesem Tutorial wird Ansible für Folgendes verwendet:In this tutorial, Ansible is used to:

  • Konfigurieren von zwei virtuellen TestcomputernConfigure two test virtual machines.
  • Markieren von einem virtuellen Computer per TagTag one of the virtual machines
  • Installieren von Nginx auf markierten virtuellen ComputernInstall Nginx on the tagged virtual machines
  • Konfigurieren eines dynamischen Bestands, der die konfigurierten Azure-Ressourcen enthältConfigure a dynamic inventory that includes the configured Azure resources

VoraussetzungenPrerequisites

  • Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.Azure subscription: If you don't have an Azure subscription, create a free account before you begin.

Erstellen der virtuellen TestcomputerCreate the test VMs

  1. Melden Sie sich beim Azure-Portal an.Sign in to the Azure portal.

  2. Öffnen Sie Cloud Shell.Open Cloud Shell.

  3. Erstellen Sie für die virtuellen Computer dieses Tutorials eine Azure-Ressourcengruppe.Create an Azure resource group to hold the virtual machines for this tutorial.

    Wichtig

    Für die in diesem Schritt erstellte Azure-Ressourcengruppe muss ein Name angegeben werden, der ausschließlich aus Kleinbuchstaben besteht.The Azure resource group you create in this step must have a name that is entirely lower-case. Andernfalls tritt bei der Erstellung des dynamischen Bestands ein Fehler auf.Otherwise, the generation of the dynamic inventory will fail.

    az group create --resource-group ansible-inventory-test-rg --location eastus
    
  4. Erstellen Sie mithilfe eines der folgenden Verfahren zwei virtuelle Linux-Computer in Azure:Create two Linux virtual machines on Azure using one of the following techniques:

    • Ansible-Playbook: Wie Sie einen virtuellen Computer auf der Grundlage eines Ansible-Playbooks erstellen, erfahren Sie im Artikel Erstellen eines einfachen virtuellen Computers in Azure mit 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. Wenn Sie einen der virtuellen Computer (oder beide) mit einem Playbook definieren, verwenden Sie anstelle eines Kennworts die SSH-Verbindung.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-Befehlszeilenschnittstelle: Führen Sie die folgenden Befehle in Cloud Shell aus, um die beiden virtuellen Computer zu erstellen: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
      

Kennzeichnen eines virtuellen ComputersTag a VM

Sie können Ihre Azure-Ressourcen mithilfe von Tags nach benutzerdefinierten Kategorien organisieren.You can use tags to organize your Azure resources by user-defined categories.

Verwendung einer früheren Version als Ansible 2.8Using Ansible version < 2.8

Geben Sie den folgenden Befehl vom Typ az resource tag ein, um den virtuellen Computer ansible-inventory-test-vm1 mit dem Schlüssel nginx zu markieren: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

Verwendung von Ansible 2.8 oder einer älteren VersionUsing Ansible version >= 2.8

Geben Sie den folgenden Befehl vom Typ az resource tag ein, um den virtuellen Computer ansible-inventory-test-vm1 mit dem Schlüssel Ansible=nginx zu markieren:Enter the following az resource tag command to tag the virtual machine ansible-inventory-test-vm1 with the key Ansible=nginx:

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

Generieren eines dynamischen BestandsGenerate a dynamic inventory

Nachdem Sie Ihre virtuellen Computer definiert (und markiert) haben, können Sie den dynamischen Bestand generieren.Once you have your virtual machines defined (and tagged), it's time to generate the dynamic inventory.

Verwendung einer früheren Version als Ansible 2.8Using Ansible version < 2.8

Unter Ansible wird ein Python-Skript mit dem Namen azure_rm.py bereitgestellt, mit dem ein dynamischer Bestand Ihrer Azure-Ressourcen generiert wird.Ansible provides a Python script named azure_rm.py that generates a dynamic inventory of your Azure resources. Die folgende Anleitung zeigt Schritt für Schritt, wie Sie unter Verwendung des Skripts azure_rm.py eine Verbindung mit Ihren beiden virtuellen Azure-Testcomputern herstellen:The following steps walk you through using the azure_rm.py script to connect to your two test Azure virtual machines:

  1. Rufen Sie mithilfe des GNU-Befehls wget das Skript azure_rm.py ab: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. Ändern Sie mithilfe des Befehls chmod die Zugriffsberechtigungen für das Skript azure_rm.py.Use the chmod command to change the access permissions to the azure_rm.py script. Im folgenden Befehl wird der Parameter +x verwendet, um die Ausführung der angegebenen Datei (azure_rm.py) zuzulassen: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. Verwenden Sie den ansible-Befehl, um eine Verbindung mit Ihrer Ressourcengruppe herzustellen:Use the ansible command to connect to your resource group:

    ansible -i azure_rm.py ansible-inventory-test-rg -m ping 
    
  4. Nach der Verbindungsherstellung werden Ergebnisse angezeigt. Diese sehen in etwa wie in der folgenden Ausgabe aus: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-Version >= 2.8Ansible version >= 2.8

Ab Ansible 2.8 wird ein Azure-Plug-In für dynamische Bestände bereitgestellt.Starting with Ansible 2.8, Ansible provides an Azure dynamic-inventory plug-in. In den folgenden Schritten wird die Nutzung des Plug-Ins beschrieben:The following steps walk you through using the plug-in:

  1. Für das Bestands-Plug-In ist eine Konfigurationsdatei erforderlich.The inventory plug-in requires a configuration file. Die Konfigurationsdatei muss auf azure_rm enden und als Erweiterung entweder yml oder yaml aufweisen.The configuration file must end in azure_rm and have an extension of either yml or yaml. Speichern Sie das folgende Playbook für dieses Tutorialbeispiel als 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
    
        keyed_groups:
        - prefix: tag
          key: tags
    
  2. Führen Sie den folgenden Befehl aus, um virtuelle Computer in der Ressourcengruppe zu pingen:Run the following command to ping VMs in the resource group:

    ansible all -m ping -i ./myazure_rm.yml
    
  3. Bei Ausführung des obigen Befehls erhalten Sie ggf. den folgenden Fehler:When running the preceding command, you could receive the following error:

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

    Fügen Sie der Ansible-Konfigurationsdatei die folgende Zeile hinzu, falls Sie den Fehler vom Typ „Host-Key Verification“ erhalten.If you do receive the "host-key verification" error, add the following line to the Ansible configuration file. Die Ansible-Konfigurationsdatei befindet sich unter /etc/ansible/ansible.cfg oder ~/.ansible.cfg.The Ansible configuration file is located at /etc/ansible/ansible.cfg or ~/.ansible.cfg.

    host_key_checking = False
    
  4. Beim Ausführen des Playbooks wird in etwa die folgende Ausgabe angezeigt: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
    

Aktivieren des VM-TagsEnable the VM tag

Bei Verwendung einer älteren Version als Ansible 2.8If you're using Ansible < 2.8,

  • Nachdem Sie ein Tag festgelegt haben, müssen Sie es „aktivieren“.Once you've set a tag, you need to "enable" that tag. Eine Möglichkeit zum Aktivieren eines Tags ist der Export des Tags in die Umgebungsvariable AZURE_TAGS mit dem Befehl export: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
    
  • Führen Sie den folgenden Befehl aus:Run the following command:

    ansible -i azure_rm.py ansible-inventory-test-rg -m ping
    

    Nun wird nur noch ein einzelner virtueller Computer angezeigt (der Computer, dessen Tag dem Wert entspricht, der in die Umgebungsvariable AZURE_TAGS exportiert wurde):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"
    }
    

Bei Verwendung von Ansible 2.8 oder einer höheren VersionIf you're using Ansible >= 2.8

  • Führen Sie den Befehl ansible-inventory -i myazure_rm.yml --graph aus, um die folgende Ausgabe zu erhalten:Run the command ansible-inventory -i myazure_rm.yml --graph to get the following output:

        @all:
          |--@tag_Ansible_nginx:
          |  |--ansible-inventory-test-vm1_9e2f
          |--@ungrouped:
          |  |--ansible-inventory-test-vm2_7ba9
    
  • Sie können auch den folgenden Befehl ausführen, um die Verbindung mit der Nginx-VM zu testen:You can also run the following command to test connection to the Nginx VM:

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

Einrichten von Nginx auf dem markierten virtuellen ComputerSet up Nginx on the tagged VM

Das Tag ermöglicht die schnelle und einfache Verwendung von Untergruppen virtueller Computer.The purpose of tags is to enable the ability to quickly and easily work with subgroups of your virtual machines. Ein Beispiel: Angenommen, Sie möchten Nginx nur auf virtuellen Computern installieren, denen Sie das Tag nginx zugewiesen haben.For example, let's say you want to install Nginx only on virtual machines to which you've assigned a tag of nginx. Gehen Sie hierzu wie folgt vor:The following steps illustrate how easy that is to accomplish:

  1. Erstellen Sie eine Datei mit dem Namen nginx.yml:Create a file named nginx.yml:

    code nginx.yml
    
  2. Fügen Sie den folgenden Beispielcode in den Editor ein: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=present
            notify:
            - start nginx
    
          handlers:
            - name: start nginx
              service: name=nginx state=started
    
  3. Speichern Sie die Datei, und beenden Sie den Editor.Save the file and exit the editor.

  4. Führen Sie das Playbook mithilfe des Befehls ansible-playbook aus: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 --limit=tag_Ansible_nginx
      
  5. Nach dem Ausführen des Playbooks wird in etwa die folgende Ausgabe angezeigt: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
    

Testen der Nginx-InstallationTest Nginx installation

Dieser Abschnitt beschreibt ein Verfahren, mit dem Sie sich vergewissern können, dass Nginx auf Ihrem virtuellen Computer installiert ist.This section illustrates one technique to test that Nginx is installed on your virtual machine.

  1. Rufen Sie mithilfe des Befehls az vm list-ip-addresses die IP-Adresse des virtuellen Computers ansible-inventory-test-vm1 ab.Use the az vm list-ip-addresses command to retrieve the IP address of the ansible-inventory-test-vm1 virtual machine. Der zurückgegebene Wert (die IP-Adresse des virtuellen Computers) wird dann als Parameter für den SSH-Befehl verwendet, um die Verbindung mit dem virtuellen Computer herzustellen.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. Während eine Verbindung mit dem virtuellen Computer ansible-inventory-test-vm1 besteht, führen Sie den Befehl nginx -v aus, um zu ermitteln, ob Nginx installiert ist.While connected to the ansible-inventory-test-vm1 virtual machine, run the nginx -v command to determine if Nginx is installed.

    nginx -v
    
  3. Nach Ausführung des Befehls nginx -v wird die Nginx-Version (zweite Zeile) angezeigt. Das bedeutet, dass Nginx installiert ist.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. Drücken Sie die Tastenkombination <Ctrl>D, um die Verbindung der SSH-Sitzung zu trennen.Click the <Ctrl>D keyboard combination to disconnect the SSH session.

  5. Wenn Sie die obigen Schritte für den virtuellen Computer ansible-inventory-test-vm2 ausführen, erscheint eine Informationsmeldung mit dem Hinweis, wo Sie Nginx beziehen können (dies impliziert, dass die Anwendung noch nicht installiert ist):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:~$
    

Nächste SchritteNext steps