자습서: Ansible을 사용하여 Azure에서 가상 머신 확장 집합에 앱 배포
Important
이 문서의 샘플 플레이북을 실행하려면 Ansible 2.7 이상이 필요합니다.
Azure 가상 머신 확장 집합 은 부하가 분산된 동일한 VM 그룹을 구성할 수 있는 Azure 기능입니다. 확장 집합에 대한 추가 비용은 없으며 가상 머신에서 작성됩니다. VM 인스턴스, 부하 분산 장치 또는 Managed Disk Storage와 같은 기본 컴퓨팅 리소스에 대해서만 비용을 지불합니다. 확장 집합을 사용하면 애플리케이션을 실행하고 크기를 조정할 수 있는 관리 및 자동화 계층이 제공됩니다. 개별 VM을 수동으로 만들고 관리할 수도 있습니다. 단, 확장 집합을 사용하면 두 가지 주요 이점이 있습니다. Azure에 기본 제공되며 애플리케이션 요구 사항에 맞게 가상 머신의 크기를 자동으로 조정합니다.
이 문서에서는 다음 방법을 설명합니다.
- Azure VM 그룹에 대한 호스트 정보 검색
- 샘플 앱 복제 및 빌드
- 확장 집합에 JRE(Java 런타임 환경) 설치
- 확장 집합에 Java 애플리케이션 배포
필수 조건
- Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
Ansible 설치: 다음 옵션 중 하나를 수행합니다.
- Linux 가상 머신에서 Ansible 설치 및 구성
- Azure Cloud Shell 구성 - Linux 가상 머신에 액세스할 수 없는 경우 Ansible을 사용하여 가상 머신 만들기
- 가상 머신 확장 집합: 확장 집합이 아직 없는 경우 Ansible을 사용하여 확장 집합을 구성할 수 있습니다.
- 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로 이동하여 작업 결과를 확인합니다.