Azure PowerShell 1.0.0以上版本在中国Azure使用的注意事项

 随着Azure PowerShell 1.0.0+的推出,越来越多的客户开始使用新的版本的Azure PowerShell。此版本的PowerShell最大的改变在于将原先的Switch-AzureMode的指令移除,将原本在其下的指令改以加上Rm的方式存在,如Get-AzureResource改为Get-AzureRmResource。如此一来,在使用之前就不需要先做AzureMode的切换。因此,PowerShell 1.0.0的改变主要影响的是使用Azure资源管理器 (Azure Resource Manager,以下简称ARM)的用户,对于使用Azure服务管理器(Azure Service Manager,以下简称ASM)的用户影响并不大。(关于两者差异可参考下列常见问题) 然而,由于此次版本的改变,许多用户在验证身份时发生了问题: 1. 如同以前版本使用Add-AzureAccount –Environment AzureChinaCloud输入中国Azure的身份。却发现在使用AzureRm相关指令时要求重新以Login-AzureRmAccount输入身份。 2. 当输入Login-AzureRmAccount –Environment AzureChinaCloud时,出现错误。 这是因为此次改版之后将ASR和ARM两者的身份信息及环境参数分开因此需要分别输入并需要对环境参数进行额外操作。   在解决这个错误之前,需要先确认当前Azure PowerShell的版本。 可在控制台中查找相关信息或在PowerShell中执行 Get-Module -ListAvailable | Where-Object { $_.name -like “*Azure*” } 这边需要特别确认AzureRM.Profile的版本,我这边的版本是1.0.1。 首先,建议所有的用户升级到Azure PowerShell 1.0.2以上版本,主要是因为在此版本中提供了相关修正。使用0.9.x版本的用户,也建议进行升级,主要是因为有些新的服务在新的版本下才能使用。(如Redis Cache Premium) 最新的Azure PowerShell安装文件下载地址请到这里查找: https://github.com/Azure/azure-powershell/releases   在此,我假设Azure PowerShell都升级到1.0.2以上版本了。(无法升级的1.0.0及1.0.1用户作法可参考常见问题) 接着,在PowerShell中输入下列指令 Login-AzureRmAccount –EnvironmentName AzureChinaCloud 在Azure PowerShell 1.0.2之后,加入了-EnvironmentName参数,使用该参数就能成功验证中国Azure的账户信息。 接着,就能正常的操作AzureRm相关指令   常见问题…


Azure Automation GA及常见的Runbook修改建议

翻译自:https://azure.microsoft.com/en-us/blog/using-azure-automation-in-azure-everywhere/ 日前Azure Automation正式在中国的Azure上GA了,代表21世纪互联的用户可以使用与全球Azure接轨的自动化服务。相信各位用户也很好奇,究竟在中国Azure使用上有什么不同之处及需要注意的地方,这就是本篇文章要探讨的重点。 首先,全球Azure支持Azure Service Management (portal) 及Azure Resource Manager (portal)两种模式,而在中国Azure目前只有Azure Service Management这种模式,这使得截至目前为止,有部份功能如PowerShell script runbooks 及 Azure Automation DSC在中国Azure还不能使用。 另外需要注意的地方在于全球Azure及中国Azure在许多节点的路径(URIs)上不尽相同,如管理终结点,存储终结点等。因此当许多针对全球设计的Runbook需要迁移时(包含你在网上搜寻到的Runbook或是Automation Gallery上的Runbook),需要特别注意是否使用到这些路径,这也是在一般情况下常见的错误发生原因。 在本篇文章中,将特别强调其中的差异及修正的方法,让你的Runbook能够顺利在全球Azure及中国Azure中使用。 路径(URIs)有什么差异? 下表中将全球Azure及中国Azure相同的服务对应到不同的路径(URIs)进行比较. Service 全球Azure 中国Azure                                      Management API management.core.windows.net management.core.chinacloudapi.cn Storage core.windows.net core.chinacloudapi.cn Active Directory login.windows.net login.chinacloudapi.cn Resource Manager API management.azure.com management.chinacloudapi.cn Gallery gallery.azure.com gallery.chinacloudapi.cn   如何对Azure Automation的Runbook进行修改以指向中国Azure 一般而言,在Azure Automation Runbook中如过需要连结到Azure的资源时,会使用Add-AzureAccount这项PowerShell命令向Azure进行验证及授权,以让PowerShell的操作阶段中,能够使用Azure的订阅。如果你同时拥有多个订阅,你可以使用Select-AzureSubscription这项PowerShell命令来选择你想操作的订阅。如果上述两项命令都成功了,就可以开始使用其他PowerShell命令来完成相关的工作。这个方法被称之为Azure Service Management,在全球Azure及中国Azure中都适用。 然而,当你从Automation…


