Функция Azure и PowerShell: невозможно установить строки подключения с помощью Set-AzWebApp - PullRequest
0 голосов
/ 03 апреля 2019

В целях развертывания я создал скрипт PowerShell для настройки параметров приложения.Это прекрасно работает через

$currentAppSettings = $app.SiteConfig.AppSettings

$appSettings = @{}
# Add existing App Settings
ForEach ($currentAppSetting in $currentAppSettings) {
    $appSettings[$currentAppSetting.Name] = $currentAppSetting.Value
}

# Add new App Settings
$appSettings["someKey"] = "someValue"

# Update App Settings
Set-AzWebApp -ResourceGroupName $resourceGroupName -Name $appName -AppSettings $appSettings

Поскольку я сейчас использую Entity Framework, мне также нужно установить строки подключения.Сначала я подумал, что это должно работать как с настройками приложения и просто добавить аргумент ConnectionStrings:

$currentConnectionStrings = $app.SiteConfig.ConnectionStrings

$connectionStrings = @{}

ForEach ($currentConnectionString in $currentConnectionStrings) {
    $connectionStrings[$currentConnectionString.Name] = $currentConnectionString.ConnectionString
}

$connectionStrings["someKey"] = "someValue"

Set-AzWebApp -ResourceGroupName $resourceGroupName -Name $appName -ConnectionStrings $connectionStrings

Но это не с ошибкой

Set-AzWebApp: Невозможно проверить аргумент параметра'ConnectionStrings'.Пара значений типа строки подключения должна иметь тип 'System.Collections.Hashtable'

, несмотря на то, что $connectionStrings имеет тип System.Collections.Hashtable

Также пытается работать с CustomСбой объектов, массивов и т. Д.

Как правильно передать строки подключения? И как указать тип (например, SQLAZURE)?

Спасибо

Ответы [ 2 ]

3 голосов
/ 03 апреля 2019

Согласно документации Set-AzwebApp ConnectionStrings должно быть Hastable.

Set-AzWebApp
   [[-AppServicePlan] <String>]
   [[-DefaultDocuments] <String[]>]
   [[-NetFrameworkVersion] <String>]
   [[-PhpVersion] <String>]
   [[-RequestTracingEnabled] <Boolean>]
   [[-HttpLoggingEnabled] <Boolean>]
   [[-DetailedErrorLoggingEnabled] <Boolean>]
   [[-AppSettings] <Hashtable>]
   [[-ConnectionStrings] <Hashtable>]
   [[-HandlerMappings] <System.Collections.Generic.IList`1[Microsoft.Azure.Management.WebSites.Models.HandlerMapping]>]
   [[-ManagedPipelineMode] <String>]
   [[-WebSocketsEnabled] <Boolean>]
   [[-Use32BitWorkerProcess] <Boolean>]
   [[-AutoSwapSlotName] <String>]
   [-ContainerImageName <String>]
   [-ContainerRegistryUrl <String>]
   [-ContainerRegistryUser <String>]
   [-ContainerRegistryPassword <SecureString>]
   [-EnableContainerContinuousDeployment <Boolean>]
   [-HostNames <String[]>]
   [-NumberOfWorkers <Int32>]
   [-AsJob]
   [-AssignIdentity <Boolean>]
   [-HttpsOnly <Boolean>]
   [-AzureStoragePath <WebAppAzureStoragePath[]>]
   [-ResourceGroupName] <String>
   [-Name] <String>
   [-DefaultProfile <IAzureContextContainer>]
   [<CommonParameters>]

Вы должны установить connectionstring, используя Hashtable, как показано ниже:

$connectionStrings = @{connectionStrings = @{Name="<ConnectionStringName>";Value="<ConnectionSyring>";type="<SQLAzure/SQLServer/Custom/MySql>"}}

Set-AzWebApp -ResourceGroupName $resourceGroupName -Name $appName -ConnectionStrings $connectionStrings

0 голосов
/ 03 апреля 2019

@ KetanChawda-MSFT: Спасибо за ваш совет, мне очень помогло разработать решение (но в моем контексте это не сработало, как указано ниже).

Вот как это работает дляменя сейчас:

$currentConnectionStrings = $app.SiteConfig.ConnectionStrings
$connectionStrings = @{}

# Add existing connection strings
ForEach ($currentConnectionString in $currentConnectionStrings) {
    $connectionStrings[$currentConnectionString.Name] =  
        @{
            Value=$currentConnectionString.ConnectionString;
            Type=($currentConnectionString.Type | Out-String).ToUpper()
        }
}

# Add database connection string
$connectionStrings["connName"] = @{
    Value="connString";
    Type="SQLAZURE"
}

# Update settings
Set-AzWebApp -ResourceGroupName $resourceGroupName -Name $appName -ConnectionStrings $connectionStrings

Что интересно, в случае существующих строк подключения я должен отформатировать его как строку и использовать toUpper, в противном случае он не работает для меня (ошибка: Set-AzWebApp : Cannot validate argument on parameter 'ConnectionStrings'. Connection string type must be specified.).При добавлении новой строки подключения я могу использовать, например, SQLAZURE, а также SQLAzure.

РЕДАКТИРОВАТЬ:

Вот подход, который вам не нуженраздел строк подключения вообще при работе с Entity Framework и функциями Azure: Отсутствует ProviderName при отладке AzureFunction, а также при развертывании функции Azure

...