Google Cloud Function环境变量目录

时间:2018-08-13 19:51:33

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

我的Cloud Function正常工作,但是现在我想用环境变量来模糊一些凭证。当我尝试运行此命令时:

gcloud beta functions deploy my-function --trigger-http --set-env-vars user=username,pass=password --runtime nodejs6 --project my-project

我收到此错误:

ERROR: (gcloud.beta.functions.deploy) OperationError: code=3, message=Function load error: File index.js or function.js that is expected to define function doesn't exist in the root directory.

我使用GCP Web UI创建了该函数,但找不到 cd 所在的目录。大概可以从该函数所在的目录中运行相同的命令。

云功能在我的项目中住哪里?

1 个答案:

答案 0 :(得分:1)

如果选中the details of the function deployment on the logs,则会注意到protoPayload.request.function.sourceUploadUrl字段包含一个URL,在部署期间该URL会将您的源代码上传到该URL。

此URL的格式为https://storage.googleapis.com/gcf-upload-<region>-<random>/<random>.zip。这意味着该功能已上传到该GCS存储桶。该GCS存储桶不在您的项目中(它来自Google),因此您将无法直接访问这些文件。您可以通过控制台下载存储在该存储桶中的文件(源页面上的“下载zip”按钮)。

也可以通过

找到上传存储桶
gcloud functions list --format='table[](name,sourceUploadUrl)'

知道这一点,您有2条路径:

  • 使用另一种部署功能的方式(例如从源存储库中部署)
  • 使用API​​ patch函数

我偏爱第二种选择,因为它很容易执行:

curl -XPATCH -H"Authorization: Bearer $(gcloud auth print-access-token)" -H'content-type:application/json' 'https://cloudfunctions.googleapis.com/v1/projects/<PROJECT_ID>/locations/<REGION>/functions/<FUNCTION_ID>?updateMask=environmentVariables' -d'{"environmentVariables":{"user":"<USERNAME>", "password":"<PASSWORD>"}}'

但是,如果您需要访问与Google相关的任何地方,而不是传递用户名/密码,则最好使用应用程序默认凭据,并提供对资源上服务帐户的访问权限。要查找您的功能使用的服务帐户,可以运行:

gcloud functions list --format='table[](name,serviceAccountEmail)'