从 Powershell 设置 Azure 函数

Jar*_*kia 7 powershell function 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;
Run Code Online (Sandbox Code Playgroud)

它几乎可以工作,但不会创建 100% 工作的 Function App。Azure 门户会发出大量错误和警告,例如缺少主机密钥。

备择方案:

  • ARM 模板。将什么放入模板以成功创建 Azure 函数?我不知道。Azure Portal 生成的那个没用。
  • Azure 门户:通过 Azure DevOps 发布管道进行环境设置并不是非常方便的方法,但它会创建一个功能齐全的功能应用程序。

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

Jam*_*ler 6

我正在做完全相同的事情来创建开发沙箱环境。

配置函数应用程序是 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
Run Code Online (Sandbox Code Playgroud)