Öğretici: Azure 'daki sanal makine ölçek kümelerine uygulama dağıtma (Anlabilen)Tutorial: Deploy apps to virtual machine scale sets in Azure using Ansible

Önemli

Ansible 2.7 (veya üzeri), bu makaledeki örnek playbook'ları çalıştırmak için gereklidir.Ansible 2.7 (or later) is required to run the sample playbooks in this article.

Azure sanal makine ölçek kümeleri olduğu dengeli VM'ler, bir grup özdeş, yük yapılandırmanıza olanak sağlayan bir Azure özelliğidir.Azure virtual machine scale sets is an Azure feature that lets you configure a group of identical, load balanced VMs. Ayarlar ölçeklendirmek için hiçbir ek ücret yoktur ve sanal makinelerden oluşturulmuş.There's no additional cost to scale sets and they're built from virtual machines. Yalnızca sanal makine örnekleri, yük Dengeleyiciler veya yönetilen Disk depolama alanı gibi temel işlem kaynakları için ödeme yaparsınız.You pay only for the underlying compute resources such as the VM instances, load balancers, or Managed Disk storage. Ölçek kümeleri ile, uygulamalarınızı çalıştırmak ve ölçeklendirmek için yönetim ve otomasyon katmanları sağlanır.With scale sets, the management and automation layers are provided to run and scale your applications. Bunun yerine el ile oluşturun ve tek tek sanal makineleri yönetme.You could instead manually create and manage individual VMs. Ancak, Ölçek kümelerini kullanmak için iki temel fayda vardır.However, there are two key benefits to using scale sets. Azure'da yerleşik ve uygulama ihtiyaçlarınızı karşılamak için sanal makinelerinizi otomatik olarak ölçeklendirme.They're built into Azure and they automatically scale your virtual machines to meet application needs.

Bu öğreticide, Ansible için kullanılır:In this tutorial, Ansible is used to:

  • Bir Azure VM grubu için konak bilgilerini almaRetrieve host information for a group of Azure VMs
  • Örnek uygulamayı kopyalama ve derlemeClone and build the sample app
  • Bir ölçek kümesine JRE 'yi (Java Runtime Environment) yüklerInstall the JRE (Java Runtime Environment) on a scale set
  • Java uygulamasını bir ölçek kümesine dağıtmaDeploy the Java application to a scale set

ÖnkoşullarPrerequisites

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.Azure subscription: If you don't have an Azure subscription, create a free account before you begin.
  • Git - Bu öğreticide Java örneği indirmek için git kullanılmaktadır.git - git is used to download a Java sample used in this tutorial.
  • Java SE Development Kit (JDK) - Örnek Java projesini derlemek için JDK kullanılır.Java SE Development Kit (JDK) - The JDK is used to build the sample Java project.
  • Apache maven - Apache Maven , örnek Java projesini oluşturmak için kullanılır.Apache Maven - Apache Maven is used to build the sample Java project.

Ana bilgisayar bilgilerini almaGet host information

Bu bölümdeki PlayBook kodu, bir sanal makine grubu için konak bilgilerini alır.The playbook code in this section retrieves host information for a group of virtual machines. Kod, belirtilen bir kaynak grubundaki genel IP adreslerini ve yük dengeleyiciyi alır ve envanterde scalesethosts adlı bir konak grubu oluşturur.The code gets the public IP addresses and load balancer within a specified resource group and creates a host group named scalesethosts in inventory.

Aşağıdaki örnek playbook'u get-hosts-tasks.yml olarak kaydedin:Save the following sample playbook as get-hosts-tasks.yml:

- name: Get facts for all Public IPs within a resource groups
  azure_rm_publicipaddress_facts:
    resource_group: "{{ resource_group }}"
  register: output_ip_address

- name: Get loadbalancer info
  azure_rm_loadbalancer_facts:
    resource_group: "{{ resource_group }}"
    name: "{{ loadbalancer_name }}"
  register: output

- name: Add all hosts
  add_host:
    groups: scalesethosts
    hostname: "{{ output_ip_address.ansible_facts.azure_publicipaddresses[0].properties.ipAddress }}_{{ item.properties.frontendPort }}"
    ansible_host: "{{ output_ip_address.ansible_facts.azure_publicipaddresses[0].properties.ipAddress }}"
    ansible_port: "{{ item.properties.frontendPort }}"
    ansible_ssh_user: "{{ admin_username }}"
    ansible_ssh_pass: "{{ admin_password }}"
  with_items:
    - "{{ output.ansible_facts.azure_loadbalancers[0].properties.inboundNatRules }}"

Uygulamaları dağıtım için hazırlamaPrepare an application for deployment

Bu bölümdeki PlayBook kodu, bir Java örnek projesini GitHub 'dan kopyalamak için git kullanır ve projeyi oluşturur.The playbook code in this section uses git to clone a Java sample project from GitHub and builds the project.

Aşağıdaki playbook'u app.yml olarak kaydedin:Save the following playbook as app.yml:

- hosts: localhost
  vars:
    repo_url: https://github.com/spring-guides/gs-spring-boot.git
    workspace: ~/src/helloworld

  tasks:
  - name: Git Clone sample app
    git:
      repo: "{{ repo_url }}"
      dest: "{{ workspace }}"

  - name: Build sample app
    shell: mvn package chdir="{{ workspace }}/complete"

