다음을 통해 공유


자습서: Ansible을 사용하여 Azure에서 가상 머신 확장 집합에 앱 배포

Important

이 문서의 샘플 플레이북을 실행하려면 Ansible 2.7 이상이 필요합니다.

Azure 가상 머신 확장 집합 은 부하가 분산된 동일한 VM 그룹을 구성할 수 있는 Azure 기능입니다. 확장 집합에 대한 추가 비용은 없으며 가상 머신에서 작성됩니다. VM 인스턴스, 부하 분산 장치 또는 Managed Disk Storage와 같은 기본 컴퓨팅 리소스에 대해서만 비용을 지불합니다. 확장 집합을 사용하면 애플리케이션을 실행하고 크기를 조정할 수 있는 관리 및 자동화 계층이 제공됩니다. 개별 VM을 수동으로 만들고 관리할 수도 있습니다. 단, 확장 집합을 사용하면 두 가지 주요 이점이 있습니다. Azure에 기본 제공되며 애플리케이션 요구 사항에 맞게 가상 머신의 크기를 자동으로 조정합니다.

이 문서에서는 다음 방법을 설명합니다.

  • Azure VM 그룹에 대한 호스트 정보 검색
  • 샘플 앱 복제 및 빌드
  • 확장 집합에 JRE(Java 런타임 환경) 설치
  • 확장 집합에 Java 애플리케이션 배포

필수 조건

  • Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
  • git git - 은 이 자습서에서 사용되는 Java 샘플을 다운로드하는 데 사용됩니다.
  • JDK(Java SE Development Kit) - JDK 는 샘플 Java 프로젝트를 빌드하는 데 사용됩니다.
  • Apache Maven - Apache Maven 은 샘플 Java 프로젝트를 빌드하는 데 사용됩니다.

호스트 정보 가져오기

이 섹션의 플레이북 코드는 가상 머신 그룹에 대한 호스트 정보를 검색합니다. 이 코드는 지정된 리소스 그룹 내에서 공용 IP 주소 및 부하 분산 장치를 가져오고 인벤토리에 명명 scalesethosts 된 호스트 그룹을 만듭니다.

다음 샘플 플레이북을 get-hosts-tasks.yml로 저장합니다.

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

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

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

배포를 위한 애플리케이션 준비

이 섹션의 플레이북 코드는 GitHub에서 Java 샘플 프로젝트를 복제하는 데 사용하고 git 프로젝트를 빌드합니다.

다음 플레이북을 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"

다음 명령을 사용하여 샘플 Ansible 플레이북을 실행합니다.

ansible-playbook app.yml

플레이북을 실행한 후 다음 결과와 유사한 출력이 표시됩니다.

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

확장 집합에 애플리케이션 배포

이 섹션의 플레이북 코드는 다음 용도에 사용됩니다.

  • 명명된 호스트 그룹에 JRE 설치 saclesethosts
  • saclesethosts 호스트 그룹에 Java 애플리케이션 배포

다음과 같은 두 가지 방법으로 샘플 플레이북을 가져올 수 있습니다.

  • 플레이북 을 다운로드하고 저장합니다 vmss-setup-deploy.yml.

  • 이름이 vmss-setup-deploy.yml인 새 파일을 만듭니다. 새 파일에 다음 코드를 삽입합니다.

- 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

플레이북을 실행하기 전에 다음 정보를 참조하세요.

  • vars 섹션에서 {{ admin_password }} 자리 표시자를 해당 암호로 바꿉니다.

  • 암호에 ssh 연결 형식을 사용하려면 다음과 같이 sshpass 프로그램을 설치합니다.

    Ubuntu:

    apt-get install sshpass
    
  • 일부 환경에서는 키 대신 SSH 암호를 사용하면 오류가 발생할 수 있습니다. 이 오류가 표시되면 다음 줄을 추가하거나 ~/.ansible.cfg다음 줄을 /etc/ansible/ansible.cfg 추가하여 호스트 키 검사를 사용하지 않도록 설정할 수 있습니다.

    [defaults]
    host_key_checking = False
    

다음 명령을 사용하여 플레이북을 실행합니다.

ansible-playbook vmss-setup-deploy.yml

ansible-playbook 명령을 실행한 출력은 샘플 Java 애플리케이션이 확장 집합의 호스트 그룹에 설치되었음을 나타냅니다.

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

결과 확인

확장 집합에 대한 부하 분산 장치의 URL로 이동하여 작업 결과를 확인합니다.

Azure의 확장 집합에서 실행되는 Java 앱

다음 단계