這很重要
本文中的範例腳本需要 Ansible 2.9(或更新版本)執行。
共享圖像庫 是一項服務,可讓您輕鬆管理、共享和組織自定義管理的圖像。 此功能對於維護和共享許多圖像的場景非常有用。 自訂映像可以在訂用帳戶之間以及 Microsoft Entra 租用戶之間共用。 映像也可以複寫到多個區域,以加快部署擴展速度。
在本文中,您將學會如何:
- 建立一般化 VM 和自訂映像
- 建立共用影像庫
- 建立共用映像和映像版本
- 使用一般化映像建立虛擬機器
- 使用通用映像建立虛擬機器規模組
- 取得有關您的共享圖像庫、圖像和版本的資訊。
先決條件
- Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
安裝 Ansible:執行下列其中一個選項:
- 在Linux虛擬機器上安裝及設定Ansible
- 設定 Azure Cloud Shell ,如果您無法存取 Linux 虛擬機器,請 使用 Ansible 建立虛擬機器。
取得範例劇本
有兩種方法可以獲取完整的範例操作手冊:
- 下載 SIG 資料夾 並將其儲存到本機電腦。
- 為每個區段建立新檔案,並將範例操作手冊複製到其中。
此 vars.yml 檔案包含本教程所有範例腳本所使用的變數。 您可以編輯檔案以提供唯一的名稱和值。
第一個範例指導手冊 00-prerequisites.yml 會建立完成本教程所需的元件:
- 資源群組,這是部署和管理 Azure 資源的邏輯容器。
- 虛擬網路;子網;VM 的公用 IP 位址和網路介面卡。
- 來源虛擬機器,用於建立一般化映像。
- 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 入口網站中,檢查您在中 vars.yml 指定的資源群組,以查看新的虛擬機器和您建立的各種資源。
一般化 VM 並建立自訂映像
下一個教戰手冊 01a-create-generalized-image.yml 將對在上一步中建立的來源虛擬機器進行通用化設定,然後根據該來源虛擬機器建立自訂映像。
- 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 已顯示。
建立共用影像庫
映像庫是用於共用和管理映像的儲存庫。 中的 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
您的資源群組現在具有映像庫的映像定義和映像版本。
根據一般化映像建立虛擬機器
最後,執行 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區段,當命令完成時,結果會顯示。
- 由於教戰手冊中的