要为单个触发事件部署单个功能,我们可以按照文档中有关部署Google Cloud Functions的说明进行操作:
gcloud functions deploy NAME --runtime RUNTIME TRIGGER [FLAGS...]
平均部署时间为30s-2m,这是合理的。
但是,我想知道是否可以编写一个脚本(例如在python中)一次部署多个功能?
例如:
//somefile.py
gcloud functions deploy function_1 --runtime RUNTIME TRIGGER [FLAGS...]
gcloud functions deploy function_2 --runtime RUNTIME TRIGGER [FLAGS...]
答案 0 :(得分:1)
我真的很喜欢使用invoke库来解决此类问题。特别是,它非常适合在Python脚本中运行bash命令(例如gcloud
)而不会在subprocess
中造成麻烦。
对于您而言,您可以制作一个外观如下的tasks.py
文件
from invoke import task
@task
def deploy_cloud_functions(c):
c.run('gcloud functions deploy function_1 --runtime RUNTIME TRIGGER [FLAGS...]')
c.run('gcloud functions deploy function_2 --runtime RUNTIME TRIGGER [FLAGS...]')
然后通过调用
运行它invoke deploy-cloud-functions
请注意,如果您为函数
在目录中找到当前可用任务的列表deploy_cloud_functions
命名,则必须使用:invoke deploy-cloud-functions
(请注意-)来调用它。您可以使用invoke --list
您还可以使用线程库对其进行并行化(尽管我尚未在调用自身中测试使用它)。它肯定会在控制台中产生难看的输出。即
from threading import Thread
from invoke import task
@task
def deploy_cloud_functions(c):
Thread(lambda x:
c.run('gcloud functions deploy function_1 --runtime RUNTIME TRIGGER [FLAGS...]')
).start()
Thread(lambda x:
c.run('gcloud functions deploy function_2 --runtime RUNTIME TRIGGER [FLAGS...]')
).start()
答案 1 :(得分:1)
如果您不想只使用python脚本来调用gcloud命令,因为它与执行bash脚本相同,因此可以使用Cloud Functions API Client Library for Python。
该库的作用是创建并执行对Cloud Functions API的HTTP调用。您可以检查Cloud Functions REST reference来查看这些调用的结构以及构建方式。
例如,我做了一个简单的示例来测试此API库,以列出项目中运行的功能:
import httplib2
import pprint
from googleapiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials
credentials = ServiceAccountCredentials.from_json_keyfile_name(
"key.json",
scopes="https://www.googleapis.com/auth/cloud-platform")
http = httplib2.Http()
http = credentials.authorize(http)
service = build("cloudfunctions", "v1", http=http)
operation = service.projects().locations().functions().list(parent='projects/wave16-joan/locations/europe-west1')
pprint.pprint(operation)
您将必须安装模块oauth2client
,google-api-python-client
和httplib2
。如您所见,您将需要创建一个服务帐户才能执行REST API调用,这需要使用“ https://www.googleapis.com/auth/cloud-platform”范围来创建CF。我自己创建了一个具有project/editor
权限的服务帐户,我认为这是创建CF所必需的角色。
最后,要执行此脚本,您只需执行python <script_name>.py
现在,由于您要创建多个函数(请参见here,请参见此API调用的结构),因此,应使用以下服务:
operation = service.projects().locations().functions().create(
location='projects/wave16-joan/locations/europe-west1',
body={
"name":"...",
"entryPoint":"..."
"httpsTrigger": {
"url":"..."
}
}
)
您将必须用一些parameters listed here来填充请求的body
。例如,"name"
键应显示为:
"name":"projects/YOUR_PROJECT/locations/YOUR_PROJECT_LOCATION/functions/FUNCTION_NAME"
请注意,先前文档中列出的大多数主体参数都是可选的,但您需要输入名称,entryPoint,源代码,触发器等。
当然,与创建bash脚本相比,这需要更多的工作,但是结果是更可移植且更可靠,并且允许您创建多个操作以相同的方式部署多个功能。