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

前期准备:

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

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

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

脚本简介:

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

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

  1. #源存储blob信息- VHD所在的存储地址
  2. $sourceStorageAccountName = "{存储账户名称}" #存储账户名称
  3. $sourceContainerName = "{容器名称}" #容器名称
  4. $fileName="xxxx.vhd" #容器中文件的名称及扩张名
  5.  
  6. #目标存储信息---- 从isv复制到经典存储中速度快,建议配置成经典的存储地址
  7. $destStorageAccountName ="{目标存储账户}" #目标存储账户名称--要拷贝到自己账户的存储名称
  8. $destContainerName ="{容器名称}" #VHD所在容器名称- 要小写字母
  9. $destStorageAccountKey ="{存储访问key}"#key
  10. #要创建资源组的名称
  11. $resourceGroupName="{资源组名称}"
  12. #虚拟机信息
  13. $vmname = "RapidREVMA" #虚拟机名称-虚拟机磁盘也会使用此名称
  14. $vmUser="azureuser"
  15. $vmSize="Standard_A8_v2" #虚拟机大小:https://docs.microsoft.com/zh-cn/azure/cloud-services/cloud-services-sizes-specs#av2-series
  16. $osType=0 #0-windows 1-Linux
  17. #公共配置信息-默认即可,不用配置
  18. $securePassword = ConvertTo-SecureString '{订阅登录密码}' -AsPlainText -Force
  19. $credlogin = New-Object System.Management.Automation.PSCredential ("xxxxxx@xxxxxxx.partner.onmschina.cn", $securePassword) #将xxxx更换为自己账户的信息即可
  20. $endpoint="core.chinacloudapi.cn"
  21. $fileAbsoluteUri="https://"+$sourceStorageAccountName+".blob."+$endpoint+"/"+$sourceContainerName+"/"+$fileName
  22. $locationStr="China North"
  23. $osdiskurl = "https://"+$destStorageAccountName+".blob."+$endpoint+"/"+$destContainerName+"/" #拷贝后的vhd所在存储账户url地址(不包含文件名)
  24. #开始复制
  25. $sourceContext = New-AzureStorageContext -StorageAccountName $sourceStorageAccountName -Endpoint $endpoint -Anonymous;
  26. $destContext = New-AzureStorageContext -StorageAccountName $destStorageAccountName -StorageAccountKey $destStorageAccountKey -Endpoint $endpoint
  27. $getdestContainerName=Get-AzureStorageContainer -Context $destContext -ErrorAction Stop | where-object {$_.Name -eq $destContainerName}
  28. if(!$getdestContainerName)
  29. {
  30. New-AzureStorageContainer -Name $destContainerName -Context $destContext
  31. }
  32. Start-AzureStorageBlobCopy -AbsoluteUri $fileAbsoluteUri -DestContext $destContext -DestContainer $destContainerName -DestBlob $fileName
  33. #Checking Status of Blob Copy -- This can be commented out if no confirmation is needed
  34. $copyStatus=Get-AzureStorageBlobCopyState -Blob $fileName -Context $destContext -Container $destContainerName -WaitForComplete
  35. if($copyStatus.Status -eq "Success")
  36. {
  37. Write-Host "copy finsh and start create vm"
  38. #登录并创建指定资源组
  39. Login-AzureRmAccount -EnvironmentName AzureChinaCloud -Credential $credlogin
  40. New-AzureRmResourceGroup -Name $resourceGroupName -Location $locationStr
  41. # Create a subnet configuration
  42. $subnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name mySubnet -AddressPrefix 192.168.1.0/24
  43. # Create a virtual network
  44. $vnet = New-AzureRmVirtualNetwork -ResourceGroupName $resourceGroupName -Location $locationStr -Name MyVNet -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig -Force
  45. #创建一个公网IP地址:
  46. $publicIP=New-AzureRmPublicIpAddress -Name createstfromPIP -ResourceGroupName $resourceGroupName -Location $locationStr -AllocationMethod Dynamic -IpAddressVersion IPv4 -Force #新建
  47. Get-AzureRmPublicIpAddress -Name createstfromPIP -ResourceGroupName $resourceGroupName #查看刚刚创建的公网IP信息
  48. #创建可用性集:
  49. #$Availabilityset = New-AzureRmAvailabilitySet -Name cranetestAV -ResourceGroupName crane -Location $locationStr
  50. #创建网卡:
  51. $nic=New-AzureRmNetworkInterface -Name VHDNIC -ResourceGroupName $resourceGroupName -Location $locationStr -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $publicIP.Id -Force
  52. #配置要使用的存储账号以及系统盘名称:
  53. #$storage = Get-AzureRmStorageAccount -Name cranenorthtest -ResourceGroupName $resourceGroupName
  54. #$vmname = "whxCreateVmTest"
  55. $osdiskname = $vmname + "_OSDisk"
  56. #$osdiskurl = "https://ygwhxteststg.blob.core.chinacloudapi.cn/whx-vhd/community-15186-37f6baac-720f-4e49-b2f7-9c39f44a82f9-1.vhd"
  57. $vmOsDisk =$osdiskurl+$osdiskname+".vhd"
  58. $cred = New-Object System.Management.Automation.PSCredential ($vmUser, $securePassword)
  59. $osdiskAbsoluteUri=$osdiskurl+$fileName
  60. #生成虚拟机的配置,将新建的虚拟机放在虚拟网络:
  61. if($osType.Equals(1))#linux创建
  62. {
  63. $vmconfig = New-AzureRmVMConfig -VMName $vmname -VMSize $vmSize |`
  64. Set-AzureRmVMOperatingSystem -Linux -ComputerName $vmname -Credential $cred| `
  65. Set-AzureRmVMOSDisk -Name $osdiskname -VhdUri $vmOsDisk -SourceImageUri $osdiskAbsoluteUri -CreateOption FromImage -Linux | `
  66. Add-AzureRmVMNetworkInterface -Id $NIC.Id
  67. }
  68. if($osType.Equals(0)) #windows创建
  69. {
  70. $vmconfig = New-AzureRmVMConfig -VMName $vmname -VMSize $vmSize |`
  71. Set-AzureRmVMOperatingSystem -Windows -ComputerName $vmname -Credential $cred| `
  72. #-ProvisionVMAgent -EnableAutoUpdate | `
  73. Set-AzureRmVMOSDisk -Name $osdiskname -VhdUri $vmOsDisk -SourceImageUri $osdiskAbsoluteUri -Caching "ReadWrite" -CreateOption FromImage -Windows | `
  74. Add-AzureRmVMNetworkInterface -Id $nic.Id -Primary
  75. }
  76. #创建虚拟机:
  77. New-AzureRmVM -ResourceGroupName $resourceGroupName -Location $locationStr -VM $vmconfig
  78. $vmList = Get-AzureRmVM -ResourceGroupName $resourceGroupName
  79. $vmList.Name
  80. }
  81. else
  82. {
  83. Write-Host "复制失败或出现错误"
  84. }

ARM 环境下使用azure powershell 从远程blob中拉去vhd 并创建虚拟机的更多相关文章

  1. Azure PowerShell 在ARM环境下使用指定 vhd(本地化后的磁盘) 来创建虚拟机

    #此脚本用于 Azure 存储账户中已有 vhd 镜像文件创建虚拟机,一般用于做好镜像测试 #----------------------------------------------------- ...

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

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

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

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

  4. Azure Powershell使用已有特殊化非托管磁盘创建ARM虚拟机

    生成已有特殊化非托管磁盘的方法主要有如下两种: 1.使用StorageExplorer存储管理工具,复制特殊化磁盘到一个新的容器下 2.New Portal中删除虚拟机,默认vhd文件会保留在存储账号 ...

  5. window环境下将solr6.3部署到tomcat中

    1.我下载的solr是6.3版本的,需要jdk1.8及以上,tomcat8 JDK1.8的下载地址:http://www.Oracle.com/technetwork/Java/javase/down ...

  6. 在Core环境下用WebRequest连接上远程的web Api 实现数据的简单CRUD(附Git地址)

    本文所有的东西都是在dot Net Core 1.1环境+VS2017保证测试通过. 本文接着上次文章接着写的,不了解上篇文章的可能看着有点吃力.我尽量让大家都能看懂.这是上篇文章的连接http:// ...

  7. 在Core环境下用WebRequest连接上远程的web Api 实现数据的简单CRUD(续)

    这篇博客是上篇博客的续写,上篇博客用的是HttpClient取远程数据,用WebRequest提交,更新,删除数据.上篇本来想全文都用httpClient,可是当时无论如何也实现不了数据的提交,于是换 ...

  8. arm 环境下安装selenium+chrome

    1.  升级软件 apt-get update 2. 安装pip apt-get install python3-pip 3. 安装selenium pip3 install selenium .4. ...

  9. 在Linux环境下,将Solr部署到tomcat7中,导入Mysql数据库数据, 定时更新索引

    什么是solr solr是基于Lucene的全文搜索服务器,对Lucene进行了扩展优化. 准备工作 首先,去下载以下软件包: JDK8:jdk-8u60-linux-x64.tar.gz TOMCA ...

随机推荐

  1. poj 1325 Machine Schedule 解题报告

    题目链接:http://poj.org/problem?id=1325 题目意思:有 k 个作业,机器A有 n 个模式:0 ~ n-1,机器B 有 m 个模式:0~ m-1.每一个作业能运行在 A 的 ...

  2. java中的泛型类和泛型方法

    1.泛型是什么? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类. 可以在集合框架(Collection fram ...

  3. RESTful 架构与 RESTful 服务

    风格 ⇒ 标准 ⇒ 协议 ⇒ 实现 Representational State Transfer,是一种软件架构风格,既然是风格,就非标准或协议,而是定义了一组设计原则和约束条件.具有如下特点: 适 ...

  4. Mixing Milk

    链接 分析:水题,按照价格从小到大排序,在进行贪心即可 /* PROB:milk ID:wanghan LANG:C++ */ #include "iostream" #inclu ...

  5. python-----实现print不换行

    python中print输出是默认换行的,那如何我们不想换行,且需要用多个print函数输出时,就需要改变print默认换行的属性: 例: print('Hello') print('!') 输出结果 ...

  6. nginx下laravel框架rewrite的设置

    nginx下laravel框架rewrite的设置 百牛信息技术bainiu.ltd整理发布于博客园 在nginx的vhost站点配置文件中加入以下内容即可 1 2 3 4 5 6 7 8 9 10 ...

  7. CoreBluetooth Central模式 Swift版

    也是醉了,CB这个API到现在也没有Swift的文档.最新的文档还是3年前还是4年前的OC版的,被雷的外焦里嫩的.自己一点一点写成Swift还各种报错,最坑的是这些错误压根找不到解决方案.索性自己做个 ...

  8. 20170407-ms

    invoke v调用 dismiss v解雇   exclusive adj. 专用的; 高级的; 排外的; 单独的;  n. 独家新闻; 专有物; 独家经营的产品(或项目.设计等); 排外者; ex ...

  9. POJ2365【几何】

    因为给出的点已经是顺时针了, 整个长度=相邻点距离+一个圆周长: C++ac代码-G++wa-因为标准不一样.G++用f //#include <bits/stdc++.h> #inclu ...

  10. CodeForces 687C【DP】

    题意: 给你n个数,然后让这些数相加组合,然后在这些组合的数里可以再相加组合搞出给定 k,输出这些组合的数. 思路: DP. //在枚举到第i个coin的时,dp[i][j],i 肯定能被a[i]组合 ...