Pythonを使用してAzureでVM作成するスクリプトが載ってる記事

Pythonを使用してAzureでVM作成するスクリプトが載ってる記事:


はじめに

これは公式ドキュメントに記載があるものの二次制作の記事となります。

なにゆえ公式に乗っているのに改めてここに記載するかというと、

公式では概念の解説が記事の中心としてあり、ソースコードが散逸しているため、

ここにフルのソースコードとして乗っけることに価値を見出したからです。


参考

Python を使用して Azure で Windows VM を作成および管理する


作成スクリプト

create_azure_vm.py
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 = 'subscription-id' 
GROUP_NAME = 'myResourceGroup' 
LOCATION = 'westus' 
VM_NAME = 'myVM' 
 
def get_credentials(): 
    credentials = ServicePrincipalCredentials( 
        client_id = 'application-id', 
        secret = 'authentication-key', 
        tenant = 'tenant-id' 
    ) 
 
    return credentials 
 
def create_resource_group(resource_group_client): 
    resource_group_params = { 'location':LOCATION } 
    resource_group_result = resource_group_client.resource_groups.create_or_update( 
        GROUP_NAME, 
        resource_group_params 
    ) 
 
def create_availability_set(compute_client): 
    avset_params = { 
        'location': LOCATION, 
        'sku': { 'name': 'Aligned' }, 
        'platform_fault_domain_count': 3 
    } 
    availability_set_result = compute_client.availability_sets.create_or_update( 
        GROUP_NAME, 
        'myAVSet', 
        avset_params 
    ) 
 
def create_public_ip_address(network_client): 
    public_ip_addess_params = { 
        'location': LOCATION, 
        'public_ip_allocation_method': 'Dynamic' 
    } 
    creation_result = network_client.public_ip_addresses.create_or_update( 
        GROUP_NAME, 
        'myIPAddress', 
        public_ip_addess_params 
    ) 
 
    return creation_result.result() 
 
def create_vnet(network_client): 
    vnet_params = { 
        'location': LOCATION, 
        'address_space': { 
            'address_prefixes': ['10.0.0.0/16'] 
        } 
    } 
    creation_result = network_client.virtual_networks.create_or_update( 
        GROUP_NAME, 
        'myVNet', 
        vnet_params 
    ) 
    return creation_result.result() 
 
def create_subnet(network_client): 
    subnet_params = { 
        'address_prefix': '10.0.0.0/24' 
    } 
    creation_result = network_client.subnets.create_or_update( 
        GROUP_NAME, 
        'myVNet', 
        'mySubnet', 
        subnet_params 
    ) 
 
    return creation_result.result() 
 
def create_nic(network_client): 
    subnet_info = network_client.subnets.get( 
        GROUP_NAME, 
        'myVNet', 
        'mySubnet' 
    ) 
    publicIPAddress = network_client.public_ip_addresses.get( 
        GROUP_NAME, 
        'myIPAddress' 
    ) 
    nic_params = { 
        'location': LOCATION, 
        'ip_configurations': [{ 
            'name': 'myIPConfig', 
            'public_ip_address': publicIPAddress, 
            'subnet': { 
                'id': subnet_info.id 
            } 
        }] 
    } 
    creation_result = network_client.network_interfaces.create_or_update( 
        GROUP_NAME, 
        'myNic', 
        nic_params 
    ) 
 
    return creation_result.result() 
 
def create_vm(network_client, compute_client): 
    nic = network_client.network_interfaces.get( 
        GROUP_NAME, 
        'myNic' 
    ) 
    avset = compute_client.availability_sets.get( 
        GROUP_NAME, 
        'myAVSet' 
    ) 
    vm_parameters = { 
        'location': LOCATION, 
        'os_profile': { 
            'computer_name': VM_NAME, 
            'admin_username': 'azureuser', 
            'admin_password': 'Azure12345678' 
        }, 
        'hardware_profile': { 
            'vm_size': 'Standard_DS1' 
        }, 
        'storage_profile': { 
            'image_reference': { 
                'publisher': 'MicrosoftWindowsServer', 
                'offer': 'WindowsServer', 
                'sku': '2012-R2-Datacenter', 
                'version': 'latest' 
            } 
        }, 
        'network_profile': { 
            'network_interfaces': [{ 
                'id': nic.id 
            }] 
        }, 
        'availability_set': { 
            'id': avset.id 
        } 
    } 
    creation_result = compute_client.virtual_machines.create_or_update( 
        GROUP_NAME, 
        VM_NAME, 
        vm_parameters 
    ) 
 
    return creation_result.result() 
 
if __name__ == "__main__": 
    credentials = get_credentials() 
 
    resource_group_client = ResourceManagementClient( 
        credentials, 
        SUBSCRIPTION_ID 
    ) 
    network_client = NetworkManagementClient( 
        credentials, 
        SUBSCRIPTION_ID 
    ) 
    compute_client = ComputeManagementClient( 
        credentials, 
        SUBSCRIPTION_ID 
    ) 
 
    create_resource_group(resource_group_client) 
    input('Resource group created. Press enter to continue...') 
 
    create_availability_set(compute_client) 
    print("------------------------------------------------------") 
    input('Availability set created. Press enter to continue...') 
 
    creation_result = create_public_ip_address(network_client) 
    print("------------------------------------------------------") 
    print(creation_result) 
    input('Press enter to continue...') 
 
    creation_result = create_vnet(network_client) 
    print("------------------------------------------------------") 
    print(creation_result) 
    input('Press enter to continue...') 
 
    creation_result = create_subnet(network_client) 
    print("------------------------------------------------------") 
    print(creation_result) 
    input('Press enter to continue...') 
 
    creation_result = create_nic(network_client) 
    print("------------------------------------------------------") 
    print(creation_result) 
    input('Press enter to continue...') 
 
    creation_result = create_vm(network_client, compute_client) 
    print("------------------------------------------------------") 
    print(creation_result) 
    input('Press enter to continue...') 
 
以上のコードにおいて、個人で取得・変更するSUBSCRIPTION_ID,GROUP_NAME ,LOCATION,VM_NAMEのみを変更すると、Azureにおいて仮想マシンが作成できる。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)