簡體   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