首页 > 解决方案 > 从 Powershell 设置 Azure 函数

问题描述

在 Azure CLI 中,有az functionapp ,但在 Powershell AzureRM-libraryAz-library中找不到这样的等效项。

使用原始 Azure 资源,我尝试过这样的事情来在我的应用程序服务计划中创建一个函数应用程序:

New-AzResource -ResourceType 'Microsoft.Web/Sites' `
    -ResourceGroupName "MyRgName" `
    -Location "westeurope" `
    -ResourceName "MyFunctionName" `
    -kind 'functionapp' `
    -Properties @{ServerFarmId="abc-123"; alwaysOn=$True;} `
    -ApiVersion '2018-11-01' `
    -Force;

它几乎可以工作,但不能创建 100% 工作的功能应用程序。Azure 门户会吐出大量错误和警告,例如缺少主机密钥。

备择方案:

问题是:如何从 Powershell 脚本创建函数应用程序?

标签: functionazurepowershell

解决方案


我正在做同样的事情来创建一个开发沙盒环境。

预配功能应用程序是 Az Powershell 模块中的一个缺口,但它似乎是可能的。

我按照此处的步骤https://clouddeveloper.space/2017/10/26/deploy-azure-function-using-powershell/配置了我的函数应用程序,但将其更改为使用现有的应用程序服务计划而不是消费计划。

$AppServicePlan = "abc-123"
$AppInsightsKey = "your key here"
$ResourceGroup = "MyRgName"
$Location = "westeurope"
$FunctionAppName = "MyFunctionName"
$AzFunctionAppStorageAccountName = "MyFunctionAppStorageAccountName"
$FunctionAppSettings = @{
    ServerFarmId="/subscriptions/<GUID>/resourceGroups/$ResourceGroup/providers/Microsoft.Web/serverfarms/$AppServicePlan";
    alwaysOn=$True;
}

# Provision the function app service
New-AzResource -ResourceGroupName $ResourceGroup -Location $Location -ResourceName $FunctionAppName -ResourceType "microsoft.web/sites" -Kind "functionapp" -Properties $FunctionAppSettings -Force | Out-Null

$AzFunctionAppStorageAccountKey = Get-AzStorageAccountKey -ResourceGroupName $ResourceGroup -AccountName $AzFunctionAppStorageAccountName | Where-Object { $_.KeyName -eq "Key1" } | Select-Object Value
$AzFunctionAppStorageAccountConnectionString = "DefaultEndpointsProtocol=https;AccountName=$AzFunctionAppStorageAccountName;AccountKey=$($AzFunctionAppStorageAccountKey.Value)"
$AzFunctionAppSettings = @{
    APPINSIGHTS_INSTRUMENTATIONKEY = $AppInsightsKey;
    AzureWebJobsDashboard = $AzFunctionAppStorageAccountConnectionString;
    AzureWebJobsStorage = $AzFunctionAppStorageAccountConnectionString;
    FUNCTIONS_EXTENSION_VERSION = "~2";
    FUNCTIONS_WORKER_RUNTIME = "dotnet";
}

# Set the correct application settings on the function app
Set-AzWebApp -Name $FunctionAppName -ResourceGroupName $ResourceGroup -AppSettings $AzFunctionAppSettings | Out-Null

推荐阅读