使用PowerShell和FTP创建Azure网站

问题描述:

我需要编写一个自动创建Azure网站并部署本地文件系统内容的PowerShell脚本。似乎Azure PowerShell SDK不提供将文件复制到网站的方法,因此我们希望将FTP用作部署方法。使用PowerShell和FTP创建Azure网站

要获得正确的FTP端点和凭证,我发现的唯一方法是调用Azure管理Rest Rest API:Get a Site’s Publish Profile

但是,作为其他Azure Management API的此API需要证书。我发现下面的教程 Building Real-World Cloud Apps with Windows Azure解释如何拿到证书:

$s = Get-AzureSubscription -Current 
$thumbprint = $s.Certificate.Thumbprint 

遗憾的是似乎与目前的SDK $s.Certificate总是空,这个属性不存在。如果我手动设置证书指纹,一切都按预期工作。

您有关于如何获得正确的订购证书的想法吗?或者您是否有将本地文件部署到Azure网站的简单方法?

+1

另一种方法是通过SCM(Kudu)站点部署文件。查看可用的REST API(https://github.com/projectkudu/kudu/wiki/REST-API);特别是VFS或Zip。让我们知道如果仍然问题。 – 2014-11-04 04:08:44

+0

@SuwatCh谢谢,Kudu似乎是一个非常有趣的选择! – 2014-11-05 08:39:26

+0

@SuwatCh我结束了使用kudu。这里[我的要点](https://gist.github.com/davideicardi/a8247230515177901e57) – 2014-11-07 10:52:24

看来,现在你可以使用

$thumbprint = $s.DefaultAccount 

代替

#$thumbprint = $s.Certificate.Thumbprint 

访问证书指纹似乎DefaultAccount具有完全相同的值作为证书指纹。

仅作参考,这里是我完整的脚本,以获得给定网站上发布个人资料:

Function get-AzureWebSitePublishXml 
{ 
    Param(
     [Parameter(Mandatory = $true)] 
     [String]$WebsiteName 
    ) 

    # Get the current subscription 
    $s = Get-AzureSubscription -Current 
    if (!$s) {throw "Cannot get Windows Azure subscription."} 

    #$thumbprint = $s.Certificate.Thumbprint #this code doesn't work anymore 
    $thumbprint = $s.DefaultAccount 
    if (!$thumbprint) { throw "Cannot get subscription cert thumbprint."} 

    # Get the certificate of the current subscription from your local cert store 
    $cert = Get-ChildItem Cert:\CurrentUser\My\$thumbprint 
    if (!$cert) {throw "Cannot find subscription cert in Cert: drive."} 

    $website = Get-AzureWebsite -Name $WebsiteName 
    if (!$website) {throw "Cannot get Windows Azure website: $WebsiteName."} 

    # Compose the REST API URI from which you will get the publish settings info 
    $uri = "https://management.core.windows.net:8443/{0}/services/WebSpaces/{1}/sites/{2}/publishxml" -f ` 
     $s.SubscriptionId, $website.WebSpace, $Website.Name 

    # Get the publish settings info from the REST API 
    $publishSettings = Invoke-RestMethod -Uri $uri -Certificate $cert -Headers @{"x-ms-version" = "2013-06-01"} 
    if (!$publishSettings) {throw "Cannot get Windows Azure website publishSettings."} 

    return $publishSettings 
} 

注意:这只能当你将使用进口AzurePublishSettingsFile天青

任何人都可以确认可以安全使用DefaultAccount属性?

UPDATE

如果使用Kudu API上传您的网站,like this,你不需要任何证书或发布配置文件。您应该使用Get-AzureWebsite来读取用户名和密码,主机名只是yourwebsitename.scm.azurewebsites.net(注意scm段)。我建议使用Kudu,因为它更加可靠和快速。