Terraform为linux容器创建应用程序服务



我是大家。我正试图使用terraform为我的docker映像创建一个azure应用程序服务,但显然,即使我的app_service_plan被配置为用于linux环境,这个资源也是默认为windows创建的。我的配置如下:

resource "azurerm_app_service_plan" "ASP-name" {
location = var.location
name = "ASP-name"
resource_group_name = <resource-group>
is_xenon = false
kind = "Linux"
maximum_elastic_worker_count = 1
per_site_scaling = false
reserved = true
sku {
capacity = 1
size = "P1v2"
tier = "PremiumV2"
}
}
resource "azurerm_app_service" "app-name" {
app_service_plan_id = azurerm_app_service_plan.ASP-name.id
location = var.location
name = "app-name"
resource_group_name = <resource-group>
app_settings = {
ASPNETCORE_ENVIRONMENT = "Production"
"DOCKER_REGISTRY_SERVER_PASSWORD"           = "value"
"DOCKER_REGISTRY_SERVER_URL"                = "value"
"DOCKER_REGISTRY_SERVER_USERNAME"           = "value"
}
client_affinity_enabled = false
client_cert_enabled = false
enabled = true
}

有人能告诉我我做错了什么吗?

此示例提供了一个运行单个Docker容器的Linux应用程序服务。您需要提供带有linux_fx_version的docker映像。

resource "azurerm_app_service_plan" "ASP-name" {
location = var.location
name = "ASP-name"
resource_group_name = <resource-group>
kind = "Linux"
maximum_elastic_worker_count = 1
per_site_scaling = false
reserved = true
sku {
capacity = 1
size = "P1v2"
tier = "PremiumV2"
}
}
resource "azurerm_app_service" "app-name" {
app_service_plan_id = azurerm_app_service_plan.ASP-name.id
location = var.location
name = "app-name"
resource_group_name = <resource-group>
site_config {
app_command_line = ""
linux_fx_version = "DOCKER|appsvcsample/python-helloworld:latest"
}
app_settings = {

"DOCKER_REGISTRY_SERVER_PASSWORD"           = "value"
"DOCKER_REGISTRY_SERVER_URL"                = "value"
"DOCKER_REGISTRY_SERVER_USERNAME"           = "value"
}
client_affinity_enabled = false
client_cert_enabled = false
enabled = true
}

由于资源azurerm_app_service从v3.0起在TF提供程序azurerm中被取消认证,并将在v4.0中被删除,因此接受的答案不再适用,因为新的替换资源azurerm_linux_web_app不提供linux_fx_version属性。

相反,您需要在azurerm_linux_web_app->site_config->application_stack->docker_image

这里是使用azurerm_container_registry数据源提供的示例。

resource "azurerm_linux_web_app" "my-web-app" {
name                = var.web-app-name
resource_group_name = azurerm_resource_group.my-resource-group.name
location            = azurerm_resource_group.my-resource-group.location
service_plan_id     = azurerm_service_plan.my-service-plan.id
site_config {
application_stack {
docker_image     = "${data.azurerm_container_registry.my-container-registry.login_server}/my-container-name"
docker_image_tag = "latest"
}
}
app_settings = {
DOCKER_REGISTRY_SERVER_URL      = data.azurerm_container_registry.my-container-registry.login_server
DOCKER_REGISTRY_SERVER_USERNAME = data.azurerm_container_registry.my-container-registry.admin_username
DOCKER_REGISTRY_SERVER_PASSWORD = data.azurerm_container_registry.my-container-registry.admin_password
}
}
data "azurerm_container_registry" "my-container-registry" {
name                = var.docker-registry-name
resource_group_name = var.docker-registry-resource-group
}

相关内容