NodeJS 如何在部署之前测试google functions framework环境变量?

dm7nw8vv  于 12个月前  发布在  Node.js
关注(0)|答案(1)|浏览(135)

我想为GCF(节点版本)设置环境变量,我在这里遵循指南:https://cloud.google.com/functions/docs/configuring/env-var#setting_runtime_environment_variables
根据这些文档,添加环境变量的步骤都需要一个部署步骤,例如gcloud functions deploy <FUNCTION_NAME> --env-vars-file .env.yaml <FLAGS>。这对我来说是不直观的,因为我需要首先在本地测试我的更改,以确保它们在部署它们之前工作。我在这里错过了什么,或者只是框架违反了最小惊喜原则的时刻?
我尝试使用npx functions-framework --env-vars-file .env-dev.yaml运行本地函数,但env-vars-file选项似乎在此上下文中被忽略。我还尝试使用dotenv-yaml,但我不确定如何将其与npx functions-framework结合使用。
一个笨拙的解决方法是可用的.但是我不喜欢为dev做一些事情,比如只为本地dev做FOO=bar npx functions-framework。如果有两个结构相同的yaml文件,一个用于dev,一个用于prod,那么在有很多变量的情况下会更容易管理。
TLDR:Google Cloud函数希望我将env vars保存在yaml中,那么在部署它们之前,我如何使用我的node函数在本地测试它们?

muk1a3rh

muk1a3rh1#

受John汉利实用建议的启发,这种变通方法对于我的目的来说是可以接受的。它可能可以重构,但它现在已经完成了工作。如果函数框架在运行步骤中支持yaml env文件(用于节点运行时),那么这将是不必要的。根据Google的文档,如果使用buildpacks or containers,这也可能是不必要的,我们目前还没有。
package.json:

...
"scripts": {
   "dev": "env MY_PROJECT_ENV=dev npx functions-framework"
},
...

字符串
constants.js:

const ENV = process.env.AI_LABS_ENV || 'prod'

let envVars = {}
if (ENV === 'dev') {
  // import asynchronously so unnecessary imports do not occur in production
  const yaml = await import('js-yaml')
  const fs = await import('fs')
  const path = await import('path')
  try {
    envVars = yaml.load(fs.readFileSync(path.resolve('.env-dev.yaml'), 'utf8'))
  } catch (e) {
    console.log('error attempting to load .env-dev.yaml. Does the file exist in the root directory?')
    console.log(e)
  }
} else {
  envVars = process.env
}

const MY_VAR = envVars.MY_VAR

相关问题