ARM 环境下使用azure powershell 从远程blob中拉去vhd 并创建虚拟机
最近需要从指定公共访问的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 "复制失败或出现错误"
- }
ARM 环境下使用azure powershell 从远程blob中拉去vhd 并创建虚拟机的更多相关文章
- Azure PowerShell 在ARM环境下使用指定 vhd(本地化后的磁盘) 来创建虚拟机
#此脚本用于 Azure 存储账户中已有 vhd 镜像文件创建虚拟机,一般用于做好镜像测试 #----------------------------------------------------- ...
- 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...
- 痞子衡嵌入式:在MDK开发环境下将关键函数重定向到RAM中执行的几种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在MDK开发环境下将关键函数重定向到RAM中执行的几种方法. 这个关键函数重定向到 RAM 中执行系列文章,痞子衡已经写过 <IA ...
- Azure Powershell使用已有特殊化非托管磁盘创建ARM虚拟机
生成已有特殊化非托管磁盘的方法主要有如下两种: 1.使用StorageExplorer存储管理工具,复制特殊化磁盘到一个新的容器下 2.New Portal中删除虚拟机,默认vhd文件会保留在存储账号 ...
- window环境下将solr6.3部署到tomcat中
1.我下载的solr是6.3版本的,需要jdk1.8及以上,tomcat8 JDK1.8的下载地址:http://www.Oracle.com/technetwork/Java/javase/down ...
- 在Core环境下用WebRequest连接上远程的web Api 实现数据的简单CRUD(附Git地址)
本文所有的东西都是在dot Net Core 1.1环境+VS2017保证测试通过. 本文接着上次文章接着写的,不了解上篇文章的可能看着有点吃力.我尽量让大家都能看懂.这是上篇文章的连接http:// ...
- 在Core环境下用WebRequest连接上远程的web Api 实现数据的简单CRUD(续)
这篇博客是上篇博客的续写,上篇博客用的是HttpClient取远程数据,用WebRequest提交,更新,删除数据.上篇本来想全文都用httpClient,可是当时无论如何也实现不了数据的提交,于是换 ...
- arm 环境下安装selenium+chrome
1. 升级软件 apt-get update 2. 安装pip apt-get install python3-pip 3. 安装selenium pip3 install selenium .4. ...
- 在Linux环境下,将Solr部署到tomcat7中,导入Mysql数据库数据, 定时更新索引
什么是solr solr是基于Lucene的全文搜索服务器,对Lucene进行了扩展优化. 准备工作 首先,去下载以下软件包: JDK8:jdk-8u60-linux-x64.tar.gz TOMCA ...
随机推荐
- poj 1325 Machine Schedule 解题报告
题目链接:http://poj.org/problem?id=1325 题目意思:有 k 个作业,机器A有 n 个模式:0 ~ n-1,机器B 有 m 个模式:0~ m-1.每一个作业能运行在 A 的 ...
- java中的泛型类和泛型方法
1.泛型是什么? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类. 可以在集合框架(Collection fram ...
- RESTful 架构与 RESTful 服务
风格 ⇒ 标准 ⇒ 协议 ⇒ 实现 Representational State Transfer,是一种软件架构风格,既然是风格,就非标准或协议,而是定义了一组设计原则和约束条件.具有如下特点: 适 ...
- Mixing Milk
链接 分析:水题,按照价格从小到大排序,在进行贪心即可 /* PROB:milk ID:wanghan LANG:C++ */ #include "iostream" #inclu ...
- python-----实现print不换行
python中print输出是默认换行的,那如何我们不想换行,且需要用多个print函数输出时,就需要改变print默认换行的属性: 例: print('Hello') print('!') 输出结果 ...
- nginx下laravel框架rewrite的设置
nginx下laravel框架rewrite的设置 百牛信息技术bainiu.ltd整理发布于博客园 在nginx的vhost站点配置文件中加入以下内容即可 1 2 3 4 5 6 7 8 9 10 ...
- CoreBluetooth Central模式 Swift版
也是醉了,CB这个API到现在也没有Swift的文档.最新的文档还是3年前还是4年前的OC版的,被雷的外焦里嫩的.自己一点一点写成Swift还各种报错,最坑的是这些错误压根找不到解决方案.索性自己做个 ...
- 20170407-ms
invoke v调用 dismiss v解雇 exclusive adj. 专用的; 高级的; 排外的; 单独的; n. 独家新闻; 专有物; 独家经营的产品(或项目.设计等); 排外者; ex ...
- POJ2365【几何】
因为给出的点已经是顺时针了, 整个长度=相邻点距离+一个圆周长: C++ac代码-G++wa-因为标准不一样.G++用f //#include <bits/stdc++.h> #inclu ...
- CodeForces 687C【DP】
题意: 给你n个数,然后让这些数相加组合,然后在这些组合的数里可以再相加组合搞出给定 k,输出这些组合的数. 思路: DP. //在枚举到第i个coin的时,dp[i][j],i 肯定能被a[i]组合 ...