Проблема с развертыванием приложения функции Azure Terraform

#azure-devops #azure-functions #terraform-provider-azure

Вопрос:

Я надеюсь, что кто-нибудь сможет помочь мне с этой проблемой, потому что я не понимаю, что я делаю не так.

Я пытаюсь создать функциональное приложение azure и развернуть в нем почтовый пакет (триггер таймера).

Я установил этот код.

 resource "azurerm_resource_group" "function-rg" {
  location = "westeurope"
  name     = "resource-group"
}

data "azurerm_storage_account_sas" "sas" {
  connection_string = azurerm_storage_account.sthriprdeurcsvtoscim.primary_connection_string
  https_only        = true
  start             = "2021-01-01"
  expiry            = "2023-12-31"
  resource_types {
    object    = true
    container = false
    service   = false
  }
  services {
    blob  = true
    queue = false
    table = false
    file  = false
  }
  permissions {
    read    = true
    write   = false
    delete  = false
    list    = false
    add     = false
    create  = false
    update  = false
    process = false
  }
}


resource "azurerm_app_service_plan" "ASP-rg-hri-prd-scim" {
  location                     = azurerm_resource_group.function-rg.location
  name                         = "ASP-rghriprdeurcsvtoscim"
  resource_group_name          = azurerm_resource_group.function-rg.name
  kind                         = "functionapp"
  maximum_elastic_worker_count = 1
  per_site_scaling             = false
  reserved                     = false
  sku {
    capacity = 0
    size     = "Y1"
    tier     = "Dynamic"
  }
}

resource "azurerm_storage_container" "deployments" {
  name                  = "function-releases"
  storage_account_name  = azurerm_storage_account.sthriprdeurcsvtoscim.name
  container_access_type = "private"
}

resource "azurerm_storage_blob" "appcode" {
  name                   = "functionapp.zip"
  storage_account_name   = azurerm_storage_account.sthriprdeurcsvtoscim.name
  storage_container_name = azurerm_storage_container.deployments.name
  type                   = "Block"
  source                 = "./functionapp.zip"
}

resource "azurerm_function_app" "func-hri-prd-eur-csv-to-scim" {
  storage_account_name       = azurerm_storage_account.sthriprdeurcsvtoscim.name
  storage_account_access_key = azurerm_storage_account.sthriprdeurcsvtoscim.primary_access_key
  app_service_plan_id        = azurerm_app_service_plan.ASP-rg-hri-prd-scim.id
  location                   = azurerm_resource_group.function-rg.location
  name                       = "func-hri-prd-csv-to-scim"
  resource_group_name        = azurerm_resource_group.function-rg.name
  app_settings = {
    "WEBSITE_RUN_FROM_PACKAGE"    = "https://${azurerm_storage_account.sthriprdeurcsvtoscim.name}.blob.core.windows.net/${azurerm_storage_container.deployments.name}/${azurerm_storage_blob.appcode.name}${data.azurerm_storage_account_sas.sas.sas}"
    "FUNCTIONS_EXTENSION_VERSION" = "~3"
    "FUNCTIONS_WORKER_RUNTIME"    = "dotnet"
  }
  enabled = true
  identity {
    type = "SystemAssigned"
  }
  version                = "~3"
  enable_builtin_logging = false
}

resource "azurerm_storage_account" "sthriprdeurcsvtoscim" {
  account_kind              = "Storage"
  account_replication_type  = "LRS"
  account_tier              = "Standard"
  allow_blob_public_access  = false
  enable_https_traffic_only = true
  is_hns_enabled            = false
  location                  = azurerm_resource_group.function-rg.location
  name                      = "sthriprdeurcsvtoscim"
  resource_group_name       = azurerm_resource_group.function-rg.name
}
 

Само собой разумеется, что terraform apply работа без каких-либо ошибок. Конфигурации приложения-функции верны и указывают на правильную учетную запись хранения. В учетной записи хранения есть контейнер с zip-файлом, содержащим мой код функции azure.

Но когда я захожу в приложение функций -> Функции, я не вижу там никакой функции.

Пожалуйста, кто-нибудь может помочь мне понять, что я делаю не так в этом? Функциональное приложение представляет собой функцию .net3

Комментарии:

1. Что говорят журналы функции?

2. Чтобы проверить загруженный архив, вы можете использовать кнопку » Загрузить содержимое приложения » в разделе «Обзор приложений функций».

Ответ №1:

Когда вы создаете приложение функций, оно не настроено для функций Терраформирование. Он настроен для развертывания визуального кода функций. Нам нужно настроить как package.json так, чтобы он создавал ZIP-файл для нас, так и .gitignore так, чтобы он игнорировал файлы сборки Terraform. Я использую кучу вспомогательных пакетов NPM:

  • azure-functions-core-tools для команды func.
  • @ffflorian/jszip-cli чтобы ЗААРХИВИРОВАТЬ мои файлы.
  • mkdirp для создания каталогов.
  • npm-run-all и особенно run-s команда для выполнения вещей по порядку.
  • rimraf для удаления вещей.

Ниже приведен код, как package.json выглядит

 {
  "name": "backend",
  "version": "1.0.0",
  "description": "",
  "scripts": {
    "func": "func",
    "clean": "rimraf build",
    "build:compile": "tsc",
    "build:prune": "npm prune --production",
    "prebuild:zip": "mkdirp --mode=0700 build",
    "build:zip": "jszip-cli",
    "build": "run-s clean build:compile build:zip",
    "predeploy": "npm run build",
    "deploy": "terraform apply"
  },
  "dependencies": {
  },
  "devDependencies": {
    "azure-functions-core-tools": "^2.7.1724",
    "@azure/functions": "^1.0.3",
    "@ffflorian/jszip-cli": "^3.0.2",
    "mkdirp": "^0.5.1",
    "npm-run-all": "^4.1.5",
    "rimraf": "^3.0.0",
    "typescript": "^3.3.3"
  }
}
 
  • npm run build будет создан ZIP-файл.
  • npm run deploy создаст ZIP-файл и развернет его в Azure.

Для получения полной информации проверьте приложение функций Azure с помощью Terraform.