如何在 Google Cloud Functions 中获取当前的projectId?

问题描述 投票:0回答:10

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

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

更新1

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

google-cloud-datastore google-cloud-platform google-cloud-functions
10个回答
5
投票

您可以获取项目 ID 为

const projectId = process.env.GCP_PROJECT
。 但由于某种原因,运行模拟器时未设置环境变量“GCP_PROJECT”。相反,应选择已弃用的变量名称“GCLOUD_PROJECT”。所以你可以尝试一下它们。

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

4
投票

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

process.env.GCP_PROJECT

如果使用任何新运行时,运气不好,要么访问元数据服务器,要么谷歌建议

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

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
  }
  #...
}

2
投票

在 Cloud Functions v2 公共预览版(2022 年 10 月)下,有一个名为“内置参数”的部分,允许使用“项目 ID”、“数据库 URL”和“存储桶”。 可能还会在此处列出位置 ID(“默认 GCP 资源位置”),尽管当前文档中没有该内容。

我没有让它发挥作用。

但是,这确实:

require

环境变量。总是被定义的。仅当存在活动的 Firebase 项目时才定义

const firebaseConfig = JSON.parse( process.env.FIREBASE_CONFIG ); const locationId_maybe = firebaseConfig.locationId || null; const projectId = firebaseConfig.projectId; const databaseURL = firebaseConfig.databaseURL;
。这是有道理的,因为它需要访问云中的 GCP 项目。

Firebase CLI 11.15.0

    

正如我在更新 1 中所写,我们可以从


1
投票

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

对于 Python 3.9 及更高版本的运行时,您可以使用:


1
投票

这需要安装

from google.auth import default _, project_id = default()
。它可以通过使用元数据服务或加载服务帐户凭据来工作。

如果是 HTTP 函数,我们可以通过 URL 来找出当前项目和区域 

google-cloud-core

0
投票

如果您使用 Firebase,则可以使用 

req.header('host')

0
投票
firebase-admin

projectId
    

试试这个。

0
投票

获取

// package.json { ... "firebase-admin": "^11.11.0", ... }

projectId

    

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

-1
投票

import { getApp } from 'firebase-admin/app'; const projectId = getApp().options.projectId 这也适用于您希望启动的任何其他实例(例如应用程序引擎)。



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

部署时,有: firebase deploy

    

© www.soinside.com 2019 - 2024. All rights reserved.