중요합니다
이 문서의 샘플 플레이북을 실행하려면 Ansible 2.8 이상이 필요합니다.
Azure DevTest Labs 를 사용하면 개발자가 앱에 대한 VM 환경 만들기를 자동화할 수 있습니다. 이러한 환경은 앱 개발, 테스트 및 학습을 위해 구성할 수 있습니다.
이 문서에서는 다음 방법을 알아봅니다.
- 랩 만들기
- 랩 정책 설정
- 랩 일정 설정
- 랩 가상 네트워크 만들기
- 실험실용 아티팩트 원본을 정의합니다
- 랩 내에서 VM 만들기
- 랩의 아티팩트 소스와 아티팩트를 나열하세요.
- 아티팩트 원본에 대한 Azure Resource Manager 정보 가져오기
- 랩 환경 만들기
- 랩 이미지 만들기
- 랩 삭제
필수 조건
- Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
- Azure 서비스 주체: 서비스 주체를 생성하고, 다음 값을 기록하십시오: appId, displayName, 암호, 및 테넌트.
Ansible 설치: 다음 옵션 중 하나를 수행합니다.
- Linux 가상 머신에 Ansible 설치 및 구성
- Azure Cloud Shell을 구성 하고 Linux 가상 머신에 액세스할 수 없는 경우 Ansible을 사용하여 가상 머신을 만듭니다.
리소스 그룹 만들기
샘플 플레이북 코드 조각은 Azure 리소스 그룹을 만듭니다. 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다.
- name: Create a resource group
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
랩 만들기
다음 작업은 샘플 랩을 만듭니다.
- name: Create the lab
azure_rm_devtestlab:
resource_group: "{{ resource_group }}"
name: "{{ lab_name }}"
location: "{{ location }}"
storage_type: standard
premium_data_disks: no
register: output_lab
랩 정책 설정
랩 정책 설정을 설정할 수 있습니다. 다음 값을 설정할 수 있습니다.
-
user_owned_lab_vm_count는 사용자가 소유할 수 있는 VM 수입니다. -
user_owned_lab_premium_vm_count는 사용자가 소유할 수 있는 프리미엄 VM 수입니다. -
lab_vm_count는 랩 VM의 최대 수입니다. -
lab_premium_vm_count는 랩 프리미엄 VM의 최대 수입니다. -
lab_vm_size는 허용되는 랩 VM 크기입니다. -
gallery_image가 허용되는 갤러리 이미지입니다. -
user_owned_lab_vm_count_in_subnet는 서브넷의 최대 사용자 VM 수입니다. -
lab_target_cost는 랩의 대상 비용입니다.
- name: Set the lab policies
azure_rm_devtestlabpolicy:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
policy_set_name: myDtlPolicySet
name: myDtlPolicy
fact_name: user_owned_lab_vm_count
threshold: 5
랩 일정 설정
이 섹션의 샘플 작업은 랩 일정을 구성합니다.
다음 코드 조각 lab_vms_startup 에서 이 값은 VM 시작 시간을 지정하는 데 사용됩니다. 마찬가지로 lab_vms_shutdown 값을 설정하면 실험실 VM의 종료 시간이 설정됩니다.
- name: Set the lab schedule
azure_rm_devtestlabschedule:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
name: lab_vms_shutdown
time: "1030"
time_zone_id: "UTC+12"
register: output
랩 가상 네트워크 만들기
다음 작업은 기본 랩 가상 네트워크를 만듭니다.
- name: Create the lab virtual network
azure_rm_devtestlabvirtualnetwork:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
name: "{{ vn_name }}"
location: "{{ location }}"
description: My lab virtual network
register: output
실험실의 아티팩트 소스를 정의하세요
아티팩트 원본은 아티팩트 정의 및 Azure Resource Manager 템플릿을 포함하는 올바르게 구조화된 GitHub 리포지토리입니다. 모든 랩에는 미리 정의된 공용 아티팩트가 함께 제공됩니다. 다음 단계는 랩의 아티팩트 원본을 만드는 절차를 설명합니다.
- name: Define the lab artifacts source
azure_rm_devtestlabartifactsource:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
name: "{{ artifacts_name }}"
uri: https://github.com/Azure/azure_preview_modules.git
source_type: github
folder_path: /tasks
security_token: "{{ github_token }}"
랩 내에서 VM 만들기
랩 내에서 VM을 만듭니다.
- name: Create a VM within the lab
azure_rm_devtestlabvirtualmachine:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
name: "{{ vm_name }}"
notes: Virtual machine notes, just something....
os_type: linux
vm_size: Standard_A2_v2
user_name: dtladmin
password: ZSasfovobocu$$21!
lab_subnet:
virtual_network_name: "{{ vn_name }}"
name: "{{ vn_name }}Subnet"
disallow_public_ip_address: no
image:
offer: UbuntuServer
publisher: Canonical
sku: 16.04-LTS
os_type: Linux
version: latest
artifacts:
- source_name: "{{ artifacts_name }}"
source_path: "/Artifacts/linux-install-mongodb"
allow_claim: no
expiration_date: "2029-02-22T01:49:12.117974Z"
실험실의 아티팩트의 출처와 아티팩트 목록
랩의 모든 기본 아티팩트 및 사용자 지정 아티팩트 원본을 나열하려면 다음 작업을 사용합니다.
- name: List the artifact sources
azure_rm_devtestlabartifactsource_facts:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
register: output
- debug:
var: output
다음 작업에는 모든 아티팩트가 나열됩니다.
- name: List the artifact facts
azure_rm_devtestlabartifact_facts:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
artifact_source_name: public repo
register: output
- debug:
var: output
아티팩트 원본에 대한 Azure Resource Manager 정보 가져오기
템플릿이 있는 미리 정의된 리포지토리의 public environment repository모든 Azure Resource Manager 템플릿을 나열하려면 다음을 수행합니다.
- name: List the Azure Resource Manager template facts
azure_rm_devtestlabartifactsource_facts:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
register: output
- debug:
var: output
그리고 다음 작업은 리포지토리에서 특정 Azure Resource Manager 템플릿의 세부 정보를 검색합니다.
- name: Get Azure Resource Manager template facts
azure_rm_devtestlabarmtemplate_facts:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
artifact_source_name: "public environment repo"
name: ServiceFabric-LabCluster
register: output
- debug:
var: output
랩 환경 만들기
다음 작업은 공용 환경 리포지토리의 템플릿 중 하나를 기반으로 랩 환경을 만듭니다.
- name: Create the lab environment
azure_rm_devtestlabenvironment:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
user_name: "@me"
name: myEnvironment
location: eastus
deployment_template: "{{ output_lab.id }}/artifactSources/public environment repo/armTemplates/WebApp"
register: output
랩 이미지 만들기
다음 작업은 VM에서 이미지를 만듭니다. 이미지를 사용하면 동일한 VM을 만들 수 있습니다.
- name: Create the lab image
azure_rm_devtestlabcustomimage:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
name: myImage
source_vm: "{{ output_vm.virtualmachines[0]['name'] }}"
linux_os_state: non_deprovisioned
랩 삭제
랩을 삭제하려면 다음 작업을 사용합니다.
- name: Delete the lab
azure_rm_devtestlab:
resource_group: "{{ resource_group }}"
name: "{{ lab_name }}"
state: absent
register: output
- name: Assert the change was correctly reported
assert:
that:
- output.changed
샘플 플레이북 가져오기
전체 샘플 플레이북을 가져오는 방법에는 두 가지가 있습니다.
-
플레이북을 다운로드 하고 저장합니다
devtestlab-create.yml. - 명명
devtestlab-create.yml된 새 파일을 만들고 다음 내용을 복사합니다.
---
- hosts: localhost
#roles:
# - azure.azure_preview_modules
vars:
resource_group: "{{ resource_group_name }}"
lab_name: myLab
vn_name: myLabVirtualNetwork
vm_name: myLabVm
artifacts_name: myArtifacts
github_token: "{{ lookup('env','GITHUB_ACCESS_TOKEN') }}"
location: eastus
tasks:
- name: Create a resource group
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
- name: Create the lab
azure_rm_devtestlab:
resource_group: "{{ resource_group }}"
name: "{{ lab_name }}"
location: eastus
storage_type: standard
premium_data_disks: no
register: output_lab
- name: Set the lab policies
azure_rm_devtestlabpolicy:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
policy_set_name: myDtlPolicySet
name: myDtlPolicy
fact_name: user_owned_lab_vm_count
threshold: 5
- name: Set the lab schedule
azure_rm_devtestlabschedule:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
name: lab_vms_shutdown
time: "1030"
time_zone_id: "UTC+12"
register: output
- name: Create the lab virtual network
azure_rm_devtestlabvirtualnetwork:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
name: "{{ vn_name }}"
location: eastus
description: My lab virtual network
register: output
- name: Define the lab artifacts source
azure_rm_devtestlabartifactsource:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
name: "{{ artifacts_name }}"
uri: https://github.com/Azure/azure_preview_modules.git
source_type: github
folder_path: /tasks
security_token: "{{ github_token }}"
- name:
set_fact:
artifact_source:
- source_name: "{{ artifacts_name }}"
source_path: "/Artifacts/linux-install-mongodb"
when: "github_token | length > 0"
- name:
set_fact:
artifact_source: null
when: "github_token | length == 0"
- name: Create a VM within the lab
azure_rm_devtestlabvirtualmachine:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
name: "{{ vm_name }}"
notes: Virtual machine notes, just something....
os_type: linux
vm_size: Standard_A2_v2
user_name: dtladmin
password: ZSasfovobocu$$21!
lab_subnet:
virtual_network_name: "{{ vn_name }}"
name: "{{ vn_name }}Subnet"
disallow_public_ip_address: no
image:
offer: UbuntuServer
publisher: Canonical
sku: 16.04-LTS
os_type: Linux
version: latest
artifacts:
- source_name: "{{ artifacts_name }}"
source_path: "/Artifacts/linux-install-mongodb"
allow_claim: no
expiration_date: "2029-02-22T01:49:12.117974Z"
- name: List the artifact sources
azure_rm_devtestlabartifactsource_facts:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
register: output
- debug:
var: output
- name: List the artifact facts
azure_rm_devtestlabartifact_facts:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
artifact_source_name: public repo
register: output
- debug:
var: output
- name: List the Azure Resource Manager template facts
azure_rm_devtestlabarmtemplate_facts:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
artifact_source_name: "public environment repo"
register: output
- debug:
var: output
- name: Get Azure Resource Manager template facts
azure_rm_devtestlabarmtemplate_facts:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
artifact_source_name: "public environment repo"
name: ServiceFabric-LabCluster
register: output
- debug:
var: output
- name: Create the lab environment
azure_rm_devtestlabenvironment:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
user_name: "@me"
name: myEnvironment
location: eastus
deployment_template: "{{ output_lab.id }}/artifactSources/public environment repo/armTemplates/WebApp"
- name: Create the lab image
azure_rm_devtestlabcustomimage:
resource_group: "{{ resource_group }}"
lab_name: "{{ lab_name }}"
name: myImage
source_vm: "{{ vm_name }}"
linux_os_state: non_deprovisioned
- name: Delete the lab
azure_rm_devtestlab:
resource_group: "{{ resource_group }}"
name: "{{ lab_name }}"
state: absent
플레이북 실행
이 섹션에서는 플레이북을 실행하여 이 문서에 표시된 다양한 기능을 테스트합니다.
플레이북을 실행하기 전에 다음을 변경합니다.
-
vars섹션에서{{ resource_group_name }}자리 표시자를 리소스 그룹의 이름으로 바꿉니다. - GitHub 토큰을 명명
GITHUB_ACCESS_TOKEN된 환경 변수로 저장합니다.
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook devtestlab-create.yml
자원을 정리하세요
다음 코드를 .로
delete_rg.yml저장합니다.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rgansible-playbook 명령을 사용하여 플레이북을 실행합니다. 자리 표시자를 삭제할 리소스 그룹의 이름으로 바꿉니다. 리소스 그룹 내의 모든 리소스가 삭제됩니다.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"핵심 사항:
- 플레이북의
register변수와debug섹션 때문에 명령이 완료되면 결과가 표시됩니다.
- 플레이북의