我正在编写一个Google云函数。它的部分职责是将文件写入云存储桶。我相信我已经设置了存储桶权限和我的服务帐户等,但是每当我尝试与存储桶交互(上传文件,甚至bucket.exists())时,我都会收到以下错误:
[错误] Worker (pid:12345) 已发送 SIGSEGV!
这看起来像是一个内存错误,但是文件内容很小(37k),就像我说的,当我只调用bucket.exists()时,甚至会发生这种情况。存储桶确实存在,文件路径正确,文件也很好,因为我可以将其写入磁盘并访问它。我的预感是 GCP 身份验证/角色等仍然存在一些问题,但我找不到问题,并且错误没有多大帮助。有什么想法吗?
def upload_blob_from_memory(bucket_name, contents, destination_blob_name):
credentials = service_account.Credentials.from_service_account_file('/my-service-account-creds.json')
storage_client = storage.Client(credentials=credentials,project='my-bucket')
bucket = storage_client.bucket(bucket_name)
# fails here at bucket.exists(), but same issue any time I want to interact with a bucket
print(f"bucket.exists() {bucket.exists()}")
blob = bucket.blob(destination_blob_name)
blob.upload_from_string(contents)
print(
f"{destination_blob_name} with contents {contents} uploaded to {bucket_name}."
)
注意:此功能未部署,我正在本地测试:
functions-framework-python --target my-function
这是一个分段错误。添加
--debug
似乎可以解决这个问题。
老实说,我不知道是什么原因导致此问题,但调试模式可能会为运行时提供更多内存来运行,从而解决问题。