История одного учебного развертывания Dynamics NAV 2013 в Windows Azure

Итак, для России обещают локализовать (или как минимум выпустить на рынок) релиз Microsoft Dynamics NAV 2013 R2, который особенно хорош в Azure.

Понятное дело ждать уже совсем не возможно, учитывая, что версия NAV 2013 годная для Azure была относительно недавно выпущена и доступна на PartnerSource. Поэтому было решено слегка поиграться с тем, что есть. Для этого в целом достаточно материалов на MSDN:

Решил воспользоваться и традиционно наступил на грабельки различной конфигурации. Традиционно – победил и готов поделиться результатами.

Фаза 1. Подготовка подписки Windows Azure. Т.е. куда будем устанавливать NAV 2013.
Для начала зашел на сайт http://www.windowsazure.com/ru-ru/ .
Залогинился с помощью учетной записи Microsoft (ранее Live ID).
Воспользовался предложением для подписчиков MSDN и создал соответствующую подписку (хотя и принудили указать банковскую карту, да еще с нее списали 30 рублей, хотя скорее всего просто зарезервировали и они освободятся через некоторое время).

Azure Account & MSDN

Далее согласно инструкции следовало создать нечто вроде Storage Account (учетная запись хранения). То что указано в инструкции почему-то не работает, похоже концепт поменялся.


Вместо этого пошел в раздел https://manage.windowsazure.com/?whr=live.com и посмотрел обучалку по работе с админкой.
В ней-то и нашел внешне похожий пункт (да, я переключился на английский):

Azure Storage Account

Следующим шагом надо подготовить рабочий компьютер, с которого будет выполняться работа с облаком. Я решил использовать свой боевой ноутбук под управлением Windows 8.

Первым этапом надо проверить, что установлены Powershell и Powershell ISE (последний запустил с помощью команды powershell_ise.exe). Для Windows 8 - установлены по умолчанию.

Далее уже серьезнее – установка набора скриптов PowerShell для Azure. Одна из сложных задач – найти его в разделе Download (в данном случае – слово Down оказалось ключевым).

Azure PowerShell download

Затем установить Cmdlets для Azure и подключить к подписке.
Я пользовался инструкцией приведенной по ссылке, но для наглядности можно посмотреть картинку ниже.

Azure Cmdlets installation

