gpt4 book ai didi

javascript - process.env 中的用户定义键在 JavaScript Azure Functions 中未定义

转载 作者:行者123 更新时间:2023-12-02 05:53:22 27 4
gpt4 key购买 nike

我正在将 HTTP 触发器函数部署到 Azure Function,但是当我尝试访问 process.env 中的条目时,它返回 undefined。它可以在本地模拟器中运行,但在部署到 Azure 上时不能运行。

<小时/>

在本地和 Azure 上测试运行该函数。

我用一个非常简单的 HTTP 函数对其进行了测试。

import { AzureFunction, Context, HttpRequest } from "@azure/functions";

const httpTrigger: AzureFunction = async function (
context: Context,
req: HttpRequest
): Promise<void> {
context.log(process.env.GCP_SERVICE_ACCOUNT_EMAIL);

context.res = {
body: process.env.GCP_SERVICE_ACCOUNT_EMAIL,
};
};

export default httpTrigger;

本地运行

本地运行时,它会输出local.settings.json中设置的值

[2021-09-11T13:41:27.737Z] Executing 'Functions.HttpTrigger' (Reason='This function was programmatically called via the host APIs.', Id=b9a303aa-5d14-403c-b841-4851f00beb65)
[2021-09-11T13:41:27.768Z] <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d2a1b7a0a4bbb1b78db3b1b1bda7bca692bebdb1b3befca1b7a6a6bbbcb5a1fcb8a1bdbc" rel="noreferrer noopener nofollow">[email protected]</a>
[2021-09-11T13:41:27.848Z] Executed 'Functions.HttpTrigger' (Succeeded, Id=b9a303aa-5d14-403c-b841-4851f00beb65, Duration=126ms)

在 Azure 上运行

但是当在 Azure 上运行时,它输出未定义(来自 Azure 门户中的“监视器”>单个函数的日志)

2021-09-11T13:26:40Z   [Information]   HTTP trigger function processed a request.
2021-09-11T13:26:40Z [Information] undefined

(我通过门户中的 URL 运行它,响应为 500)

记录整个 process.env(在 Azure 上)

我很好奇它会影响其他环境,所以我尝试注销整个 process.env

context.log(process.env)

如您所见,不存在任何自定义环境。 (我省略了一些值)

2021-09-11T13:26:40Z   [Information]   HTTP trigger function processed a request.
2021-09-11T13:26:40Z [Information] { ServiceName: 'service',
PWD: '/',
Fabric_NetworkingMode: 'Other',
Fabric_Id: '',
ASPNETCORE_URLS: 'http://localhost:9091',
AzureWebJobsScriptRoot: '/home/site/wwwroot',
Fabric_ServiceName: 'service',
CONTAINER_NAME: '',
Fabric_Epoch: '',
SUDO_UID: '0',
Fabric_NodeIPOrFQDN: '',
HOST_VERSION: '3.1.4.0',
MESH_INIT_URI: '',
DOTNET_USE_POLLING_FILE_WATCHER: 'true',
SHLVL: '0',
Fabric_ApplicationName: '',
Fabric_CodePackageName: '',
Fabric_ReplicaId: '',
SUDO_COMMAND:
'/azure-functions-host/Microsoft.Azure.WebJobs.Script.WebHost',
Location: '',
WEBSITE_HOME_STAMPNAME: '',
ASPNETCORE_VERSION: '3.0.0',
ResourceGroupName: '',
TERM: 'xterm',
languageWorkers__python__defaultRuntimeVersion: '3.6',
HOME: '/home',
LANG: 'C.UTF-8',
Fabric_ServiceDnsName: '',
LocalSitePackagesPath: '',
CodePackageName: '',
CONTAINER_IMAGE_URL: '',
SubscriptionId:
'',
SUDO_GID: '0',
WEBSITE_PLACEHOLDER_MODE: '1',
CONTAINER_ENCRYPTION_KEY: '',
ResourceName: '',
ResourceType: '',
WEBSITE_CLOUD_NAME: '',
WEBSITE_STAMP_DEPLOYMENT_ID: '',
USER: 'app',
DOTNET_RUNNING_IN_CONTAINER: 'true',
JAVA_HOME: '/usr/lib/jvm/zre-8-azure-amd64',
SUDO_USER: 'root',
SHELL: '/bin/bash',
Fabric_ReplicaName: '0',
HOSTNAME: '',
PATH: '',
CONTAINER_START_CONTEXT_SAS_URI: '',
LOGNAME: 'app',
_: '/usr/bin/setsid',
FUNCTIONS_WORKER_DIRECTORY: '/azure-functions-host/workers/node' }
<小时/>