Azure Batch 云的大计算服务 以Monte-Carlo实验为例

很多使用者在谈到云的时候,都会想到使用云来弥补自己数据中心的不足。有些客户会把自己的活动网站放在云上以应付短期而大量的需求,有些客户使用现成的PaaS服务(如HDInsight)以减少准备及维护的时间。 回想看看,平常工作中是否有下列特性的作业: 此项作业耗费大量时间 此项作业耗费大量处理器的资源 结果取决于运算的效率与品质 在这个时候,Azure Batch很大程度上能够帮助你最佳化运算的效率并且节省你的成本。想像你原本只有一台服务器每周需要花十个小时的时间完成运算取出结果(当然你需要负担一周的成本),现在你只需要十分钟就能运用60台服务器取出结果(你只需要负担大约10服务器/小时的成本,是原本的1/24)。 下面是一些Azure Batch的典型场景: 财务模型 影片与动画制作 基因工程 其他的软件工程运算 在本文中将会介绍Azure Batch的运作原理,并以财务模型为例,介绍如何开发应用在Azure Batch上及相关的注意事项。 首先,Azure Batch的基本原则是平行计算,也就是我把一件大事情拆分成许多小事情,分给不同的服务器去做,所有人完成了,再把结果集成起来。因此,一个重要的先决条件在于应用程序是否能够很好的进行任务拆分,而拆分的结果是否存在critical path(其中的某个任务需要执行特别长的时间),都会影响到最后的表现。 下图首先说明Azure Batch的运作流程:     首先需要上传所需的参考文件或来源文档(如.txt)。 接着上传执行用的应用程序(如.exe及.dll)。 Azure Batch会将这些数据放到资源池中的机器。 接着,Azure Batch将会根据收到的任务,分配给资源池中的机器。 过程中,Azure Batch或监控执行的状态决定是否分配新任务或结束工作。 当所有任务完成时,回传结果。 在此我将会演示一个使用Monte-Carlo的财务模型,如何透过Azure Batch改善其表现。 Monto-Carlo是一种模拟的方式,透过产生大量的乱数样本去对模型进行验证,最终产生一个预测或结果。理论上,越多样本的情况下,产生的预测越准确。在复杂的财务模型中,将耗费很长的时间。 本次验证的范例来自QLNET(https://github.com/amaggiulli/qlnet),一个基于.Net开发的财务模型库,而我基于其中的范例进行修改使其可运用Azure Batch所提供的运算资源。 本地运行结果如下,耗费了约8分钟的时间 检视其原始码,其中可发现一段基于Monto-Carlo的运算,占据大部分所耗费的时间:  这段程序主要做的事情在于透过Monte-Carlo将产生的327600个样本输入模型并进行处理得到最终的值。 这里我们的目的为在Azure Batch上产生20个Node(小型VM 1 core 1.7GB)帮助我们进行运算,拆分步骤如下: 将程序进行拆分:在这边简单的将原先需要的327600个样本透过20个node来产生,也就是每个node各产生16380个样本。 创建Azure Batch资源池: 首先,需要先定义所需要使用的参数(当然你必须在Azure上先创建好Azure Batch及Blob Storage) private const string BatchAccount…


用iPhone和Wirecast在Azure媒体服务上进行直播

本文详细介绍如何使用iPhone和Wirecast在Azure云端进行直播。   1. 首先,您需要在iPhone上安装”Wirecast Cam”。它是AppStore中的一个免费应用。https://itunes.apple.com/us/app/wirecast-cam/id922654616?mt=8 它将在直播中被用做摄像设备。 2. 在电脑上安装Wirecast 6.0以上版本。您可以在这里(http://www.telestream.net/wirecast/overview.htm)下载试用版,或者购买商业版本。如果您使用试用版,在直播的图像中会有”wirecast”字样的水印。 3. 在Azure云端,创建好“频道”。   准备工作已经就绪,下面我们开始配置直播环境。 1. 将iPhone和安装了Wirecast 6.0的电脑放在一个WIFI环境中。打开iPhone的Wirecast Cam, 点击“设置”,得到IP地址。 2. 在电脑的Wirecast上添加Video Source。点击”Source” -> “Add Wirecast Cam”. 在打开的窗口中,输入iPhone上显示的IP地址。 注意:这时点击”Connect”不会有任何反应。你需要首先点击iPhone上的红色录制按钮,然后再在电脑上点击”connect”。如下图所示: 这时你可以看到Wirecast和手机的录制屏幕一致。 3. 这时,Wirecast会把iPhone作为视频和音频的输入设备。有时,我们需要配置其他的音频源。例如,在直播现场活动的时候,我们需要把演讲者的声音作为唯一的音频源,而不希望把现场的嘈杂传递给收看者。这时,我们可以在Wirecast中添加新的音频设备。 这时,我们的直播已经配置完成。可以通过Azure管理门户来preview直播视频了。 对于互联网用户,他们将使用Azure管理门户提供的“发布URL”进行观看。 用户可以使用任何支持Smooth Streaming或HLS或DASH的播放器收看。Azure提供了一个基于HTML5实现的Azure Media Player (http://amsplayer.azurewebsites.net/azuremediaplayer.html ),用户只需将发布URL输入,即可在浏览器中观看直播。


连接Windows Azure Pack和Windows Azure的虚拟网络

Windows Azure Pack和Windows Azure都使用IPSec S2S VPN来打通企业内网和云中的虚拟网络。那么问题是,作为租户如果在不同的云中都部署有服务,能否将两朵云打通呢?用技术的方式来表达就是,有没有可能将服务提供商基于Windows Azure Pack构建的云中的租户虚拟网络同Windows Azure中租户的虚拟网络打通呢? 答案是肯定的。下面就是一个例子。 首先当然我们在Windows Azure和Windows Azure Pack中分别创建一个虚拟网络。(这里的Windows Azure Pack是我自己的实验环境。)   接着我在Windows Azure Pack的虚拟网络(LARRYZHHNV1)中创建一个S2S VPN。 因为此时我们还没有在Windows Azure的虚拟网络中创建网关,所以我们无从知道对端VPN网关的IP地址和密钥。但这没有关系,我们可以稍后再更新那部分信息。 然后我在Windows Azure中创建对应Windows Azure Pack环境的本地网络,并创建虚拟网络(LARRYZHAVN)中创建网关。这样我们就有了Windows Azure这边网关的IP地址和密钥。在我们将这两个信息更新到Windows Azure Pack的S2S VPN设置中后,可以看到Windows Azure的S2S VPN状态变为了连接。 检查Windows Azure Pack环境中Windows Server Gateway (WSG)的VPN状态,它也显示已连接。 最后在从Azure管理门户上断开VPN并重新连接一次,现在可以看到两个不同云服务商的虚拟网络给打通了。


提交HDInsight Pig作业

Pig是Hadoop常用的一个模块,Azure提供了使用PowerShell提交Pig作业的方式,当Pig Latin的脚本较为短小时,可使用New-AzureHDInsightPigJobDefinition的-Query直接指定脚本内容,示例如下: $clusterName = “HDIDemo” $QueryString = “intxt1 = load ‘wasb://hdirawdata@teststorage.blob.core.chinacloudapi.cn/userbehavior.log’ ;” + “store intxt1 into ‘wasb:///home/mytest1’ ;” $pigJobDefinition = New-AzureHDInsightPigJobDefinition -Query $QueryString $pigJob = Start-AzureHDInsightJob -Cluster $clusterName -JobDefinition $pigJobDefinition Wait-AzureHDInsightJob -Job $pigJob -WaitTimeoutInSeconds 3600 Write-Host “Display the standard output …” -ForegroundColor Green Get-AzureHDInsightJobOutput -Cluster $clusterName -JobId $pigJob.JobId -StandardError 当Pig Latin的脚本过长时,则会遇到”The input line is too…


如何将虚拟机迁移至新的存储账户

Contributors: Blair Chen, Sun Wei, Liu Qing 我们在使用Azure的过程中,有时会需要把Azure虚拟机的相关VHD文件从现有的存储账户迁移到其它存储账户。比如说,当现有的存储账户下面已经存在超过了40个活跃使用的VHD文件,而由于每个VHD文件作为一个Azure Blob对象都可以产生上至每秒500个请求,导致单个存储账户的每秒20000个请求的上限可能会被超出,从而触发限制的机制。在这种情况下,建议需要将这个存储账户下的某些虚机尽快迁移至其它的存储账户,以免触发限制机制。 在讨论如何把虚拟机的VHD从一个存储账户迁移到另外一个存储账户之前,我们先来回顾一下Azure虚拟机的一些基本概念。首先,对于Azure IaaS的虚拟机在设计上是把计算和存储是分离开的。在创建虚拟机的时候,所有持久VHD(系统盘,数据盘VHD文件)都是创建在Azure存储里,而不是直接创建在虚机所处于的物理节点上。虚拟机启动的时候,会直接从存储账户里的VHD文件启动引导操作系统,存储账户中VHD文件本质上是一个blob文件。其次,创建VM的时候,Azure只允许把VHD创建在和虚拟机在同一个区域(比如北京或者上海的数据中心)的存储里,这主要是为了保证计算节点和存储之间的网络延迟尽可能小,从而保证虚拟机的IO性能。 迁移之前的准备计划 如果现有环境已经是生产环境,那么在迁移之前需要有周全的准备和计划,以确保最小化业务系统的中断时间。下面列出了在迁移之前需要检查以及准备的一些事项。 1. 梳理虚机迁移的源存储账户和目标存储账户的对应列表。 首先需要基于上述限制指标梳理一个详细的迁移列表,包括哪些虚机需要迁移,每台虚机迁移的源存储账户以及目标存储账户。如果目标存储账户还不存在,那么可以把目标存储账户先创建好备用。 2. 确认现有的部署架构是否需要虚机的内部IP地址需要保持不变。 由于在虚机的迁移过程中会删除现有的虚机,然后基于迁移至目标存储账户的VHD文件重新创建虚机,在这个过程中虚机的内部IP地址有可能会改变。所以需要确认现有的部署架构中是否对现有虚机的IP地址有任何依赖关系,比如是否使用了内部IP地址进行一些应用层的配置,IP地址的改变是否会影响应用的某些连接等等。 如果需要内部IP地址保持不变,可以在基于迁移后的VHD文件创建虚机时使用静态IP地址来确保虚机能够沿用之前的IP地址。 3. 确认现有的部署架构是否需要虚机的公有虚拟IP(VIP)地址保持不变。 如果需要迁移的虚机是其所属的云服务下面的唯一虚机,那么迁移的过程可能会导致这台虚机及其所属的云服务的公有虚拟IP地址变化。主要因为在这台虚机被删除掉后并且还未被重新创建之前这个时间段内,其所属云服务下面没有挂载任何虚机,这个状态下云服务的VIP资源将会被释放。而当新的虚机在这个云服务下重新被创建后,新的VIP则会分配给云服务。 如果确认需要保持现有的VIP不变,比如说某些客户端不是用DNS域名而是使用IP地址来指向Azure中的云服务,那么可以在迁移中增加一个步骤,比如在迁移这类虚机之前先在其所属的云服务下面创建一个A0型号的虚机。这样来确保在整个迁移过程中这个云服务下面始终至少有一台虚机,这样VIP资源就不会被释放,公有IP地址也就不会改变。在迁移完成后即可删除这个临时的A0虚机。 4. 检查并导出现有虚机的所有属性及配置信息。 通常虚机的所有属性及配置在迁移前后都是需要保持不变的,比如虚机名称、大小型号、开放的端口、所属的云服务、地缘组、虚拟网络等。所以建议导出虚机、虚拟网络的所有属性及配置信息至XML文件以保存记录。  5. 准备回滚计划及脚本。 建议要准备回滚计划,以备万一迁移失败或者时间过长无法在运维窗口时间内完成时,能够快速回滚至原有状态。迁移之前应该准备好回滚的脚本,确保虚机能够随时恢复至原有状态,避免出现预期外的系统中断。 6. 测试存储账户之间的VHD拷贝速度。 在存储账户之间拷贝文件是一个异步的操作,没有速度的SLA。但通常情况如果源和目标存储账户属于同一个物理集群的话,速度一般还是比较快的。根据经验,通常可以在10秒到3分钟之间完成一个100GB的VHD文件拷贝。 但是,如果源和目标存储账户不在同一个物理集群中,那个拷贝文件就可能会比较慢,这就需要运维窗口有足够的时间来完成迁移。同时,也可以用以下方法来控制迁移的时间长度。 a) 如果源存储账户属于一个地缘组,那么可以把目标存储账户也创建在同一个地缘组当中。这样可以确保源和目标存储账户属于同一个集群,从而避免跨集群拷贝文件可能会慢的问题。b) 也可以进行应用层面的迁移,比如将应用以及相关的数据从现有的虚机中迁移出来,重新部署到新的虚机中。  7. 在生产环境执行迁移之前,先用一台测试虚机测试迁移脚本。 在迁移任何生产环境的虚机之前,建议使用测试虚机对测试脚本进行完整的测试。 8. 准备一台Azure虚机用来执行迁移脚本,避免执行脚本环境的网络问题。 有时用户自己的本地网络可能会有各种限制以及不稳定的问题,这可能会导致迁移脚本在执行过程中由于网络的临时不稳定或丢包造成迁移的中断,造成不必要的麻烦。所以,建议准备一台Azure虚机配置好相关的powershell环境,用来执行迁移脚本。 9. 检查确保所有虚机中的应用、数据库以及用户数据都已经做好备份。   虚机迁移步骤 如果需要迁移的虚机是生产环境,建议按照顺序逐一迁移虚机,确保一台虚机迁移成功没有问题后再迁移下一台。如果出现问题或失败,可以立即执行回滚脚本将虚机恢复至其原有状态,最小化系统中断时间。 下面是一个单台虚机的迁移步骤说明供参考。注意由于每个用户的环境和需求不同,建议可以根据具体情况参考下述步骤进行补充和调整。 1. 导出虚拟机机配置文件 迁移的第一个准备工作是把虚拟机的配置文件导出,这主要是为了后面能用同样的配置信息把虚拟机重新创建出来。下面是导出虚拟机配置文件的powershell代码: $sourceVM = Get-AzureVM –ServiceName $cloudServiceName –Name $vmName $sourceVM | Export-AzureVM -Path $vmConfigurationPath 2. 远程登陆进入虚机OS,…


