精打细算使用云服务: Windows Azure 管理库和.Net实现自动化

[原文发表地址] Penny Pinching in the Cloud: Automating everything with the Windows Azure Management Libraries and .NET

[原文发表时间] 2013-12 –16

尽管我为Azure和ASP.NET团队工作,我的Azure帐户也得我自己购买。坦白地说,如果我获得免费的云时间,我不仅可能会滥用它,而且我可能也不会按照它的使用方式使用它!依我看来,一个好的云计算是一种价格实惠的云。就像我所用的CDNs, 当我需要它们工作的时候, 拥有高速缓存, 并专注于廉价资源和为我工作的计算机之前的平衡。当我不需要的时候,它们就会休眠(不花费我的金钱)。

像是网站的自动缩放功能,例如: 基于CPU或者时间表,但有时从大的虚拟机上退出使我陷入困境。我使用命令行管理我大部分的Azure资产, 所以我可以从“azure 虚拟机列表”中看到哪些在运行,我会看到以下内容

 C:\Users\scottha                                                                                      
 λ azure vm list                                                                                       
 info:    Executing command vm list                                                                    
 + Getting virtual machines                                                                            
 data:    Name                  Status              Location  DNS Name                                 
 data:    --------------------  ------------------  --------  -------------------------------          
 data:    VSinTheSky            StoppedDeallocated  West US   vsinthesky.cloudapp.net                  
 data:    hanselmandiscourse    StoppedDeallocated  West US   discourse.cloudapp.net          
 data:    hanselmansendy        ReadyRole           West US   sendy.cloudapp.net              
 data:    hanselmanlinuxfarm    StoppedDeallocated  West US   linuxfarm.cloudapp.net          
 data:    hanselmanlinuxfarm-2  StoppedDeallocated  West US   linuxfarm.cloudapp.net          
 data:    hanselmanlinuxfarm-3  StoppedDeallocated  West US   linuxfarm.cloudapp.net          
 data:    hanselmanmysql        ReadyRole           West US   mysql.cloudapp.net                  
 info:    vm list command OK              

如果我想关掉一台的话我可以在Azure 门户网站上使用命令行. 甚至通过VS管理VMs:

Managing Azure within Visual Studio

 

但有时候,我用自定义的应用程序来管理Azure的资源, 可能是Windows或WPF的应用程序,MSbuild 任务,或者我想把云管理添加到现有进程当中。我不只是想关掉虚拟机,还希望能管理网站,建立资源,上传存储等等。

我从Brady Gaster那儿了解到Windows Azure Management Libraries for .NET 现在是Azure SDK 的一部分了。基本上,这意味着你可以调用与Azure门户相同后端的REST API,这样简单的封装,使得它们在.NET中相对容易点。

在Brady的博客中有很多关于类库的信息。 下边是一些最好的亮点。

  • 支持可移植类库(PCL)
  • 以一组聚焦在拥有对简单版本控制依赖最少的NuGet包的形式上市
  • 支持异步/ await-based任务异步(可容易同步重载)
  • 有一个专门为常见错误处理,跟踪,调试配置和HTTP 管道控制的共享基础设施。
  • 考虑到简化可测性以及可模拟性建在想HttpClient 和Json.NEt这样的流行库上。
  • 所有的代码都是开源的并且放在GitHub上。

Windows Azure management Libraries for .NET在NuGet上是一个组包,但你可以可以分开得到它们。例如你只想管理虚拟机。这里是我使用的NuGet的版本。请注意,这篇文章是预发布的那天写的。

https://www.nuget.org/packages/Microsoft.WindowsAzure.Management.Libraries

png

Azure身份验证和授权基于 X 509 证书,因此您将使用那些来初始化您的Azure实例。您可以在这里从一个已通过身份验证的Azure上下载您的证书,您的证书和订阅号都在里面。

我可以列举出来,例如,我所有的网站都运行在各自的地方(web空间)

 

 using (var client = new WebSiteManagementClient(creds)) {
     var spaces = client.WebSpaces.List();
     foreach (var space in spaces) {
         Console.WriteLine("Space: {0}", space.Name);
  
         var sites = client.WebSpaces.ListWebSites(space.Name, new WebSiteListParameters{ PropertiesToInclude = { "Name" }});
         foreach (var site in sites) {
             Console.WriteLine(" " + site.Name);
         }
     }
 }

这个小程序输出:

 Space: eastuswebspace
  SmallestDotNet
 Space: northcentraluswebspace
  Hanselminutes
 Space: northeuropewebspace
 Space: westuswebspace
  babysmash
  nerddinnerofficial
  ratchetandthegeek
  speakinghacks
  thisdeveloperslife
  hanselmanlyncrelay
  HanselmanGhost
  anglebrackets
  lostphonescreen
  loggingtest
  GetInvolved
  keysleft

我可以去更新网站,禁用(停止)网站,建立网络农场,规划它们,创建、配置和做我可以非常灵活地从命令行做的所有操作。现在我可以从PowerShell,.NET,或者从节点和跨平台的命令行, Visual Studio,以及Azure门户来管理Azure的东西。

你可以在Brady的博客中读到关于Windows Azure管理库的相关内容在NuGet 上获得它们或者在GitHub上读到代码并提出问题

如果你 链接你的MSDN和Azure帐户, 你可以每个月得到高达150美元的Azure信用额度, 这可以使两个免费的虚拟机全天运行一个月。

我写了几篇有关“精打细算使用云服务”的文章, 也许你会喜欢.

此外,我鼓励您收看Azure星期五,是我在https://friday.azure.com 做的新节目。Azure星期五在ITunes上同时是一个可下载的高清播客!