2014-11-03 2 views
3

Мне нужно написать сценарий PowerShell, который автоматически создает сайт Azure и разворачивает содержимое локальной файловой системы. Похоже, что Azure PowerShell SDK не предоставляет способ скопировать файлы на сайт, поэтому мы хотим использовать FTP в качестве метода развертывания.Создайте сайт Azure с помощью PowerShell и FTP

Чтобы получить правильные конечные точки и учетные данные FTP, единственным способом, который я нашел, является вызов API управления Azure Management Rest: Get a Site’s Publish Profile.

Но для этого API как другого API управления Azure требуется сертификат. Я нашел следующий учебник Building Real-World Cloud Apps with Windows Azure, что объясняет, как получить сертификат:

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

К сожалению, кажется, что с текущим SDK $s.Certificate всегда нуль, это свойство не существует. Если я вручную установил отпечаток сертификата, все будет работать так, как ожидалось.

У вас есть идея, как получить правильный сертификат подписки? Или у вас есть простая альтернатива развертыванию локальных файлов на веб-сайте Azure?

+1

Альтернативой может быть развертывание файла через сайт SCM (Kudu). См. Доступный REST apis (https://github.com/projectkudu/kudu/wiki/REST-API); в частности, VFS или Zip. Сообщите нам, если все еще проблема. –

+0

@SuwatCh Спасибо, Kudu кажется очень интересной альтернативой! –

+0

@SuwatCh Я закончил тем, что использовал kudu. Здесь [мой gist] (https://gist.github.com/davideicardi/a8247230515177901e57) –

ответ

1

Похоже, что теперь вы можете получить доступ к отпечатку сертификата с помощью

$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 
} 

Примечание: это работает только при подключении к лазурного с помощью Import-AzurePublishSettingsFile

Может кто-нибудь подтвердите, что можно использовать DefaultAccount?

UPDATE

Если вы используете Kudu API, чтобы загрузить ваш сайт, like this, вам не нужно никакого сертификата или публикации профиля. Вы должны прочитать имя пользователя и пароль, используя Get-AzureWebsite, а имя хоста - только yourwebsitename.scm.azurewebsites.net (обратите внимание на сегмент scm). Я предлагаю использовать Kudu, потому что намного надежнее и быстрее.

Смежные вопросы