如何在CentOS 5.x 中安装Windows Azure Linux Agent (WALA)

在今天的这一个章节中,我们主要讨论在CentOs 5.x 中如何安装Windows Azure Linux Agent 2.11 (简称WALA)。如果你是需要对CentOS 6.x 发行版本进行Windows Azure 基本镜像进行配置,请参考Azure 中文官网 “创建并上传包含 Linux 操作系统的虚拟硬盘” 对应6.x 的相关步骤,在CentOS 5.x中进行Windows Azure Linux Agent 主要步骤和区别如下, 需要手工安装Python 2.6 以上版本 需要手工安装python-pyasn1 需要修改resource disk 类型为ext3 需要手工安装WALA (waagent -install) 准备 CentOS 5.x 客户虚拟机,您必须在本地有HyperV 功能的操作系统中完成特定的配置步骤才能使虚拟机在 Azure 中运行,如Windows 8.0 or Windows 2008 R2 或以上版本的Windows 操作系统 在 Hyper-V 管理器中,选择已经通过ISO镜像安装完成的虚拟机 单击“连接”以打开虚拟机窗口。使用root账号登录系统 通过运行以下命令卸载 NetworkManager # yum remove…


如何在Azure Websites中配置PHP从而改变系统默认时区

Azure Website为我们提供了可高度扩展的网站部署平台。由于Website是PaaS(平台即服务)层的服务,当用户把原有的PHP网站迁移到Azure Websites时,有一些配置方法与传统的方法不同。例如,在Azure Websites中,我们访问不到运行PHP引擎的服务器,也不能访问php.ini文件。 Azure websites提供的运行环境中,默认时区是UTC时间。对于中国区域的客户,我们往往希望通过date对象,直接得到GMT+8的时区。这时,我们需要在PHP应用的根目录下,创建.user.ini文件,并在其中指明: date.timezone=Asia/Chongqing 注意:添加.user.ini文件后,要重启Azure Websites。 这样,如果我们的PHP源代码如下: <html><head> <title>PHP Demo page</title></head><body>    <?php echo date(“r”);    ?></body></html> 上面的代码会得到下面的页面输出: 另: 一般来说,php.ini文件中的配置信息,只要不是System级别的配置项,我们都可以通过.user.ini文件来在应用程序的作用域里修改。这里(http://php.net/manual/en/ini.list.php) 是php.ini的配置项列表和作用级别。