Terraform с Azure - приложение-функция работает на портале Azure, но не с кодом Terraform. - PullRequest
0 голосов
/ 17 октября 2019

Я использую Terraform с Azure для создания приложения-функции для демонстрации веб-приложения (Pi Calculator с nodejs).

При создании приложения-функции на портале Azure оно работает;используя настройки, как показано ниже.

Функция App Azure Settings

После этого я добавляю новую функцию с «средой разработки» In-portal -> Webhook + API. И это работает!

WorkingPiCalc

Но когда я создаю его с помощью Terraform, он не работает. Я использую этот код:

main.tf

    version = "=1.34.0"
}

resource "azurerm_resource_group" "rg" {
    name     = "rg"
    location = "westeurope"
}

# Create a storage resource
resource "azurerm_storage_account" "picalcstorage" {
  name                     = "picalcstorage"
  resource_group_name      = "${azurerm_resource_group.rg.name}"
  location                 = "${azurerm_resource_group.rg.location}"
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

# Choose a plan
resource "azurerm_app_service_plan" "picalcplan" {
  name                = "picalcplan"
  location            = "${azurerm_resource_group.rg.location}"
  resource_group_name = "${azurerm_resource_group.rg.name}"
  kind                = "FunctionApp"

  sku {
    tier = "Dynamic"
    size = "Y1"
  }
}

resource "azurerm_storage_container" "storagecontainer" {
  name                  = "storagecontainer"
  resource_group_name   = "${azurerm_resource_group.rg.name}"
  storage_account_name  = "${azurerm_storage_account.picalcstorage.name}"
  container_access_type = "private"
}


resource "azurerm_function_app" "picalcfunction" {
  name                      = "picalcfunction"
  location                  = "${azurerm_resource_group.rg.location}"
  resource_group_name       = "${azurerm_resource_group.rg.name}"
  app_service_plan_id       = "${azurerm_app_service_plan.picalcplan.id}"
  storage_connection_string = "${azurerm_storage_account.picalcstorage.primary_connection_string}"


  app_settings = {
    FUNCTIONS_WORKER_RUNTIME = "node" 
  }
}

index.js

// node.js application to calculate pi as a Azure Function App
// P.Burghouwt HHS 2019
// <URL>?n=<number of decimals>  (default=20 if no n specified)
// returns pi and the calculation time as json data
// calculation derived from https://github.com/MikeMcl/decimal.js/issues/9 (Bailey-Borwein-Plouffe)

const Decimal = require("decimal.js");
Decimal.config({precision: 10});
function pi(n) {    
    var p16 = new Decimal(1);
    var pi = new Decimal(0);
    var precision=n;
    Decimal.precision=precision;
    var one = new Decimal(1);
    var two = new Decimal(2);
    var four = new Decimal(4);
    var k8 = new Decimal(0);
    for (var k = new Decimal(0); k.lte(precision); k = k.plus(one)) {
      var f = four.div(k8.plus(1))
          .minus(two.div(k8.plus(4)))
          .minus(one.div(k8.plus(5)))
          .minus(one.div(k8.plus(6)));
      pi = pi.plus(p16.times(f));
      p16 = p16.div(16);
      k8 = k8.plus(8);
    }
    return pi;
}

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');
    if (req.query.n || (req.body && req.body.n)) { 
        var n=(req.query.n || req.body.n)
    }
    else {
        var n=20
    };
    var StartTime = new Date()
    var calculatePi = pi(n)
    var EndTime = new Date() - StartTime 
    context.res = {
             status: 200,   
             body: "{\"PI\":\n {\n  \"decimals\": " + (n) + ",\n  \"ms\": " + JSON.stringify(EndTime) + ",\n  \"value\": " + (calculatePi.toString()) + "\n }\n} "
    };
};

package.json

{
  "name": "picalc",
  "version": "1.0.0",
  "description": "Pi Calculation for node.js",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Pieter Burghouwt",
  "license": "MIT",
  "dependencies": {
    "decimal.js": "^10.2.0"
  }
}

Этополученное сообщение об ошибке:

Сообщение об ошибке

Я пытался несколькими способами изменить асинхронный код, но все равно он не работает.

Любойесть идея, в чем проблема и как я мог бы решить эту проблему? Большое спасибо заранее!

...