我尝试使用api创建云功能,源代码将在zip存档中提供,其中包含 index.js & package.json 文件。我已将此存档上传到存储桶并通过API请求创建云功能但现在我需要提取此zip存档以指出云功能的来源,我该如何实现?
这就是我所做的: 来自views.py
sclient = storage.Client()
bucket = sclient.get_bucket(func_obj.bucket)
blob = bucket.blob(func_obj.sourceFile.name)
print('Uploading archive...')
print(blob.upload_from_filename(file_name))
name = "projects/{}/locations/us-central1/functions/{}".format(func_obj.project, func_obj.fname,)
print(name)
req_body = {
"name": name,
"entryPoint": func_obj.entryPoint,
"timeout": "3.5s",
"availableMemoryMb": func_obj.fmemory,
# "sourceUploadUrl": upload_url,
"sourceArchiveUrl": "gs://newer_bucket/func.zip",
"httpsTrigger": {},
}
service = discovery.build('cloudfunctions', 'v1')
func_api = service.projects().locations().functions()
response = func_api.create(location='projects/' + func_obj.project + '/locations/us-central1',
body=req_body).execute()
pprint.pprint(response)
答案 0 :(得分:2)
根据Cloud Function Docs,functions.create
REST端点的请求正文必须包含CloudFunction的实例。正如您在第二个链接中看到的,云函数JSON资源的一个字段是"sourceArchiveUrl"
,它指向包含该函数的 zip存档。根据我的理解,您不需要提取 Google Cloud Functions的zip存档来访问代码。检查non-REST API deployment of Cloud Functions;它需要存档,而不是提取的存档。
但无论如何,没有直接的方法来提取存储桶中的存档。您需要在某处下载/传输存档(即本地计算机,Google Compute Engine VM实例等),对其执行提取操作并将结果上传回桶中。 如果您需要提取存档,为什么要将存档上传到Google Cloud Storage存储桶?为什么不上传文件?
您也可以查看this answer。同样的问题,不同的背景。