자습서: Ansible을 사용하여 Azure DevTest Labs에서 랩 구성

중요합니다

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

Azure DevTest Labs 를 사용하면 개발자가 앱에 대한 VM 환경 만들기를 자동화할 수 있습니다. 이러한 환경은 앱 개발, 테스트 및 학습을 위해 구성할 수 있습니다.

이 문서에서는 다음 방법을 알아봅니다.

  • 랩 만들기
  • 랩 정책 설정
  • 랩 일정 설정
  • 랩 가상 네트워크 만들기
  • 실험실용 아티팩트 원본을 정의합니다
  • 랩 내에서 VM 만들기
  • 랩의 아티팩트 소스와 아티팩트를 나열하세요.
  • 아티팩트 원본에 대한 Azure Resource Manager 정보 가져오기
  • 랩 환경 만들기
  • 랩 이미지 만들기
  • 랩 삭제

필수 조건

  • Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
  • Azure 서비스 주체: 서비스 주체를 생성하고, 다음 값을 기록하십시오: appId, displayName, 암호, 및 테넌트.

리소스 그룹 만들기

샘플 플레이북 코드 조각은 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

자원을 정리하세요

  1. 다음 코드를 .로 delete_rg.yml저장합니다.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. ansible-playbook 명령을 사용하여 플레이북을 실행합니다. 자리 표시자를 삭제할 리소스 그룹의 이름으로 바꿉니다. 리소스 그룹 내의 모든 리소스가 삭제됩니다.

    ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
    

    핵심 사항:

    • 플레이북의 register 변수와 debug 섹션 때문에 명령이 완료되면 결과가 표시됩니다.

다음 단계