最近需要从指定公共访问的blob中复制vhd到自己的订阅存储账户,并使用vhd创建AZURE ARM虚拟机(非经典版),而且在portal.azure.cn中无法实现虚拟机映像创建等功能,于是自己使用azure powershell写了一个简单的脚本,

前期准备:

1、在ARM环境下,创建一个普通存储(切记一定要是普通存储,高级存储无法创建虚拟机),不要创建成经典版

2、将新建的普通存储名称和key填入到以下脚本中

备注:创建虚拟机时,脚本会自动将vhd复制一份作为系统盘,切记,指定系统盘的位置要和拷贝后vhd放于同一个blob中,不然会报错误

脚本简介:

运行脚本会自动从源blob中(本脚本是匿名方式拷贝,所以对方存储必须为公共存储)拷贝vhd文件到指定订阅的存储账户(必须有key),拷贝成功后开始创建ARM 虚拟机,此脚本适合单独创建虚拟机

创建说明:拷贝vhd文件到普通存储()

#源存储blob信息- VHD所在的存储地址
$sourceStorageAccountName = "{存储账户名称}" #存储账户名称
$sourceContainerName = "{容器名称}" #容器名称
$fileName="xxxx.vhd" #容器中文件的名称及扩张名

#目标存储信息---- 从isv复制到经典存储中速度快,建议配置成经典的存储地址
$destStorageAccountName ="{目标存储账户}" #目标存储账户名称--要拷贝到自己账户的存储名称
$destContainerName ="{容器名称}" #VHD所在容器名称- 要小写字母
$destStorageAccountKey ="{存储访问key}"#key

#要创建资源组的名称
$resourceGroupName="{资源组名称}"

#虚拟机信息
$vmname = "RapidREVMA" #虚拟机名称-虚拟机磁盘也会使用此名称
$vmUser="azureuser"
$vmSize="Standard_A8_v2" #虚拟机大小:https://docs.microsoft.com/zh-cn/azure/cloud-services/cloud-services-sizes-specs#av2-series
$osType=0 #0-windows 1-Linux

#公共配置信息-默认即可,不用配置
$securePassword = ConvertTo-SecureString '{订阅登录密码}' -AsPlainText -Force
$credlogin = New-Object System.Management.Automation.PSCredential ("xxxxxx@xxxxxxx.partner.onmschina.cn", $securePassword) #将xxxx更换为自己账户的信息即可
$endpoint="core.chinacloudapi.cn"
$fileAbsoluteUri="https://"+$sourceStorageAccountName+".blob."+$endpoint+"/"+$sourceContainerName+"/"+$fileName
$locationStr="China North"
$osdiskurl = "https://"+$destStorageAccountName+".blob."+$endpoint+"/"+$destContainerName+"/" #拷贝后的vhd所在存储账户url地址(不包含文件名)

#开始复制
$sourceContext = New-AzureStorageContext -StorageAccountName $sourceStorageAccountName -Endpoint $endpoint -Anonymous;
$destContext = New-AzureStorageContext -StorageAccountName $destStorageAccountName -StorageAccountKey $destStorageAccountKey -Endpoint $endpoint
$getdestContainerName=Get-AzureStorageContainer -Context $destContext -ErrorAction Stop | where-object {$_.Name -eq $destContainerName}

if(!$getdestContainerName)
{
New-AzureStorageContainer -Name $destContainerName -Context $destContext
}

Start-AzureStorageBlobCopy -AbsoluteUri $fileAbsoluteUri -DestContext $destContext -DestContainer $destContainerName -DestBlob $fileName

#Checking Status of Blob Copy -- This can be commented out if no confirmation is needed
$copyStatus=Get-AzureStorageBlobCopyState -Blob $fileName -Context $destContext -Container $destContainerName -WaitForComplete

