1. Azure API 라이브러리 download 방법
준비 : python2 or 3 설정 완료
1.1. (pip 설치) 사이트에서 get-pip.py 다운
site : https://bootstrap.pypa.io/
1.2. cmd 창에서 명령어 실행
python get-pip.py
설치 완료 되면
%python_home%\Scipts 폴더에 pip 확인가능
1.3. cmd 창에서 명령어 실행
pip install azure-storage-blob
pip install azure-mgmt-storage
pip install azure-mgmt-compute
pip install azure-mgmt-resource
pip install azure-mgmt-network
설치 완료 되면
%python_home%\Lib\site-packages 폴더에서 확인가능
1.4. 라이브러리 설치 확인
pip show azure-storage-blob
pip show azure-mgmt-storage
2. Azure Key, URL 가져오기
[ Azure API 를 사용하기 위해서 4가지의 키가 필요함 ]
- SUBSCRIPTION_ID = 'user id'
- client_id = 'application-id',
- secret = 'authentication-key',
- tenant = 'tenant-id'
아래에서 해당 4가지 키에 해당하는 값을 생성하는 과정을 설명.
2.1. 앱등록
2.1.1. Azure Active Directory 이동
이동 방법 1 : 검색창에 Azure Active Directory 으로 찾기
이동 방법 2 : Azure 홈의 서비스 항목에 있는지 확인
2.1.2. 앱 등록으로 이동
2.1.3. 새등록 클릭
2.1.4. 지원되는 계정 유형 : 이 조직 디렉터리의 계정만(기본 디렉터리만 - 단일 테넌트)
선택 후 등록 완료
2.2. 역할 할당 추가
2.2.1. 구독으로 이동
이동 방법 1 : 검색창에 구독으로 찾기
이동 방법 2 : Azure 홈의 서비스 항목에 있는지 확인
2.2.2. 해당 항목에서 구독 ID 확인
SUBSCRIPTION_ID = 'user id' 에 해당하는 값
상위 빨간 부분임
2.2.3. 구독 이름 클릭
예제에서는 무료 체험을 클릭
2.2.4. 좌측 항목에서 액세스 제어(IAM) 클릭
2.2.5. 우측 역할 할당 추가
2.2.6. 역할 할당 추가 완료 후 저장
역할 : 소유자 (admin 과 동일한 의미)
다음에 대한 엑세스 할당 : : Auzre AD 사용자, 그룹 또는 서비스 보안 주체
선택 : 상위 앱등록에서 생성한 앱 이름을 넣어줌
2.3. 확인
2.3.1. Azure Active Directory 이동
이동 방법 1 : 검색창에 Azure Active Directory 으로 찾기
이동 방법 2 : Azure 홈의 서비스 항목에 있는지 확인
2.3.2. 값 확인
client_id = '상위 그림의 애플리케이션(클라이언트) ID 에 해당함',
secret = 'authentication-key',
tenant = '상위의 디렉터리(테넌트) ID 에 해당함'
아직 Secret ID 를 생성해야함
2.4. Secret Key 생성법
2.4.1. Azure Active Directory 이동
이동 방법 1 : 검색창에 Azure Active Directory 으로 찾기
이동 방법 2 : Azure 홈의 서비스 항목에 있는지 확인
2.4.2. 왼쪽의 인증서 및 암호 클릭
2.4.3. 클라이언트 암호희 새 클라이언트 암호 클릭
2.4.4. 생성 후 추가
secret = 'authentication-key',
Secret key 값 확인
4가지 key 생성 완료.
파이썬 예제코드
from azure.common.credentials import ServicePrincipalCredentials from azure.mgmt.resource import ResourceManagementClient from azure.mgmt.compute import ComputeManagementClient from azure.mgmt.network import NetworkManagementClient from azure.mgmt.compute.models import DiskCreateOption
SUBSCRIPTION_ID = 'key(찾는 방식은 상위 설명 참고)' ClientId = 'key(찾는 방식은 상위 설명 참고)' SecretId = 'key(찾는 방식은 상위 설명 참고)' TenantID = 'key(찾는 방식은 상위 설명 참고)'
def Azure_VM(num):
credentials = ServicePrincipalCredentials( client_id = ClientId, secret = SecretId, tenant = TenantID )
compute_client = ComputeManagementClient(credentials, SUBSCRIPTION_ID)
## Azure VM Instances List ## if num == 0: print('[Azure VM Instances List]') vm_list = compute_client.virtual_machines.list_all()
VmCount= 0 for vm in vm_list: VmCount += 1 arrayV = vm.id.split("/") vm_id = arrayV[2] resource_group = arrayV[4] vm_name = arrayV[-1]
statuses = compute_client.virtual_machines.instance_view(resource_group, vm_name).statuses status = len(statuses) >= 2 and statuses[1] arrayS = status.code.split("/")
print("[{0}] VM_Name=({1}), VM_ID=({2}), state=({3})".format(VmCount, vm_name, vm_id, arrayS[1])) #end for #end if
## Azure VM Instances Start ## if num == 1: print('[Azure VM all Start]') vm_list = compute_client.virtual_machines.list_all()
for vm in vm_list: arrayV = vm.id.split("/") vm_id = arrayV[2] resource_group = arrayV[4] vm_name = arrayV[-1]
statuses = compute_client.virtual_machines.instance_view(resource_group, vm_name).statuses status = len(statuses) >= 2 and statuses[1] arrayS = status.code.split("/") if arrayS[1] == 'stopped' or arrayS[1] == 'deallocated': compute_client.virtual_machines.start(resource_group, vm_name) print("VM_Name=({0}), VM_ID=({1}) is START ".format(vm_name, vm_id)) #end for #end if
## Azure VM Instances STOP ## if num == 2: print('[Azure VM all Stop]') vm_list = compute_client.virtual_machines.list_all()
for vm in vm_list: arrayV = vm.id.split("/") vm_id = arrayV[2] resource_group = arrayV[4] vm_name = arrayV[-1]
statuses = compute_client.virtual_machines.instance_view(resource_group, vm_name).statuses status = len(statuses) >= 2 and statuses[1] arrayS = status.code.split("/") if arrayS[1] == 'running': compute_client.virtual_machines.power_off(resource_group, vm_name) print("VM_Name=({0}), VM_ID=({1}) is STOP ".format(vm_name, vm_id)) #end for #end if
## Azure VM Instances Deallocate ## if num == 3: print('[Azure VM all Deallocate]') vm_list = compute_client.virtual_machines.list_all()
for vm in vm_list: arrayV = vm.id.split("/") vm_id = arrayV[2] resource_group = arrayV[4] vm_name = arrayV[-1]
statuses = compute_client.virtual_machines.instance_view(resource_group, vm_name).statuses status = len(statuses) >= 2 and statuses[1] arrayS = status.code.split("/") if arrayS[1] == 'running': compute_client.virtual_machines.deallocate(resource_group, vm_name) print("VM_Name=({0}), VM_ID=({1}) is Deallocate ".format(vm_name, vm_id))
#end for #end if
#end def Azure_VM
if __name__=="__main__" :
while True: InputGet = input('cli> ') if 'q' == InputGet : break if '0' == InputGet : Azure_VM(0) if '1' == InputGet : Azure_VM(1) if '2' == InputGet : Azure_VM(2) if '3' == InputGet : Azure_VM(3) |
제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!
참고
[ Azure python 라이브러리 download ]
https://docs.microsoft.com/ko-kr/azure/developer/python/azure-sdk-install
[ Azure Python ]
https://docs.microsoft.com/ko-kr/azure/api-management/import-and-publish
https://docs.microsoft.com/ko-kr/azure/azure-functions/functions-reference-python
[ SDK 참고 ]
https://docs.microsoft.com/ko-kr/azure/virtual-machines/windows/python
[VM list, start, stop 예제 ]
https://azure.github.io/azure-sdk-for-python/
https://docs.microsoft.com/ko-kr/python/api/overview/azure/authorization?view=azure-python
[ key 인증 참고 ]
https://docs.microsoft.com/ko-kr/azure/key-vault/keys/quick-create-python
VM list 조회 참고
https://stackoverflow.com/questions/58925397/how-could-i-list-azure-virtual-machines-using-python