在Python中使用azure.mgmt.resourceResourceManagementClient()创建和管理Azure虚拟机
发布时间:2023-12-24 08:17:46
在Python中,我们可以使用azure.mgmt.resource.ResourceManagementClient()来创建和管理Azure虚拟机。以下是一个使用例子,展示了如何通过Python代码创建和管理Azure虚拟机。
首先,我们需要安装所需的Azure SDK。可以使用以下命令在Python环境中安装azure-mgmt和azure-identity模块:
pip install azure-mgmt-compute azure-identity
接下来,我们需要导入所需的模块:
from azure.identity import AzureCliCredential
from azure.mgmt.compute import ComputeManagementClient
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.network import NetworkManagementClient
from azure.mgmt.network.models import NetworkSecurityGroup, SecurityRule
from azure.mgmt.compute.models import NetworkProfile, NetworkInterface, VirtualMachine, VirtualMachineSizeTypes, \
OperatingSystemTypes, OSDisk, ImageReference, StorageAccount, StorageAccountTypes
然后,我们可以通过以下代码连接到Azure资源管理器和计算管理器:
credential = AzureCliCredential() subscription_id = "<your-subscription-id>" resource_client = ResourceManagementClient(credential, subscription_id) compute_client = ComputeManagementClient(credential, subscription_id) network_client = NetworkManagementClient(credential, subscription_id)
接下来,我们可以创建一个资源组:
resource_group_name = "<your-resource-group-name>"
resource_group_location = "<your-resource-group-location>"
resource_group_params = {'location': resource_group_location}
resource_client.resource_groups.create_or_update(resource_group_name, resource_group_params)
然后,我们可以创建一个存储账户用于虚拟机的磁盘:
storage_account_name = "<your-storage-account-name>"
storage_account_params = {
'sku': {'name': 'Standard_LRS'},
'kind': 'Storage',
}
storage_async_operation = resource_client.resources.begin_create_or_update(
resource_group_name,
'Microsoft.Storage',
'',
'storageAccounts',
storage_account_name,
storage_account_params
)
storage_async_operation.wait()
然后,我们可以创建一个虚拟网络和子网:
virtual_network_name = "<your-virtual-network-name>"
subnet_name = "<your-subnet-name>"
network_params = {
'location': resource_group_location,
'address_space': {
'address_prefixes': ['10.0.0.0/16']
}
}
async_network_creation = resource_client.resources.create_or_update(
resource_group_name,
'Microsoft.Network',
'',
'virtualNetworks',
virtual_network_name,
{
'location': resource_group_location,
'properties': {'addressSpace': {'addressPrefixes': ['10.0.0.0/16']}}
}
)
subnet_params = {
'address_prefix': '10.0.0.0/24'
}
async_subnet_creation = resource_client.resources.create_or_update(
resource_group_name,
'Microsoft.Network',
'',
'virtualNetworks/{}/subnets'.format(virtual_network_name),
subnet_name,
{
'properties': {
'addressPrefix': '10.0.0.0/24',
'networkSecurityGroup': {'id': nsg.id}
}
}
)
接下来,我们可以创建一个网络安全组,并为虚拟机设置安全规则:
nsg_name = "<your-nsg-name>"
nsg_params = {
'location': resource_group_location,
'security_rules': [
SecurityRule(
name='AllowIncomingSSH',
protocol=SecurityRuleProtocol.tcp,
source_port_range='*',
destination_port_range='22',
source_address_prefix='*',
destination_address_prefix='*',
access=SecurityRuleAccess.allow,
direction=SecurityRuleDirection.inbound,
priority=1000
),
SecurityRule(
name='AllowIncomingHTTP',
protocol=SecurityRuleProtocol.tcp,
source_port_range='*',
destination_port_range='80',
source_address_prefix='*',
destination_address_prefix='*',
access=SecurityRuleAccess.allow,
direction=SecurityRuleDirection.inbound,
priority=1001
)
]
}
nsg_async_creation = network_client.network_security_groups.begin_create_or_update(
resource_group_name,
nsg_name,
nsg_params
)
nsg = nsg_async_creation.result()
然后,我们可以创建一个网络接口,并将其附加到虚拟网络和网络安全组:
nic_name = "<your-nic-name>"
nic_params = {
'location': resource_group_location,
'ip_configurations': [{
'name': 'ipconfig1',
'subnet': {'id': subnet.id},
'private_ip_allocation_method': 'Dynamic',
'public_ip_address': {'id': public_ip.id}
}],
'network_security_group': {'id': nsg.id}
}
async_nic_creation = network_client.network_interfaces.begin_create_or_update(
resource_group_name,
nic_name,
nic_params
)
nic = async_nic_creation.result()
接下来,我们可以创建一个虚拟机:
vm_name = "<your-vm-name>"
vm_params = {
'location': resource_group_location,
'os_profile': {
'computer_name': vm_name,
'admin_username': 'adminuser',
'admin_password': 'AdminPass123!',
'linux_configuration': {
'disable_password_authentication': True,
'ssh': {
'public_keys': [{
'path': '/home/adminuser/.ssh/authorized_keys',
'key_data': 'ssh-rsa AAAAB[...]'
}]
}
}
},
'hardware_profile': {
'vm_size': 'Standard_DS1_v2'
},
'storage_profile': {
'image_reference': {
'publisher': 'canonical',
'offer': 'ubuntuServer',
'sku': '16.04-LTS',
'version': 'latest'
},
'os_disk': {
'name': 'osdisk',
'create_option': 'fromImage',
'source_image': {
'id': '/subscriptions/{}/resourceGroups/{}/providers/'
'Microsoft.Compute/images/myVMImage'.format(subscription_id, resource_group_name)
},
'caching': 'ReadWrite',
'managed_disk': {
'storage_account_type': 'Standard_LRS'
}
}
},
'network_profile': {
'network_interfaces': [{
'name': nic.name,
'primary': True,
'id': nic.id
}]
}
}
async_vm_creation = compute_client.virtual_machines.begin_create_or_update(
resource_group_name,
vm_name,
vm_params
)
vm = async_vm_creation.result()
通过上述步骤,我们就可以通过Python代码创建和管理Azure虚拟机。对于更复杂的操作,可以参考Azure SDK的文档和示例代码。
