Ansible을 사용하여 Azure에서 Linux 가상 머신 만들기

주의

이 문서에서는 EOL(수명 종료) 상태에 가까워진 Linux 배포판인 CentOS를 참조하세요. 이에 따라 사용 및 플랜을 고려하세요. 자세한 내용은 CentOS 수명 종료 지침을 참조하세요.

이 문서에서는 Linux 가상 머신을 구성하기 위한 샘플 Ansible 플레이북을 제공합니다.

이 문서에서는 다음 방법을 설명합니다.

  • 리소스 그룹 만들기
  • 가상 네트워크 만들기
  • 공용 IP 주소 만들기
  • 네트워크 보안 그룹 만들기
  • 가상 네트워크 인터페이스 카드 만들기
  • 가상 머신 만들기

1. 환경 구성

  • Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

2. SSH 키 쌍 만들기

  1. 다음 명령을 실행합니다. 메시지가 표시되면 /home/azureuser/.ssh/authorized_keys 디렉터리에서 만들 파일을 지정합니다.

    ssh-keygen -m PEM -t rsa -b 4096
    
  2. 공개 키 파일의 콘텐츠를 복사합니다. 기본적으로 공개 키 파일의 이름은 id_rsa.pub입니다. 값은 "ssh-rsa"로 시작하는 긴 문자열입니다. 이 값은 다음 단계에서 필요합니다.

3. Ansible 플레이북 구현

  1. 샘플 Ansible 코드를 테스트 및 실행할 디렉터리를 만들고 현재 디렉터리로 만듭니다.

  2. main.yml라는 파일을 만들고 다음 코드를 삽입합니다. <key_data> 자리 표시자를 이전 단계의 공개 키 값으로 바꿉니다.

    - name: Create Azure VM
      hosts: localhost
      connection: local
      tasks:
      - name: Create resource group
        azure_rm_resourcegroup:
          name: myResourceGroup
          location: eastus
      - name: Create virtual network
        azure_rm_virtualnetwork:
          resource_group: myResourceGroup
          name: myVnet
          address_prefixes: "10.0.0.0/16"
      - name: Add subnet
        azure_rm_subnet:
          resource_group: myResourceGroup
          name: mySubnet
          address_prefix: "10.0.1.0/24"
          virtual_network: myVnet
      - name: Create public IP address
        azure_rm_publicipaddress:
          resource_group: myResourceGroup
          allocation_method: Static
          name: myPublicIP
        register: output_ip_address
      - name: Public IP of VM
        debug:
          msg: "The public IP is {{ output_ip_address.state.ip_address }}."
      - name: Create Network Security Group that allows SSH
        azure_rm_securitygroup:
          resource_group: myResourceGroup
          name: myNetworkSecurityGroup
          rules:
            - name: SSH
              protocol: Tcp
              destination_port_range: 22
              access: Allow
              priority: 1001
              direction: Inbound
      - name: Create virtual network interface card
        azure_rm_networkinterface:
          resource_group: myResourceGroup
          name: myNIC
          virtual_network: myVnet
          subnet: mySubnet
          public_ip_name: myPublicIP
          security_group: myNetworkSecurityGroup
      - name: Create VM
        azure_rm_virtualmachine:
          resource_group: myResourceGroup
          name: myVM
          vm_size: Standard_DS1_v2
          admin_username: azureuser
          ssh_password_enabled: false
          ssh_public_keys:
            - path: /home/azureuser/.ssh/authorized_keys
              key_data: "<key_data>"
          network_interfaces: myNIC
          image:
            offer: CentOS
            publisher: OpenLogic
            sku: '7.5'
            version: latest
    

4. 플레이북 실행

Ansible 플레이북을 실행하여 Ansible 플레이북을 실행합니다.

ansible-playbook main.yml

5. 결과 확인

az vm list를 실행하여 VM이 만들어졌는지 확인합니다.

az vm list -d -o table --query "[?name=='myVM']"

6. VM에 연결

SSH 명령을 실행하여 새 Linux VM에 연결합니다. <IP 주소> 자리 표시자를 이전 단계의 IP 주소로 바꿉니다.

ssh azureuser@<ip_address> -i /home/azureuser/.ssh/authorized_keys/id_rsa

리소스 정리

  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 섹션으로 인해 명령이 완료되면 결과가 표시됩니다.

다음 단계