使用 terraform 部署 Azure 功能

2024-02-13

我有以下 terraform 代码,用于使用 zip 部署将函数应用程序和函数部署到 Azure 门户。

terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "3.50.0"
    }
  }
}

resource "azurerm_service_plan" "mssql_to_blob_service_plan" {
  name                = "mssql_to_blob_service_plan-service-plan"
  resource_group_name = azurerm_resource_group.mssql_to_snowflake_etl.name
  location            = var.default_location
  os_type             = "Linux"
  sku_name            = "Y1"
}

locals {
  tmp_azure_function_zip = "../tmp/code.zip"
  azure_function_local_basedir = "../snowflake_sync_function"
}

data "archive_file" "snowpipefunctionzip" {
  type        = "zip"
  output_path = local.tmp_azure_function_zip
  excludes    = ["__pycache__"]

  source {
    content  = file("${local.azure_function_local_basedir}/__init__.py")
    filename = "__init__.py"
  }

  source {
    content  = file("${local.azure_function_local_basedir}/function.json")
    filename = "function.json"
  }

  source {
    content  = file("${local.azure_function_local_basedir}/requirements.txt")
    filename = "requirements.txt"
  }
}


resource "azurerm_linux_function_app" "mssql_to_snowflake_app" {
  name                        = "mssql-to-snowflake-app-new"
  resource_group_name         = azurerm_resource_group.mssql_to_snowflake_etl.name
  location                    = var.default_location
  storage_account_name        = azurerm_storage_account.staging_storage_account.name
  storage_account_access_key  = azurerm_storage_account.staging_storage_account.primary_access_key
  service_plan_id             = azurerm_service_plan.mssql_to_blob_service_plan.id

 
  zip_deploy_file             = data.archive_file.snowpipefunctionzip.output_path # local.tmp_azure_function_zip
  site_config {}
  app_settings = {
    "WEBSITE_RUN_FROM_PACKAGE" = "0"
  }
}

resource "azurerm_function_app_function" "mssql_to_snowflake_app_func" {
  name            = "mssql-to-snowflake-function"
  function_app_id = azurerm_linux_function_app.mssql_to_snowflake_app.id
  language        = "Python"
  test_data = jsonencode({
    "name" = "Azure"
  })

  config_json = jsonencode({
    "bindings" = [
      {
        "authLevel" = "function"
        "direction" = "in"
        "methods" = [
          "get",
          "post",
        ]
        "name" = "req"
        "type" = "timerTrigger"
      },
      {
        "direction" = "out"
        "name"      = "$return"
        "type"      = "http"
      },
    ]
  })
}

我正在使用 Azurerm 的最新 terraform 提供程序,但收到此错误:

错误:创建函数应用程序函数:(函数名称“mssql-to-snowflake-function”/站点名称“mssql-to-snowflake-app-new”/资源组“mssql_to_snowflake_etl_rg”)-状态:“正在运行”/InProgressOperationID:
与 azurerm_function_app_function.mssql_to_snowflake_app_func 在 azure_fun.tf 第 63 行,在资源“azurerm_function_app_function”“mssql_to_snowflake_app_func”中: 资源“azurerm_function_app_function”“mssql_to_snowflake_app_func”{ 创建函数应用程序函数:(函数名称“mssql-to-snowflake-function”/站点名称“mssql-to-snowflake-app-new”/资源组“mssql_to_snowflake_etl_rg”)-状态:“正在运行”/InProgressOperationID:

有人可以帮助整理以下错误的详细信息,或者帮助提供任何文档或示例来解释如何使用最新的 terraform Azure 提供商使用 terraform zip 部署来部署 Azure 功能吗?


您似乎正在使用 zip_deploy_file 属性。根据文档,使用此值需要在 app_settings 中的应用程序上设置 WEBSITE_RUN_FROM_PACKAGE=1 或 SCM_DO_BUILD_DURING_DEPLOYMENT=true。

您的函数应用配置为 WEBSITE_RUN_FROM_PACKAGE=0。

Azure 函数可以将代码部署为 zip 包,也可以为每个函数内联部署代码。您收到的错误实际上是在函数应用程序函数上,如果未加载代码包,那么您对该函数的引用将不起作用,因为该包未加载。

可以分享一下你的代码包吗?或者至少是一个样本?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 terraform 部署 Azure 功能 的相关文章

随机推荐