Örnek Ansible playbook'u aşağıdaki komut ile çalıştırın:Run the sample Ansible playbook with the following command:

ansible-playbook app.yml

PlayBook çalıştırıldıktan sonra aşağıdaki sonuçlara benzer bir çıktı görürsünüz:After running the playbook, you see output similar to the following results:

PLAY [localhost] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Git Clone sample app] 
changed: [localhost]

TASK [Build sample app] 
changed: [localhost]

PLAY RECAP 
localhost                  : ok=3    changed=2    unreachable=0    failed=0

Uygulamayı bir ölçek kümesine dağıtmaDeploy the application to a scale set

Bu bölümdeki PlayBook kodu şu şekilde kullanılır:The playbook code in this section is used to:

  • JRE 'yi saclesethosts adlı bir konak grubuna yüklerInstall the JRE on a host group named saclesethosts
  • Java uygulamasını saclesethosts adlı bir konak grubuna dağıtmaDeploy the Java application to a host group named saclesethosts

Örnek PlayBook 'u almanın iki yolu vardır:There are two ways to get the sample playbook:

  • PlayBook 'U indirin ve vmss-setup-deploy.ymlkaydedin.Download the playbook and save it to vmss-setup-deploy.yml.
  • vmss-setup-deploy.yml adlı yeni bir dosya oluşturun ve aşağıdaki içerikleri içine kopyalayın:Create a new file named vmss-setup-deploy.yml and copy into it the following contents:
- hosts: localhost
  vars:
    resource_group: myResourceGroup
    scaleset_name: myScaleSet
    loadbalancer_name: myScaleSetLb
    admin_username: azureuser
    admin_password: "{{ admin_password }}"
  tasks:
  - include: get-hosts-tasks.yml

- name: Install JRE on a scale set
  hosts: scalesethosts
  become: yes
  vars:
    workspace: ~/src/helloworld
    admin_username: azureuser

  tasks:
  - name: Install JRE
    apt:
      name: default-jre
      update_cache: yes

  - name: Copy app to Azure VM
    copy:
      src: "{{ workspace }}/complete/target/gs-spring-boot-0.1.0.jar"
      dest: "/home/{{ admin_username }}/helloworld.jar"
      force: yes
      mode: 0755

  - name: Start the application
    shell: java -jar "/home/{{ admin_username }}/helloworld.jar" >/dev/null 2>&1 &
    async: 5000
    poll: 0

PlayBook 'u çalıştırmadan önce aşağıdaki notlara bakın:Before running the playbook, see the following notes:

  • vars bölümünde, {{ admin_password }} yer tutucusunu kendi parolanızla değiştirin.In the vars section, replace the {{ admin_password }} placeholder with your own password.

  • SSH bağlantı türünü parolalarla birlikte kullanmak için sshpass programını yüklemelisiniz:To use the ssh connection type with passwords, install the sshpass program:

    Ubuntu:Ubuntu:

    apt-get install sshpass
    

    CentOSCentOS:

    yum install sshpass
    
  • Bazı ortamlarda, anahtar yerine SSH parolası kullanmayla ilgili bir hata görebilirsiniz.In some environments, you may see an error about using an SSH password instead of a key. Bu hatayı alırsanız, /etc/ansible/ansible.cfg veya ~/.ansible.cfg' ye aşağıdaki satırı ekleyerek ana bilgisayar anahtarı denetimini devre dışı bırakabilirsiniz:If you do receive that error, you can disable host key checking by adding the following line to /etc/ansible/ansible.cfg or ~/.ansible.cfg:

    [defaults]
    host_key_checking = False
    

Playbook'u aşağıdaki komut ile çalıştırın:Run the playbook with the following command:

ansible-playbook vmss-setup-deploy.yml

Anerişilebilir-PlayBook komutunu çalıştırmanın çıktısı, örnek Java uygulamasının ölçek kümesinin konak grubuna yüklendiğini gösterir:The output from running the ansible-playbook command indicates that the sample Java application has been installed to the host group of the scale set:

PLAY [localhost]

TASK [Gathering Facts]
ok: [localhost]

TASK [Get facts for all Public IPs within a resource groups]
ok: [localhost]

TASK [Get loadbalancer info]
ok: [localhost]

TASK [Add all hosts]
changed: [localhost] ...

PLAY [Install JRE on scale set]

TASK [Gathering Facts]
ok: [40.114.30.145_50000]
ok: [40.114.30.145_50003]

TASK [Copy app to Azure VM]
changed: [40.114.30.145_50003]
changed: [40.114.30.145_50000]

TASK [Start the application]
changed: [40.114.30.145_50000]
changed: [40.114.30.145_50003]

PLAY RECAP
40.114.30.145_50000        : ok=4    changed=3    unreachable=0    failed=0
40.114.30.145_50003        : ok=4    changed=3    unreachable=0    failed=0
localhost                  : ok=4    changed=1    unreachable=0    failed=0

Sonuçları doğrulamaVerify the results

Ölçek kümesi için yük dengeleyicinin URL 'sine giderek çalışmalarınızın sonuçlarını doğrulayın:Verify the results of your work by navigating to the URL of the load balancer for your scale set:

Azure 'da bir ölçek kümesinde çalışan Java uygulaması.

Sonraki adımlarNext steps