【问题标题】:How can I get current projectId inside Google Cloud Functions?如何在 Google Cloud Functions 中获取当前的 projectId?
【发布时间】:2017-08-31 02:16:07
【问题描述】:

问题很简单。我需要 projectId 才能在 Google Cloud Function 中建立连接。我找到了documentation,它说,projectId 是可选参数,将从 GCLOUD_PROJECT 中检查,但在部署的功能上它不起作用。

所以现在的问题是如何获取 projectId env 变量以便将其作为数据存储连接实例的参数传递,或者应该怎么做才能不传递此 id 并与 Google Cloud Function 内部的数据存储建立连接?

更新 1

我发现我实际上可以从 process.env.GCLOUD_PROJECT 中获取变量,就像任何其他 env.variable 一样。 但是,知道最后一个问题,是否真的可以在没有任何配置对象的情况下使用@google-cloud/datastore?

【问题讨论】:

标签: google-cloud-datastore google-cloud-platform google-cloud-functions


【解决方案1】:

您可以获得const projectId = process.env.GCP_PROJECT的项目ID。 但由于某种原因,运行模拟器时未设置环境变量“GCP_PROJECT”。相反,不推荐使用的变量名称“GCLOUD_PROJECT”是要选择的。所以你可以试试这两个。

const projectId = process.env.GCP_PROJECT || process.env.GCLOUD_PROJECT

【讨论】:

【解决方案2】:

正如我在更新 1 中所写,我们可以从 process.env 变量中获取有关环境的所有信息。

关于@google-cloud/datastore的配置对象的第二个问题,它实际上可以在没有任何选项的情况下工作。它将尝试从环境变量中获取所有必需的参数。因此,由于我的代码中的错误,它不起作用。

【讨论】:

    【解决方案3】:

    答案取决于您使用的运行时。 如果您使用 Python 3.7 和 Go 1.11,那么您很幸运。使用

    process.env.GCP_PROJECT
    

    如果使用任何new runtimes,运气不好,要么访问元数据服务器,要么谷歌suggests

    注意:如果您的函数/应用程序需要以下环境变量之一 较旧的运行时,您可以在部署时设置变量 功能。例如:

    gcloud functions deploy envVarMemory \
    --runtime nodejs10 \
    --set-env-vars FUNCTION_MEMORY_MB=2Gi \
    --memory 2Gi \
    --trigger-http
    

    如果使用 terraform:

    resource "google_cloudfunctions_function" "my-function" {
      name        = "my-function"
      runtime     = "nodejs16"
      environment_variables = {
        GCP_PROJECT = var.project_id
      }
      #...
    }
    

    【讨论】:

      【解决方案4】:

      对于节点 8 之后的任何运行时,您都可以使用 https://www.npmjs.com/package/gcp-metadata

      const gcpMetadata = require('gcp-metadata');
      
      export const getGCPProjectIdFromMetadata = async () => {
          const isAvailable = await gcpMetadata.isAvailable();
      
          if (!isAvailable) {
              return undefined;
          }
      
          return gcpMetadata.project('project-id');
      };
      

      这也适用于您希望启动的任何其他实例(例如应用引擎)。

      【讨论】:

        【解决方案5】:

        使用firebase deploy 进行部署时:

        functions.config().firebase.projectId
        functions.config().firebase.databaseURL
        functions.config().firebase.storageBucket
        functions.config().firebase.locationId
        

        【讨论】:

        • 我刚试过这个,这些变量不会自动设置为firebase deploy。您真的需要为 Firebase Functions 环境手动设置这些变量吗?
        猜你喜欢
        • 2021-12-26
        • 2018-01-28
        • 1970-01-01
        • 2018-12-22
        • 2021-05-25
        • 2021-11-09
        • 2021-08-05
        • 2018-03-27
        • 2017-08-18
        相关资源
        最近更新 更多