자습서: Ansible을 사용하여 Azure 공유 이미지 갤러리에서 VM 또는 가상 머신 확장 집합 만들기
Important
이 문서의 샘플 플레이북을 실행하려면 Ansible 2.9 이상이 필요합니다.
공유 이미지 갤러리 는 사용자 지정 관리형 이미지를 쉽게 관리, 공유 및 구성할 수 있는 서비스입니다. 이 기능은 많은 이미지가 기본 및 공유되는 시나리오에 유용합니다. 사용자 지정 이미지는 구독 간 및 Microsoft Entra 테넌트 간에 공유할 수 있습니다. 더 빠른 배포 크기 조정을 위해 이미지를 여러 지역에 복제본(replica) 수 있습니다.
이 문서에서는 다음 방법을 설명합니다.
- 일반화된 VM 및 사용자 지정 이미지 만들기
- Shared Image Gallery 만들기
- 공유 이미지 및 이미지 버전 만들기
- 일반화된 이미지를 사용하여 VM 만들기
- 일반화된 이미지를 사용하여 가상 머신 확장 집합 만들기
- 공유 이미지 갤러리, 이미지 및 버전에 대한 정보를 가져옵니다.
필수 조건
- Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
Ansible 설치: 다음 옵션 중 하나를 수행합니다.
- Linux 가상 머신에서 Ansible 설치 및 구성
- Azure Cloud Shell 구성 - Linux 가상 머신에 액세스할 수 없는 경우 Ansible을 사용하여 가상 머신 만들기
샘플 플레이북 가져오기
샘플 플레이북의 전체 집합을 가져오는 방법에는 두 가지가 있습니다.
- SIG 폴더 를 다운로드하여 로컬 컴퓨터에 저장합니다.
- 각 섹션에 대한 새 파일을 만들고 그 안에 샘플 플레이북을 복사합니다.
vars.yml
파일에는 이 자습서의 모든 샘플 플레이북에서 사용되는 변수가 포함되어 있습니다. 파일을 편집하여 고유한 이름과 값을 제공할 수 있습니다.
첫 번째 샘플 플레이북 00-prerequisites.yml
은 이 자습서를 완료하는 데 필요한 내용을 만듭니다.
- Azure 리소스를 배포하고 관리하는 논리적 컨테이너인 리소스 그룹입니다.
- 가상 네트워크; 서브넷; VM에 대한 공용 IP 주소 및 네트워크 인터페이스 카드.
- 일반화된 이미지를 만드는 데 사용되는 원본 Virtual Machine입니다.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Create resource group if doesn't exist
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
- name: Create virtual network
azure_rm_virtualnetwork:
resource_group: "{{ resource_group }}"
name: "{{ virtual_network_name }}"
address_prefixes: "10.0.0.0/16"
- name: Add subnet
azure_rm_subnet:
resource_group: "{{ resource_group }}"
name: "{{ subnet_name }}"
address_prefix: "10.0.1.0/24"
virtual_network: "{{ virtual_network_name }}"
- name: Create public IP address
azure_rm_publicipaddress:
resource_group: "{{ resource_group }}"
allocation_method: Static
name: "{{ ip_name }}"
- name: Create virtual network interface cards for VM A and B
azure_rm_networkinterface:
resource_group: "{{ resource_group }}"
name: "{{ network_interface_name }}"
virtual_network: "{{ virtual_network_name }}"
subnet: "{{ subnet_name }}"
- name: Create VM
azure_rm_virtualmachine:
resource_group: "{{ resource_group }}"
name: "{{ source_vm_name }}"
admin_username: testuser
admin_password: "Password1234!"
vm_size: Standard_B1ms
network_interfaces: "{{ network_interface_name }}"
image:
offer: UbuntuServer
publisher: Canonical
sku: 16.04-LTS
version: latest
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook 00-prerequisites.yml
Azure Portal에서 vars.yml
에 지정한 리소스 그룹을 확인하여 새 가상 머신과 만든 다양한 리소스를 확인합니다.
VM 일반화 및 사용자 지정 이미지 만들기
다음 플레이북 01a-create-generalized-image.yml
은 이전 단계에서 만든 원본 VM을 일반화한 다음 이를 기반으로 사용자 지정 이미지를 만듭니다.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Generalize VM
azure_rm_virtualmachine:
resource_group: "{{ resource_group }}"
name: "{{ source_vm_name }}"
generalized: yes
- name: Create custom image
azure_rm_image:
resource_group: "{{ resource_group }}"
name: "{{ image_name }}"
source: "{{ source_vm_name }}"
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook 01a-create-generalized-image.yml
리소스 그룹을 확인하고 표시되는지 확인 testimagea
합니다.
Shared Image Gallery 만들기
이미지 갤러리는 이미지를 공유하고 관리하기 위한 리포지토리입니다. 샘플 플레이북 코드는 02-create-shared-image-gallery.yml
리소스 그룹에 공유 이미지 갤러리를 만듭니다.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Create shared image gallery
azure_rm_gallery:
resource_group: "{{ resource_group }}"
name: "{{ shared_gallery_name }}"
location: "{{ location }}"
description: This is the gallery description.
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook 02-create-shared-image-gallery.yml
이제 리소스 그룹에 새 갤러리 myGallery
가 표시됩니다.
공유 이미지 및 이미지 버전 만들기
다음 플레이북은 03a-create-shared-image-generalized.yml
이미지 정의 및 이미지 버전을 만듭니다.
이미지 정의에는 이미지 유형(Windows 또는 Linux), 릴리스 정보, 최소 및 최대 메모리 요구 사항이 포함됩니다. 이미지 버전은 이미지의 버전입니다. 갤러리, 이미지 정의 및 이미지 버전은 이미지를 논리 그룹으로 구성하는 데 도움이 됩니다.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Create shared image
azure_rm_galleryimage:
resource_group: "{{ resource_group }}"
gallery_name: "{{ shared_gallery_name }}"
name: "{{ shared_image_name }}"
location: "{{ location }}"
os_type: linux
os_state: generalized
identifier:
publisher: myPublisherName
offer: myOfferName
sku: mySkuName
description: Image description
- name: Create or update a simple gallery image version.
azure_rm_galleryimageversion:
resource_group: "{{ resource_group }}"
gallery_name: "{{ shared_gallery_name }}"
gallery_image_name: "{{ shared_image_name }}"
name: "{{ shared_image_version }}"
location: "{{ location }}"
publishing_profile:
end_of_life_date: "2020-10-01t00:00:00+00:00"
exclude_from_latest: yes
replica_count: 3
storage_account_type: Standard_LRS
target_regions:
- name: West US
regional_replica_count: 1
- name: East US
regional_replica_count: 2
storage_account_type: Standard_ZRS
managed_image:
name: "{{ image_name }}"
resource_group: "{{ resource_group }}"
register: output
- debug:
var: output
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook 03a-create-shared-image-generalized.yml
이제 리소스 그룹에 갤러리에 대한 이미지 정의 및 이미지 버전이 있습니다.
일반화된 이미지를 기반으로 VM 만들기
마지막으로 실행 04a-create-vm-using-generalized-image.yml
하여 이전 단계에서 만든 일반화된 이미지를 기반으로 VM을 만듭니다.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Create VM using shared image
azure_rm_virtualmachine:
resource_group: "{{ resource_group }}"
name: "{{ vm_name }}"
vm_size: Standard_DS1_v2
admin_username: adminUser
admin_password: PassWord01
managed_disk_type: Standard_LRS
image:
id: "/subscriptions/{{ lookup('env', 'AZURE_SUBSCRIPTION_ID') }}/resourceGroups/{{ resource_group }}/providers/Microsoft.Compute/galleries/{{ shared_gallery_name }}/images/{{ shared_image_name }}/versions/{{ shared_image_version }}"
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook 04a-create-vm-using-generalized-image.yml
일반화된 이미지를 기반으로 가상 머신 확장 집합 만들기
일반화된 이미지를 기반으로 가상 머신 확장 집합을 만들 수도 있습니다. 실행 05a-create-vmss-using-generalized-image.yml
하여 실행합니다.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Create a virtual machine scale set using a shared image
azure_rm_virtualmachinescaleset:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
vm_size: Standard_DS1_v2
admin_username: adminUser
admin_password: PassWord01
capacity: 2
virtual_network_name: "{{ virtual_network_name }}"
upgrade_policy: Manual
subnet_name: "{{ subnet_name }}"
managed_disk_type: Standard_LRS
image:
id: "/subscriptions/{{ lookup('env', 'AZURE_SUBSCRIPTION_ID') }}/resourceGroups/{{ resource_group }}/providers/Microsoft.Compute/galleries/{{ shared_gallery_name }}/images/{{ shared_image_name }}/versions/{{ shared_image_version }}"
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook 05a-create-vmss-using-generalized-image.yml
갤러리에 대한 정보 가져오기
를 실행 06-get-info.yml
하여 갤러리, 이미지 정의 및 버전에 대한 정보를 가져올 수 있습니다.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Get Shared Image Gallery information
azure_rm_gallery_info:
resource_group: "{{ resource_group }}"
name: "{{ shared_gallery_name }}"
- name: Get shared image information
azure_rm_galleryimage_info:
resource_group: "{{ resource_group }}"
gallery_name: "{{ shared_gallery_name }}"
name: "{{ shared_image_name }}"
- name: Get Shared Image Gallery image version information
azure_rm_galleryimageversion_info:
resource_group: "{{ resource_group }}"
gallery_name: "{{ shared_gallery_name }}"
gallery_image_name: "{{ shared_image_name }}"
name: "{{ shared_image_version }}"
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook 06-get-info.yml
공유 이미지 삭제
갤러리 리소스를 삭제하려면 07-delete-gallery.yml
샘플 플레이북을 참조하세요. 리소스를 역순으로 삭제합니다. 먼저 이미지 버전을 삭제합니다. 모든 이미지 버전이 삭제되면 이미지 정의를 삭제할 수 있습니다. 모든 이미지 정의를 삭제한 후 갤러리를 삭제할 수 있습니다.
- hosts: localhost
connection: local
vars_files:
- ./vars.yml
tasks:
- name: Delete gallery image version.
azure_rm_galleryimageversion:
resource_group: "{{ resource_group }}"
gallery_name: "{{ shared_gallery_name }}"
gallery_image_name: "{{ shared_image_name }}"
name: "{{ shared_image_version }}"
state: absent
- name: Delete gallery image
azure_rm_galleryimage:
resource_group: "{{ resource_group }}"
gallery_name: "{{ shared_gallery_name }}"
name: "{{ shared_image_name }}"
state: absent
- name: Delete a simple gallery.
azure_rm_gallery:
resource_group: "{{ resource_group }}"
name: "{{ shared_gallery_name }}"
state: absent
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook 07-delete-gallery.yml
리소스 정리
다음 코드를 .로
delete_rg.yml
저장합니다.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rg
ansible-playbook 명령을 사용하여 플레이북을 실행합니다. 자리 표시자를 삭제할 리소스 그룹의 이름으로 바꿉니다. 리소스 그룹 내의 모든 리소스가 삭제됩니다.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
주요 정보:
- 플레이북의
register
변수 및debug
섹션으로 인해 명령이 완료되면 결과가 표시됩니다.
- 플레이북의