验证应用程序设置是否正确设置

您可以看到该条目出现在 Function App 门户的配置选项卡中

Azure Portal

此外,在 https://[function-app-name].scm.azurewebsites.net/api/settings 中,您可以看到该 key 存在(我省略了该值,因为它很敏感)

{
"deployment_branch": "master",
"SCM_TRACE_LEVEL": "Verbose",
"SCM_COMMAND_IDLE_TIMEOUT": "60",
"SCM_LOGSTREAM_TIMEOUT": "7200",
"SCM_BUILD_ARGS": "",
"SCM_USE_LIBGIT2SHARP_REPOSITORY": "0",
"APPINSIGHTS_INSTRUMENTATIONKEY": "",
"AzureWebJobsDashboard": "",
"AzureWebJobsStorage": "",
"FUNCTIONS_EXTENSION_VERSION": "",
"GCP_SERVICE_ACCOUNT_EMAIL": "",
"GCP_SERVICE_ACCOUNT_PRIVATE_KEY": "",
"LINE_NOTIFY_TOKEN": "",
"WEBSITE_RUN_FROM_PACKAGE": "",
"AzureWebJobs.TimerTrigger.Disabled": "",
"ScmType": "",
"WEBSITE_SITE_NAME": "",
"WEBSITE_AUTH_ENABLED": "",
"WEBSITE_SLOT_NAME": "",
"SCM_RUN_FROM_PACKAGE": "",
"REMOTEDEBUGGINGVERSION": "",
"FUNCTIONS_RUNTIME_SCALE_MONITORING_ENABLED": "",
"WEBSITE_AUTH_LOGOUT_PATH": "",
"WEBSITE_AUTH_AUTO_AAD": "e"
}
<小时/>

部署方法

我使用 Terraform 进行配置,如 maximivanov/deploy-azure-functions-with-terraform 所示[GitHub]app_settings 中添加了合并环境变量。

variable "function_config" {
type = map(string)
}

resource "azurerm_function_app" "function_app" {
# Other arguments is the same as in the repo

app_settings = merge({
"APPINSIGHTS_INSTRUMENTATIONKEY" = azurerm_application_insights.appInsights.instrumentation_key
"WEBSITE_RUN_FROM_PACKAGE" = ""
}, var.function_config)
}

function_config = {
LINE_NOTIFY_TOKEN = ""
GCP_SERVICE_ACCOUNT_PRIVATE_KEY = ""
GCP_SERVICE_ACCOUNT_EMAIL = ""
}

您在 Portal 和 Kudu 中看到的上述所有环境值均由 Terraform 设置。

其他信息

首先,我通过 VSCode 扩展创建了所有资源。但后来用上面的配置导入到Terraform状态。 (部分资源被替换)

<小时/>

我已经尝试过

  • 从门户恢复 Function App
  • 删除所有函数,然后重新部署它们(我在重新部署之前删除了 dist 文件夹,以确保只有新文件)
  • 强制重新部署应用服务计划和功能应用(通过在 Terraform 中更改其名称),然后重新部署相同的功能。
  • 将应用服务计划操作系统更改为 Windows。 (结果相同)
  • 使用 process.env.KEYprocess.env["KEY"] 访问环境

我不确定我做错了什么,或者我下一步应该尝试,请指教,谢谢!

<小时/>

更新

我尝试仅使用 VSCode 将其部署到单独的资源组(资源不是由 Terraform 创建),并且它有效!这绝对是我的 Terraform 配置的问题(因此添加 terraform 标签)。因此,与此同时,我将尝试将我的 Terraform 配置与 VSCode 扩展自动创建的配置进行比较。

最佳答案

尝试修复问题近 5 个小时后。我发现这是 Function App 中缺少的配置。

FUNCTIONS_WORKER_RUNTIME需要设置为 node(直接从 Visual Studio Code Extension 部署资源时,这是自动完成的)

如果您使用 Terraform

resource "azurerm_function_app" "function" {
# Other arguments

app_settings = {
"FUNCTIONS_WORKER_RUNTIME" = "node"
"SOME_OTHER_SETTINGS" = "..."
}
}

如果未在 Azure 门户中进行配置

enter image description here

关于javascript - process.env 中的用户定义键在 JavaScript Azure Functions 中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69143758/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com