Далее согласно методички требовалось получить кучу сертификатов безопасности, но для тестового запуска я решил безопасностью пренебречь (нельзя ж создавать себе сразу столько проблем). Тем не менее требуемое ПО установить все же придется. Часть из него была установлена вместе с Windows 8, кое-что вместе с Visual Studio.

  • Program Files(x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\mage.exe (включен в Windows 8)
  • Program Files(x86)\Windows Resource Kits\Tools\winhttpcertcfg.exe (установил отдельно)
  • Program Files(x86)\Windows Kits\8.0\bin\x86\makecert.exe (часть поставки Visual Studio)

Далее настройка параметров для запускаемого скрипта. Для тренировки решил использовать скрипт из поставки, который все делает сам и на одной машине. Думал (наивный) так проще пройти первый этап и погрузиться в дебри.
Итак, вначале надо внести настройки и параметры. Для этого копируем и переименовываем Set-PartnerSettings.ps1 в Set-PartnerSettings-Custom.ps1, далее модифицируем Set-PartnerSettings-Custom.ps1. В нем устанавливаем необходимые параметры (они начинаются с # TODO:). Например так,

# TODO:
$NAV_PublishSettingsFile = ‘C:\Azure\apanko.publishsettings’

Я перепробовал некоторое количество разных вариантов настроек, но в крайнем запуске, который завершился успехом были применены:

$NAV_PublishSettingsFile = ‘C:\Azure\apanko.publishsettings’ (где сохраните, там и будет)
$NAV_AzureSubscriptionName = ‘MySubscription’ (имя моей подписки)
$NAV_AzureStorageAccount = ‘nav4u’ (имя учетной записи хранения)
$NAV_AzureServiceName = ‘MyNAVSQL’ (ну теперь занято, придумывайте свое)
$NAV_VMAdminUserName = ‘admin’
$NAV_VMAdminPassword = ‘ххххххххххххх’ (надо задать сложный пароль)
$NAV_AzureLocation = ‘West Europe’ (буду пользоваться голландским датацентром)
$NAV_VMSize = ‘Medium’ (на Small - не удалось установить один из компонентов, решил что из-за слабости машины. В результате поставил Medium, а после в контрольной панели поменял на Small)
$NAV_OSImageWithSqlServer = ‘fb83b3509582419d99629ce476bcb5c8__Microsoft-SQL-Server-2012SP1-Standard-CY13SU04-SQL11-SP1-CU3-11.0.3350.0-B’ (по умолчанию)
$NAV_OSImageWithoutSqlServer = ‘a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-Datacenter-201304.01-en.us-127GB.vhd’ (по умолчанию)
$NAV_SqlServerMachine = ‘MySQL’
$NAV_SqlServerMachineAdminUserName = ‘admin’
$NAV_SqlServerMachineAdminPassword = ‘ххххххххххххх’
$NAV_AzureVirtualNetwork = ‘MyVirtualNetwork’ (по умолчанию)
$NAV_AzureAffinityGroup = ‘MyAffinityGroup’ (по умолчанию)
$NAV_DvdLocation = ‘C:\NAV2013\DVD_BUILD34797′ (путь к каталогу с дистрибутивом)
$NAV_UseAzureStorageForDvdTransfer = $true (кстати оказалось не так долго)
$NAV_DvdVhdName = “$NAV_AzureServiceName-DynamicsNAVDvd.vhd”
$NAV_BakFile = ‘C:\NAV2013\CRONUS W1 NAV (7-0)\CRONUS W1 NAV (7-0).bak’ (последняя демо-база с PartnerSource, вот он заливался очень долго)
$NAV_DatabaseDiskSizeInGB = 10
$NAV_RemoteDatabaseBackupFile = ‘C:\SQLDemoDatabase\CRONUS W1 NAV (7-0).bak’ (не люблю длинные пути)
$NAV_InstanceName = ‘DynamicsNAV70_Instance1′ (по умолчанию)
$NAV_InstanceNameInternal = ‘Inst1′ (по умолчанию)
$NAV_ManagementServicesPort = 9000 (по умолчанию)
$NAV_ClientServicesPort = 9001 (по умолчанию)
$NAV_ClickOnceWebSitePort = 9004 (по умолчанию)
$NAV_WindowsServiceAccount = ‘NSTService’ (по умолчанию)
$NAV_WindowsServiceAccountPassword = ‘ххххххххххххх’
$NAV_NAVAdminUserName = ‘admin’
$NAV_NAVAdminPassword = ‘ххххххххххххх’
$NAV_LicenseFile = ‘C:\NAV2013\DVD_BUILD34797\SQLDemoDatabase\CommonAppData\Microsoft\Microsoft Dynamics NAV\70\Database\Cronus.flf’ (для игр хватит демо лицензии)
$NAV_ExistingCompanyFromBackup = ‘CRONUS International Ltd.’ (по умолчанию)
$NAV_NewCompanyName = ‘Company1′ (по умолчанию)
$NAV_ClientServicesPfxFile = ‘C:\NAV2013\DVD_BUILD34797\Cloud\Examples\HowTo\MyAzureVM.pfx’
$NAV_ClientServicesPfxPassword = “pfxpassword”
$NAV_HttpsWebClientPfxFile = “”
$NAV_HttpsWebClientPfxPassword = “”
$NAV_ClickOnceCodeSigningPfxFile = ‘C:\NAV2013\DVD_BUILD34797\Cloud\Examples\HowTo\ClickOnceSignature.pfx’
$NAV_ClickOnceCodeSigningPfxPassword = ‘clickoncesignaturepassword’
$Global:AzurePowershellModuleFile = Join-Path ${env:ProgramFiles(x86)} ‘Microsoft SDKs\Windows Azure\PowerShell\Azure\Azure.psd1′
$Global:MageExeFile = Join-Path ${env:ProgramFiles(x86)} ‘Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\mage.exe’ (у меня Windows 8, это влияет на путь)
$Global:WinHttpCertCfgExeFile = Join-Path ${env:ProgramFiles(x86)} ‘Windows Resource Kits\Tools\winhttpcertcfg.exe’
$Global:MakeCertExeFile = Join-Path ${env:ProgramFiles(x86)} ‘Windows Kits\8.0\bin\x86\makecert.exe’

Далее запустил и обеспечил работу компьютера в течении двух часов (да, за обещанные 40 минут скрипт не управился – долго заливал файлы).

По итогу скрипт выдал результат:

The NAV Server virtual machine is: MyNAVSQL.cloudapp.net
The NAV Server virtual machine administrator username: admin
The NAV Server virtual machine administrator password: ххххххххххххх
The NAV Server Instance is: DynamicsNAV70_Instance1
The NAV Server account credentials: NSTService/ ххххххххххххх
The Windows Client can be downloaded via ClickOnce at: http://MyNAVSQL.cloudapp.net:9004
The Web Client can be accessed at: https://MyNAVSQL.cloudapp.net/DynamicsNAV70_Instance1
A user has been added to the database with the following credentials:
  user=admin
  password= ххххххххххххх

Зашел на приведенную ссылку для Web клиента браузером – работает:

Microsoft Dynamics NAV 2013 Web Client

Попробовал вторую, там предложение установить приложение в один клик:

ClickOnce

Согласился и один раз установил. В последующем при нажатии на кнопку Install Microsoft Dynamics NAV сразу запускается приложение и предлагает ввести имя пользователя и пароль (да, да в стиле старой школы и логинов БД).

Microsoft Dynamics NAV 2013 Windows Client

Вот такие успехи.

Так как практически все делается с помощью PowerShell скриптов, то также повысил свой соответствующий навык. В частности пришлось «изобрести» следующее:

  1. В результате неудачных развертываний появилась толпа виртуальных машин и дисков к ним, виртуальные машины через консоль удалялись хорошо, а диски – плохо:

There is currently a lease on the blob and no lease ID was specified in the request

Победил с помощью команд:

  • Get-AzureDisk, возвращает список дисков.
  • Remove-AzureDisk, которая удаляет указанный диск.

Пример можно посмотреть ниже:

PS C:\Windows\system32> Get-AzureDisk

AffinityGroup :
AttachedTo :
IsCorrupted : False
Label : MyNAVSQL-DynamicsNAVDvd.vhd
Location : West Europe
DiskSizeInGB : 1
MediaLink : https://nav4u.blob.core.windows.net/vhds/MyNAVSQL-DynamicsNAVDvd.vhd
DiskName : MyNAVSQL-DynamicsNAVDvd.vhd
SourceImageName :
OS :
OperationDescription : Get-AzureDisk
OperationId : 85f14c8d-d20b-4144-8739-d230b1486451
OperationStatus : Succeeded

AffinityGroup :
AttachedTo :
IsCorrupted : False
Label :
Location : West Europe
DiskSizeInGB : 127
MediaLink : https://nav4u.blob.core.windows.net/vhds/MyNAVSQL-MyNAVSQL-2013-7-15-0-19-51-661-0.vhd
DiskName : MyNAVSQL-MyNAVSQL-0-201307142019160466
SourceImageName : fb83b3509582419d99629ce476bcb5c8__Microsoft-SQL-Server-2012SP1-Standard-CY13SU04-SQL11-SP1-CU3-11.0.3350.0-B
OS : Windows
OperationDescription : Get-AzureDisk
OperationId : 85f14c8d-d20b-4144-8739-d230b1486451
OperationStatus : Succeeded

AffinityGroup :
AttachedTo :
IsCorrupted : False
Label : Database Disk
Location : West Europe
DiskSizeInGB : 10
MediaLink : https://nav4u.blob.core.windows.net/vhds/MyNAVSQL-MyNAVSQL-Database Disk-2013-7-15-584.vhd
DiskName : MyNAVSQL-MyNAVSQL-3-201307142038390074
SourceImageName :
OS :
OperationDescription : Get-AzureDisk
OperationId : 85f14c8d-d20b-4144-8739-d230b1486451
OperationStatus : Succeeded

PS C:\Windows\system32> Remove-AzureDisk MyNAVSQL-MyNAVSQL-3-201307142038390074

OperationDescription                                                   OperationId                                    OperationStatus
——————–                                                        ———–                                      —————
Remove-AzureDisk                              a1ad1fb6-baa7-4b34-a19e-a87c8dcdfaed               Succeeded

Создание пользователя. Тут пригодились заготовки из папки Cloud. Вдохновившись, сделал свой скрипт:

clear
$navDemoUserName = ‘DemoUser1′
$navDemoUserPassword = ‘xxxxxxxxxxxx’
$PSScriptRootV2 = ‘C:\NAV2013\DVD_BUILD34797\Cloud\Examples\HowTo\’

. (Join-Path $PSScriptRootV2 ‘Set-PartnerSettings.ps1′)
. (Join-Path $PSScriptRootV2 ‘Set-PowerShellEnvironment.ps1′)

$Session = New-NAVAdminSession
  -RemoteMachineAddress $NAV_AzureServiceName+’.cloudapp.net’ `
  -AzureServiceName $NAV_AzureServiceName `
  -VMAdminUserName $NAV_VMAdminUserName `
  -VMAdminPassword $NAV_VMAdminPassword

[System.Security.SecureString]$navDemoUserSecureString = ConvertTo-SecureString $navDemoUserPassword -AsPlainText -Force

New-NAVServerUserRemotely -UserName $navDemoUserName
  -Password $navDemoUserSecureString
  -ServerInstance $NAV_InstanceName
  -Session $Session

New-NAVServerUserPermissionSetRemotely -UserName $navDemoUserName
  -PermissionSetId “SUPER”
  -ServerInstance $NAV_InstanceName
  -Session $Session

New-NAVServerUserRemotely и New-NAVServerUserPermissionSetRemotely это функции из каталога C:\NAV2013\DVD_BUILD34797\Cloud\Examples\NAVRemoteAdministration\NAV\

Посмотрел как они устроены и для удаления созданного пользователя написал вот такой код:

clear
$PSScriptRootV2 = ‘C:\MYDOC\_NAV\Setup\NAV2013\DVD_BUILD34797\Cloud\Examples\HowTo\’

. (Join-Path $PSScriptRootV2 ‘Set-PartnerSettings.ps1′)
. (Join-Path $PSScriptRootV2 ‘Set-PowerShellEnvironment.ps1′)

$Session = New-NAVAdminSession -RemoteMachineAddress $NAV_AzureServiceName+’.cloudapp.net’ `
  -AzureServiceName $NAV_AzureServiceName `
  -VMAdminUserName $NAV_VMAdminUserName `
  -VMAdminPassword $NAV_VMAdminPassword

$navDemoUserName = ‘DemoUser’

Invoke-Command -Session $Session -ScriptBlock `
  {
  param([string]$navDemoUserName, [string]$NAV_InstanceName)
  Remove-NAVServerUser -ServerInstance $NAV_InstanceName
  -UserName $navDemoUserName
  } `
  -ArgumentList $navDemoUserName, $NAV_InstanceName

Он запускает в удаленной сессии PowerShell скрипты из поставки NAV 2013

В целом база доступна для тестов и игр.
Желающие могут зайти по ссылкам:

Имя пользователя: DemoUser1
Пароль: DemoUser1

Права не резал, так как особо ломать там нечего демо-база ведь.
Прошу отнестись с пониманием к тому, что загружена демо лицензия, что позволяет одновременную работу только двум пользователям.

Также надо понимать, что работа данного облачка зависит от наличия средств на счете MSDN, фазы луны, настроения владельца и т.п. Если служба не доступна – значит так и надо.

Для интересующихся: в целом на два месяца можно получить демо доступ к WindowsAzure.
Для справки, за два дня игр было потрачено около 60 рублей, в целом доступно:

Azure payment statistics

Учебное видео на официально канале Youtube:
http://www.youtube.com/watch?v=YYe5qKh4YS0&list=PL5B63EF419A3B59C8&index=1
http://www.youtube.com/watch?v=SYOv59Or-3w&list=PL5B63EF419A3B59C8&index=2
http://www.youtube.com/watch?v=Iv8iewcumkQ&list=PL5B63EF419A3B59C8&index=3
http://www.youtube.com/watch?v=6wG1UBab–M&list=PL5B63EF419A3B59C8&index=4

Метки: ,



Комментариев: 1

  1. Вячеслав пишет:

    Андрей, спасибо, слегка притормаживает (возможно инет слабый),
    но работает!
    Заказал там у тебя велосипедов 5 штук :)

Оставьте свой отзыв!