将云存储连接到云功能

2024-06-17 13:17:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在GCP上执行云函数时遇到问题,该函数试图更新我的一些google表单。我在Jupyter中使用了这个脚本,但却很难将它虚拟地部署为一个云函数。我的问题似乎是授权CF发布到GoogleSheets

在6个多小时的时间里,我尝试了很多事情,大多数问题都是关于stackoverflow、中型文章github的,但都没有找到适合我的解决方案。我不认为这是一个角色/权限问题。我理解当您在云功能之外而不是在云功能内部时,其中一些可能会起作用

最终,我认为从我所看到的来看,最好的方法是将我的JSON密钥托管在一个存储桶中,并称之为,我尝试了这一点,但没有成功,这似乎有点复杂,因为一切都来自谷歌服务

老实说,我回到了我的原始代码,所以我回到了第一个错误,那就是找不到我的JSON密钥,因为当我在Jupyter中运行它时,它在同一个目录中……因此,我创建了一个google存储桶来尝试链接

import pandas as pd
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import google.cloud
from df2gspread import df2gspread as d2g
from df2gspread import gspread2df as g2d
import datetime
import time
import numpy as np


def myGet(event, context):
    scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
    credentials = ServiceAccountCredentials.from_json_keyfile_name('my-key-name.json', scope)
    gc = gspread.authorize(credentials)

    spreadsheet_key = '--removed actual key/id--'

ERROR: File "/env/local/lib/python3.7/site-packages/oauth2client/service_account.py", line 219, in from_json_keyfile_name with open(filename, 'r') as file_obj: FileNotFoundError: [Errno 2] No such file or directory: 'my-key-name.json'

非常感谢您在这方面给予的指导和支持。我已经仔细研究并试图自己解决这个问题。编辑:请记住,这不是目录中的.py文件,这是我的问题的一部分,我不知道链接到哪里,因为据我所知,这是一个孤立的“云功能”

我在20多次尝试解决此问题的过程中查看了一些链接,仅举几个例子:

How can I get access to Google Cloud Storage using an access and a secret key

Accessing google cloud storage bucket from cloud functions throws 500 error

https://cloud.google.com/docs/authentication/getting-started#auth-cloud-implicit-python

https://cloud.google.com/docs/authentication/getting-started#setting_the_environment_variable

更新: 我意识到你可以上传一个压缩文件,在内联编辑器中显示三个文件。一开始我没有这样做,所以我不知道把JSON键放在哪里。现在我有了它的可视性,需要弄清楚如何在方法中调用它

enter image description here

当我对CF进行测试运行时,我会得到一个非描述错误,它不会出现在日志中,也不能像以前那样从云计划中测试它。我在stack overflow上发现了这一点,感觉我现在需要的是相同的版本,但python版本除外,我需要从google文档中找出要进行的调用

Cloud Functions: how to upload additional file for use in code?


Tags: key函数namefromhttpsimport功能com
3条回答

您需要指定一个相对文件名,例如./my-key-name.json,假设该文件与main.py文件位于同一目录中

我也遇到了同样的问题,解决方法如下:

import google.auth

credentials, _ = google.auth.default()
gc = gspread.authorize(credentials)

那应该对你有用

我的建议是不要在云函数(以及所有GCP产品)中使用JSON密钥文件。与其他GCP产品一样,使用云功能,您可以在部署期间自动加载服务帐户

Cloud Function Identity的优点是,您没有密钥文件可秘密存储,您不必旋转密钥文件以提高安全性,您没有密钥文件泄漏的风险

顺便说一下,在代码中使用default service account

如果需要获取凭证对象,可以使用oauth2 python library进行此操作

import google.auth

credentials, project_id = google.auth.default()

相关问题 更多 >