Если вы не хотите просто использовать скрипт python для вызовов команды gcloud, поскольку это то же самое, что и скрипт bash, вы можете использовать клиентскую библиотеку Cloud Functions API для Python .
Что делает эта библиотека, так это создает и выполняет HTTP-вызовы к Cloud Functions API . Вы можете проверить Ссылка REST Cloud Functions , чтобы увидеть, как эти вызовы структурированы и как их создавать.
Например, я сделал быстрый пример для тестирования этой библиотеки 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
. Как видите, вам нужно будет создать учетную запись службы для выполнения вызовов API REST, для которой требуется "https://www.googleapis.com/auth/cloud-platform" область действия для создания CF. Я сам создал учетную запись службы с разрешениями project/editor
, которая Я считаю, что это необходимые роли для создания CF.
Наконец, чтобы выполнить этот скрипт, вы можете просто сделать python <script_name>.py
Теперь, так как вы хотите создать несколько функций (посмотрите, как должен быть структурирован этот вызов API здесь ), вместо этого должна вызываться следующая служба:
operation = service.projects().locations().functions().create(
location='projects/wave16-joan/locations/europe-west1',
body={
"name":"...",
"entryPoint":"..."
"httpsTrigger": {
"url":"..."
}
}
)
Вам нужно будет заполнить body
запроса некоторыми из параметров, перечисленных здесь . Например, ключ "name"
должен выглядеть следующим образом:
"name":"projects/YOUR_PROJECT/locations/YOUR_PROJECT_LOCATION/functions/FUNCTION_NAME"
В качестве примечания, большинство параметров тела, перечисленных в предыдущей документации, являются необязательными, но вам потребуется имя, entryPoint, источник, триггер и т. Д.
Конечно, это требует больше работы, чем создание bash-скрипта, но результат является более переносимым и надежным, и это позволит вам создавать несколько операций для одновременного развертывания нескольких функций.