Bicep - 如何将运行时堆栈配置到 Azure 应用服务Bicep 版本 0.4

问题描述

我能够使用最新的 Bicep 0.4 版创建应用服务计划和应用服务。

resource myAppServicePlan 'Microsoft.Web/serverfarms@2021-01-01'={
name: AppServicePlanName
location: Location
sku: {
 name: appServicePlanSkuName
 tier: AppServiceTier
 }  
}
resource myAppService 'Microsoft.Web/sites@2021-01-01'={
  name: AppServiceName
  location: Location
  properties:{
  serverFarmId: myAppServicePlan.id
  }
 }

默认情况下,它以 ASP.NET 4.8 作为框架版本。我想使用框架作为 Netcore 3.1。有没有办法实现它?

请推荐。 谢谢你。 普拉文

解决方法

二头肌版本无​​关紧要,您可以通过为资源设置适当的参数来配置它。对于 Linux 计划,它是 LinuxFxVersion,与 ARM 中的相同,但编写的语法不同。您需要查看应用服务文档以获取更多详细信息:https://docs.microsoft.com/en-us/azure/app-service/quickstart-arm-template

如果您无法确定需要在 bicep/ARM 中设置哪个属性,一种选择是在浏览器中打开开发人员工具并检查 Portal 发送到 management.azure.com 的 POST 消息或转到 resources.azure.com 和查看已配置(通过门户)资源的详细信息或使用导出模板功能。

编辑:
对于 Windows 应用服务计划,设置运行时堆栈有点复杂。 基本上,属性 netFrameworkVersion 可以是 v3.0 v4.0v5.0

但是要获得核心似乎您需要在网站/配置中使用元数据进行操作:

resource myAppService 'Microsoft.Web/sites@2021-01-01' = {
  name: AppServiceName
  location: Location
  properties:{
  serverFarmId: myAppServicePlan.id
  }

  resorce 'webConfig' config = {
    name: 'web'
    properties: {
      metadata: [
      {
        name: 'CURRENT_STACK'
        value: 'dotnetcore'
      }
      ]
    }
  }
}

如果您希望返回 .NET 或切换到 .NET5(然后切换到 .NET6),您需要将该值设置回 dotnet 并使用 netFrameworkVersion 属性。

似乎当您拥有值为 CURRENT_STACKdotnetcore 时,netFrameworkVersion 会被忽略。

我从观察 PUT 请求中提取了这些知识 - 更改堆栈时门户会做什么。我不知道有什么选项可以设置不同的堆栈,如 Java 或 PHP。可能以类似的方式 - CURRENT_STACK + 站点/配置“web”中的其他属性的某种组合。

似乎没有这方面的文档。

顺便说一句 - 不要尝试在 Microsoft.Web/Sites 资源中使用它 - 使用带有 Microsoft.web/sites/config 名称的 web 代替。我有历史,虽然我可以在 siteConfig 属性下使用这些选项,但它不是由资源提供程序 API 设置的。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...