if($copyStatus.Status -eq "Success")
{
Write-Host "copy finsh and start create vm"

#登录并创建指定资源组
Login-AzureRmAccount -EnvironmentName AzureChinaCloud -Credential $credlogin
New-AzureRmResourceGroup -Name $resourceGroupName -Location $locationStr

# Create a subnet configuration
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name mySubnet -AddressPrefix 192.168.1.0/24

# Create a virtual network
$vnet = New-AzureRmVirtualNetwork -ResourceGroupName $resourceGroupName -Location $locationStr -Name MyVNet -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig -Force

#创建一个公网IP地址:
$publicIP=New-AzureRmPublicIpAddress -Name createstfromPIP -ResourceGroupName $resourceGroupName -Location $locationStr -AllocationMethod Dynamic -IpAddressVersion IPv4 -Force #新建
Get-AzureRmPublicIpAddress -Name createstfromPIP -ResourceGroupName $resourceGroupName #查看刚刚创建的公网IP信息

#创建可用性集:
#$Availabilityset = New-AzureRmAvailabilitySet -Name cranetestAV -ResourceGroupName crane -Location $locationStr

#创建网卡:
$nic=New-AzureRmNetworkInterface -Name VHDNIC -ResourceGroupName $resourceGroupName -Location $locationStr -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $publicIP.Id -Force

#配置要使用的存储账号以及系统盘名称:
#$storage = Get-AzureRmStorageAccount -Name cranenorthtest -ResourceGroupName $resourceGroupName
#$vmname = "whxCreateVmTest"
$osdiskname = $vmname + "_OSDisk"
#$osdiskurl = "https://ygwhxteststg.blob.core.chinacloudapi.cn/whx-vhd/community-15186-37f6baac-720f-4e49-b2f7-9c39f44a82f9-1.vhd"
$vmOsDisk =$osdiskurl+$osdiskname+".vhd"
$cred = New-Object System.Management.Automation.PSCredential ($vmUser, $securePassword)
$osdiskAbsoluteUri=$osdiskurl+$fileName

#生成虚拟机的配置,将新建的虚拟机放在虚拟网络:
if($osType.Equals(1))#linux创建
{
$vmconfig = New-AzureRmVMConfig -VMName $vmname -VMSize $vmSize |`
Set-AzureRmVMOperatingSystem -Linux -ComputerName $vmname -Credential $cred| `
Set-AzureRmVMOSDisk -Name $osdiskname -VhdUri $vmOsDisk -SourceImageUri $osdiskAbsoluteUri -CreateOption FromImage -Linux | `
Add-AzureRmVMNetworkInterface -Id $NIC.Id
}
if($osType.Equals(0)) #windows创建
{
$vmconfig = New-AzureRmVMConfig -VMName $vmname -VMSize $vmSize |`
Set-AzureRmVMOperatingSystem -Windows -ComputerName $vmname -Credential $cred| `
#-ProvisionVMAgent -EnableAutoUpdate | `
Set-AzureRmVMOSDisk -Name $osdiskname -VhdUri $vmOsDisk -SourceImageUri $osdiskAbsoluteUri -Caching "ReadWrite" -CreateOption FromImage -Windows | `
Add-AzureRmVMNetworkInterface -Id $nic.Id -Primary
}

#创建虚拟机:
New-AzureRmVM -ResourceGroupName $resourceGroupName -Location $locationStr -VM $vmconfig

$vmList = Get-AzureRmVM -ResourceGroupName $resourceGroupName
$vmList.Name
}
else
{
Write-Host "复制失败或出现错误"
}

转载于:https://www.cnblogs.com/wanghaixing/p/7762810.html

ARM 环境下使用azure powershell 从远程blob中拉去vhd 并创建虚拟机相关推荐

  1. 单片机小精灵t2_搭建S5P4418 ARM环境下 GPU OPENGL ES开发环境(适用 NANOPI2,3,M2,M3,T2,T3)...

    本帖最后由 3guoyangyang7 于 2017-8-20 22:38 编辑 先说一下背景,这几天做一个摄像头处理的qt项目,摄像头的像素是1280*720的,25fps,用qt的painter重 ...

  2. 痞子衡嵌入式:在MDK开发环境下将关键函数重定向到RAM中执行的几种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在MDK开发环境下将关键函数重定向到RAM中执行的几种方法. 这个关键函数重定向到 RAM 中执行系列文章,痞子衡已经写过 <IA ...

  3. 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...

  4. 【Docker】windows环境下的docker如何开放远程2375端口

    前言 截止至文章发表时,DockerDesktop的最新版本为v4.11.1.本文以该版本为准. Docker在windows运行在Hyper-v的虚拟机中或者wsl windows子系统中. 原因说 ...

  5. linux环境下python编程指南,在Linux系统中搭建Python编程环境

    Linux系统是为编程而设计的,因此在大多数Linux计算机中都默认安装了Python. 1. 检查Python版本 在系统中运行应用程序Terminal(如果是Ubuntu,可按Ctrl+Alt+T ...

  6. linux下的定时工具有哪些,Linux中使用crond工具创建定时任务的方法

    前言 crond是一个linux下的定时执行工具(相当于windows下的scheduled task),可以在无需人工干预的情况下定时地运行任务.crond工具提供crontab命令来设置定时任务, ...

  7. postgresql 远程用户_liunx环境下安装PostgresSQL,开启远程连接

    准备工作 # 检查PostgreSQL 是否已经安装 [root@localhost ~] rpm -qa | grep postgres # 检查PostgreSQL 安装位置 [root@loca ...

  8. ARM环境下centos 7源码编译安装ceph-v14.0.1教程(待修改)

    一.环境介绍 IP hostname IOS   10.2.152.131 node-01 centos  7.4 admin 10.2.152.132 node-02 centos  7.4 nod ...

  9. php 配置远程调试,PHP Linux 环境下搭建 XDEBUG并配置远程调试

    在网站 https://xdebug.org/download.php 找到对应PHP版本的XDEBUG下载,下载时选择source版本 image 获取下载地址## 下载打包的源码 wget htt ...

最新文章

  1. C++中stl使用过程中的一些tips
  2. 刚登录,有点感觉就想写下来
  3. Ubuntu文本编辑(vi和nano)命令
  4. java游戏开发基础Swing之JRadioButton
  5. (WebKit) ViewPort + Backing Store + Page Content
  6. OAauth2.0包括以下角
  7. 代码大全和新月神话_神话般的代码
  8. Java Map 怎样实现Key 的唯一性?
  9. InterlockedIncrement
  10. Linux的最大文件限制数ulimit
  11. 进程间传递文件描述符--sendmsg,recvmsg(可用)
  12. Mac中必不可少的软件——Tuxera NTFS
  13. 【配置教程】FDDB生成ROC曲线
  14. 软件测试之黑盒、白盒的测试方法?
  15. 阿里云Centos镜像虚拟机安装方法
  16. 快捷下载中国原创音乐基地音乐(包括金豆和无法下载音乐)
  17. 适用于 Windows 10 的 Neat Download Manager 下载管理器将加快你的下载速度
  18. unity3d 人物对话_unity3d实现插件快速开发对话系统
  19. 嵊州D3T1 山魔 烙饼问题
  20. SQL,三种排名函数,用作排名使用

热门文章

  1. Shell 十三问 的学习记录
  2. 为office添加繁简体转换
  3. python中执行linux命令(调用linux命令)_Python调用Linux bash命令
  4. 广度优先搜索(BFS)模板
  5. oracle 默认表空间 10g,Oracle10g 表空间管理
  6. Python培训就业方向有哪些
  7. 参加web前端培训要学哪些知识
  8. linux系统中find怎么用,linux系统中‘find’的详细用法
  9. java web 怎么用solr_使用web过滤器增加solr后台登录验证
  10. 浅谈同一家公司多个系统,共用登录用户名和密码