如何使用 Terraform azurerm_app_service 指定 .net 核心版本
Posted
技术标签:
【中文标题】如何使用 Terraform azurerm_app_service 指定 .net 核心版本【英文标题】:How to specify .net core version with Terraform azurerm_app_service 【发布时间】:2019-10-27 14:46:35 【问题描述】:开箱即用,我认为azurerm_app_service 提供程序确实允许我们通过使用dotnet_framework_version
字段来指定.Net 框架版本。
dotnet_framework_version -(可选).net 的版本 此应用服务中使用的框架的 CLR。可能的值为 v2.0 (它将使用 .net 的最新版本的 .net 框架 CLR v2 - 当前为 .net 3.5)和 v4.0(对应于最新的 .net CLR v4 的版本 - 在撰写本文时是 .net 4.7.1)。有关根据您所针对的 .net 框架使用哪个 .net CLR 版本的更多信息 - 请参阅此表。默认值 到 v4.0。
https://www.terraform.io/docs/providers/azurerm/r/app_service.html#dotnet_framework_version
文档说可能的值为 v2.0 或 v4.0。
但是,如果我的目标是 .NET Core,比如 v2.2,那该怎么办?我应该在这里做什么?
Azure 门户允许从下拉菜单中选择 .NET Core。 (见下面的截图)
我不确定 Terraform azurerm_app_service 是否也有办法做到这一点。
【问题讨论】:
如果它像 IIS 一样工作,那么我认为您不需要(也不希望)指定此属性,因为它不会使用它。我认为当您不指定它时,它会像 IIS 中的“无托管代码”一样。他们应该在文档中向这个属性添加额外的信息。只需在 Runtime Stack 框中选择 .NET Core 2.2。参见docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/…上的#6 我认为您不必担心这一点。默认情况下,我相信这些应用服务实例总是会安装 .NET Core,所以这取决于你的应用将使用哪个版本。 你是怎么解决这个问题的? 我不同意“我认为你不必担心这个”的评论。在查看仪表板中的常规设置时,查看 Stack = ".NET" 和 .NET Framework version = "V4.*" 会给运行时环境带来不准确的印象。我也想在我的 Terraform 脚本中指定它。 【参考方案1】:您需要在 app_service 块的 site_config
块中指定以下 2 个设置。例如
resource "azurerm_app_service" "app_service"
name = local.graphql_server_long_name
location = var.azure_region
resource_group_name = azurerm_resource_group.rg.name
app_service_plan_id = azurerm_app_service_plan.graphql_server.id
site_config
linux_fx_version = "DOTNETCORE|5.0"
dotnet_framework_version = "v5.0"
它们是linux_fx_version
和dotnet_framework_version
。
您需要运行至少 2.38.0 版本的 azurerm
提供程序。您可以通过在包含您的 terraform 文件的目录中运行以下命令来检查这一点:
terraform version
这将显示 terraform cli 和所有使用的提供程序。
【讨论】:
这是不正确的 - 你不能同时指定【参考方案2】:您可以尝试使用 Azure CLI 查询 AppService/WebApp 的可用运行时。
https://docs.microsoft.com/en-us/cli/azure/webapp?view=azure-cli-latest#az-webapp-list-runtimes
或者
您可以将应用服务配置为使用带有 .NET Core 的应用容器。这将允许您通过 Dockerfile 指定 .NET Core 版本。缺点是您需要某种注册表(Azure Container Registry)。
【讨论】:
【参考方案3】:在应用服务中托管 .NET 核心应用程序有 2 个可用选项:
-
Windows 应用服务计划。
Linux 应用服务计划(默认选项,在 Azure 门户上创建应用服务时)。
如果您使用的是 Windows 应用服务计划,则需要指定 dotnet_framework_version
,正如您所提到的,只有 2 个可用选项 - v2.0 和 v4.0。
相反,您可以使用 Linux 应用服务计划并在linux_fx_version
字段中指定 .net 版本(dotnet_framework_version
应为空)。
有点这样的:
resource "azurerm_app_service" "stackoverlow_service"
name = "stackoverlow-test-net-version"
location = "centralus"
resource_group_name = "resource_group_name"
app_service_plan_id = "app_service_plan_id"
site_config
linux_fx_version = "DOTNETCORE|2.2"
min_tls_version = "1.2"
always_on = true
scm_type = "None"
managed_pipeline_mode = "Integrated"
websockets_enabled = false
use_32_bit_worker_process = true
应用服务是一个非常复杂的产品,有许多配置选项,Azure/terraform 文档并不能很好地涵盖所有方面。 要生成所需的配置,您可以在 Azure 中创建应用服务并将资源导入 terraform:
-
在 terraform 中创建最少的正确应用服务资源。
在 Azure 门户中创建具有所需配置的应用服务。
使用
terraform import
命令导入资源:terraform import azurerm_app_service.stackoverlow_service /subscriptions/....
。
运行 terraform plan
以查看确切差异或检查 terraform 状态文件。
【讨论】:
以上是关于如何使用 Terraform azurerm_app_service 指定 .net 核心版本的主要内容,如果未能解决你的问题,请参考以下文章