繁体   English   中英

Terraform Azure function 应用程序 - 简单示例未正确启动 ZC1C425268E68385D14AB50

[英]Terraform Azure function app - simple example not spinning up the function properly

遵循此处的教程: https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-function-linux-custom-image?tabs=in-process%2Ccmd%2Cazure-cli&pivots =编程语言-java&fbclid=IwAR1ixY5uUIrx6tKAyMeob7fRD31nSThriPPl_qDJ390BlMDeoMcb0aah584

I am able to spin-up a simple Java Azure Function App, that works as in a demo and can be also reached on the public web URL.

在第二步中,我尝试做同样的事情,但是想使用 Terraform 进行部署:

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "=3.6.0"
    }
  }
}
    // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "fnappp" {
  name = "terraskrgroup2"
  location = "North Europe"
}

resource "azurerm_storage_account" "fnappp" {
  name                     = "terraskrstorage2"
  resource_group_name      = azurerm_resource_group.fnappp.name
  location                 = azurerm_resource_group.fnappp.location
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

resource "azurerm_service_plan" "fnappp" {
  name                = "serviceplanfnappp2"
  resource_group_name = azurerm_resource_group.fnappp.name
  location            = azurerm_resource_group.fnappp.location
  os_type             = "Linux"
  sku_name            = "EP1"
  worker_count = 1
}


resource "azurerm_application_insights" "fnappp" {
  name                = "tf-test-appinsights2"
  location            = azurerm_resource_group.fnappp.location
  resource_group_name = azurerm_resource_group.fnappp.name
  application_type    = "java"
}

resource "azurerm_linux_function_app" "fnappp" {
  name                = "example-linux-function-final2"
  resource_group_name = azurerm_resource_group.fnappp.name
  location            = azurerm_resource_group.fnappp.location

  storage_account_name = azurerm_storage_account.fnappp.name
  storage_account_access_key = azurerm_storage_account.fnappp.primary_access_key
  service_plan_id      = azurerm_service_plan.fnappp.id
  functions_extension_version = "~3"


  site_config {
    application_stack {
      docker {
        image_name   = "functhird"
        image_tag    = "latest"
        registry_url = "functiontestregistry.azurecr.io"
        registry_username = "REDACTED"
        registry_password = "REDACTED"
      }
    }
    application_insights_connection_string = azurerm_application_insights.fnappp.connection_string
    application_insights_key = azurerm_application_insights.fnappp.instrumentation_key

    http2_enabled = true
  }
}

我正在使用 Azure 容器注册表,主体角色为 Owner - 使用相同的凭据将 docker 映像推送到注册表,所以这应该可以正常工作。

我观察到的症状是:

  1. 当我在 Function 应用程序中打开 example-linux-function-final2 时,在“功能”子部分中,它不包含任何列出的 function,即使 HttpExample 应该在那里
  2. 当我 ssh 进入 function 时(这个工作) - 我最终看到完全空的容器,因此没有映射端点并且 Z8A5DA52ED126447D359E70C057241A8Example 总是调用 /api/40 Httpasample 结果
  3. 如果我使用 Azure CLI 而不是 terraform 部署,完全相同的图像效果很好,所以应该没问题(帖子顶部的教程)
  4. 日志文件中存在“0 function 已加载”日志行。 从日志文件中它肯定正确地获取图像,也运行它,但由于某种原因无法在图像中找到函数/映射? 手动创建的另一个“参考”function 仍然使用完全相同的图像,它在那里工作得很好

您对 Terraform 模板可能有什么问题有什么建议吗?

在深入挖掘之后,在以下帖子中: 功能基础设施即代码

自定义容器图像部分它说:

此外,将 WEBSITES_ENABLE_APP_SERVICE_STORAGE 设置为 false,因为您的应用内容是在容器本身中提供的

结果解决了我的问题。

所以完整的 Terraform 代码部署简单的 Java docker 映像如下:

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "=3.16.0"
    }
  }
}

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "fnappp" {
  name = "terraskrgroup4"
  location = "North Europe"
}

resource "azurerm_storage_account" "fnappp" {
  name                     = "terraskrstorage4"
  resource_group_name      = azurerm_resource_group.fnappp.name
  location                 = azurerm_resource_group.fnappp.location
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

resource "azurerm_service_plan" "fnappp" {
  name                = "serviceplanfnappp4"
  resource_group_name = azurerm_resource_group.fnappp.name
  location            = azurerm_resource_group.fnappp.location
  os_type             = "Linux"
  sku_name            = "EP1"
  worker_count = 1
}


resource "azurerm_application_insights" "fnappp" {
  name                = "tf-test-appinsights4"
  location            = azurerm_resource_group.fnappp.location
  resource_group_name = azurerm_resource_group.fnappp.name
  application_type    = "java"
}

resource "azurerm_linux_function_app" "fnappp" {
  name                = "example-linux-function-final4"
  resource_group_name = azurerm_resource_group.fnappp.name
  location            = azurerm_resource_group.fnappp.location

  storage_account_name = azurerm_storage_account.fnappp.name
  storage_account_access_key = azurerm_storage_account.fnappp.primary_access_key
  service_plan_id      = azurerm_service_plan.fnappp.id
  functions_extension_version = "~3"


  app_settings = {
    WEBSITES_ENABLE_APP_SERVICE_STORAGE = false
  }

  site_config {
    application_stack {
      docker {
        image_name   = "functhird"
        image_tag    = "latest"
        registry_url = "functiontestregistry.azurecr.io"
        registry_username = "REDACTED"
        registry_password = "REDACTED"
      }
    }
    application_insights_connection_string = azurerm_application_insights.fnappp.connection_string
    application_insights_key = azurerm_application_insights.fnappp.instrumentation_key

    http2_enabled = true
  }
}

而我为使其正常工作所做的关键修改是添加:

  app_settings = {
    WEBSITES_ENABLE_APP_SERVICE_STORAGE = false
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM