указав в terraform, что ОС является linux для azurerm_function_app - PullRequest
1 голос
/ 13 марта 2019

У меня есть следующий azurerm_function_app раздел terrform:

resource "azurerm_function_app" "main" {
  name                      = "${var.storage_function_name}"
  location                  = "${azurerm_resource_group.main.location}"
  resource_group_name       = "${azurerm_resource_group.main.name}"
  app_service_plan_id       = "${azurerm_app_service_plan.main.id}"
  storage_connection_string = "${azurerm_storage_account.main.primary_connection_string}"
  https_only                = true

  app_settings {
    "APPINSIGHTS_INSTRUMENTATIONKEY" = "${azurerm_application_insights.main.instrumentation_key}"
  }
}

Как я могу указать, что ОС является linux?

Ответы [ 2 ]

3 голосов
/ 14 марта 2019

Поскольку документации немного, я использовал следующую технику для создания шаблона terraform.

  1. Создайте приложение нужного типа на портале Azure

    enter image description here

  2. Импортировать тот же ресурс с помощью команды импорта terraform.

импорт терраформ azurerm_function_app.functionapp1 /subscription/00000000-0000-0000-0000-000000000000/resourceGroups/mygroup1/providers/Microsoft.Web/sites/functionapp1

будет получена следующая информация

  id = /subscriptions/xxxx/resourceGroups/xxxxxx/providers/Microsoft.Web/sites/xxxx
  app_service_plan_id = /subscriptions/xxx/resourceGroups/xxxx/providers/Microsoft.Web/serverfarms/xxxx
  app_settings.% = 3
  app_settings.FUNCTIONS_WORKER_RUNTIME = node
  app_settings.MACHINEKEY_DecryptionKey = xxxxx
  app_settings.WEBSITE_NODE_DEFAULT_VERSION = 10.14.1
  client_affinity_enabled = false
  connection_string.# = 0
  default_hostname = xxxx.azurewebsites.net
  enable_builtin_logging = false
  enabled = true
  https_only = false
  identity.# = 0
  kind = functionapp,linux,container
  location = centralus
  name = xxxxx
  outbound_ip_addresses = xxxxxx
  resource_group_name = xxxx
  site_config.# = 1
  site_config.0.always_on = true
  site_config.0.linux_fx_version = DOCKER|microsoft/azure-functions-node8:2.0
  site_config.0.use_32_bit_worker_process = true
  site_config.0.websockets_enabled = false
  site_credential.# = 1
  site_credential.0.password =xxxxxx
  site_credential.0.username = xxxxxx
  storage_connection_string = xxxx
  tags.% = 0
  version = ~2
Исходя из этого, я строю следующий шаблон терраформы
    provider "azurerm" {

    }

resource "azurerm_resource_group" "linuxnodefunction" {
    name     = "azure-func-linux-node-rg"
    location = "westus2"
}

resource "azurerm_storage_account" "linuxnodesa" {
    name                     = "azurefunclinuxnodesa"
    resource_group_name      = "${azurerm_resource_group.linuxnodefunction.name}"
    location                 = "${azurerm_resource_group.linuxnodefunction.location}"
    account_tier             = "Standard"
    account_replication_type = "LRS" 
}

resource "azurerm_app_service_plan" "linuxnodesp" {
    name                = "azure-func-linux-node-sp"
    location            = "${azurerm_resource_group.linuxnodefunction.location}"
    resource_group_name = "${azurerm_resource_group.linuxnodefunction.name}"
    kind                = "Linux"
    reserved            = true

    sku {
        capacity = 1
        size     = "P1v2"
        tier     = "PremiunV2"
    }
}

resource "azurerm_function_app" "linuxnodefuncapp" {
    name                      = "azure-func-linux-node-function-app"
    location                  = "${azurerm_resource_group.linuxnodefunction.location}"
    resource_group_name       = "${azurerm_resource_group.linuxnodefunction.name}"
    app_service_plan_id       = "${azurerm_app_service_plan.linuxnodesp.id}"
    storage_connection_string = "${azurerm_storage_account.linuxnodesa.primary_connection_string}"

    app_settings {
        FUNCTIONS_WORKER_RUNTIME     = "node"
        WEBSITE_NODE_DEFAULT_VERSION = "10.14.1"
    }

    site_config {
        always_on = true
        linux_fx_version = "DOCKER|microsoft/azure-functions-node8:2.0"
        use_32_bit_worker_process = true
        websockets_enabled = false            
    }
}

Дайте нам знать ваш опыт с этим.Я постараюсь проверить несколько вещей с этим.

2 голосов
/ 13 марта 2019

Я думаю, вам нужно указать это в блоке app_service_plan

Kind = "Linux"

kind - (Необязательно) Тип создаваемого плана обслуживания приложения.Возможные значения: Windows (также доступна как приложение), Linux и FunctionApp (для плана потребления).По умолчанию Windows.Изменение этого параметра приводит к созданию нового ресурса.

ПРИМЕЧАНИЕ. При создании плана обслуживания приложения Linux для зарезервированного поля должно быть установлено значение true.

Пример из Terraform doc

resource "azurerm_resource_group" "test" {
  name     = "azure-functions-cptest-rg"
  location = "westus2"
}

resource "azurerm_storage_account" "test" {
  name                     = "functionsapptestsa"
  resource_group_name      = "${azurerm_resource_group.test.name}"
  location                 = "${azurerm_resource_group.test.location}"
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

resource "azurerm_app_service_plan" "test" {
  name                = "azure-functions-test-service-plan"
  location            = "${azurerm_resource_group.test.location}"
  resource_group_name = "${azurerm_resource_group.test.name}"
  kind                = "Linux"

  sku {
    tier = "Dynamic"
    size = "Y1"
  }
  properties {
    reserved = true
  }
}

resource "azurerm_function_app" "test" {
  name                      = "test-azure-functions"
  location                  = "${azurerm_resource_group.test.location}"
  resource_group_name       = "${azurerm_resource_group.test.name}"
  app_service_plan_id       = "${azurerm_app_service_plan.test.id}"
  storage_connection_string = "${azurerm_storage_account.test.primary_connection_string}"
}
...