Создать функцию Google из облачной функции Google - PullRequest
0 голосов
/ 10 марта 2020

У меня есть основная облачная функция Google в nodeJS. Внутри этой функции я хочу программно создать другую облачную функцию внутри того же проекта. Код этой новой облачной функции может быть сохранен кем-то в zip-файле в облачном хранилище Google. Я пытался следовать инструкциям здесь: https://cloud.google.com/functions/docs/reference/rest/v1/projects.locations.functions/create

Мне удалось выполнить запрос в тестовом эмуляторе, но когда я запускаю его внутри облачной функции Google, я не знаю точный код! желательно, я хочу сделать это в NodeJS. В противном случае Python.

Может кто-нибудь помочь мне, пожалуйста?

1 Ответ

1 голос
/ 10 марта 2020

Я сделал это в python:

  1. Создать первую облачную функцию hello_world.

  2. Сжать функцию и переместить ее в Google Cloud Storage.

  3. Создайте вторую облачную функцию (по умолчанию создается с учетной записью службы App Engine по умолчанию, которая имеет роль редактора. В случае, если вы будете назначать другую учетную запись службы как личность убедитесь, что у вашей учетной записи службы есть разрешения на запрос сервера метаданных и создание облачных функций)


import requests
import json


def make_func(request):


    # Get the access token from the metadata server
    metadata_server_token_url = 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token?scopes=https://www.googleapis.com/auth/cloud-platform'
    token_request_headers = {'Metadata-Flavor': 'Google'}
    token_response = requests.get(metadata_server_token_url, headers=token_request_headers)
    token_response_decoded = token_response.content.decode("utf-8")
    jwt = json.loads(token_response_decoded)['access_token']

    # Use the api you mentioned to create the function
    response = requests.post('https://cloudfunctions.googleapis.com/v1/projects/your-project/locations/us-central1/functions',
                               json={"name":"projects/your-project/locations/us-central1/functions/funct","runtime":"python37","sourceArchiveUrl":"gs://bucket/main.zip","entryPoint":"hello_world","httpsTrigger": {} },
                               headers={'Accept': 'application/json', 
                                        'Content-Type': 'application/json',
                                        'Authorization': 'Bearer {}'.format(jwt)} )   
    if response:
         return 'Success! Function Created'
    else:
         return str(response.json())  


Дайте мне знать, если у вас есть какие-либо вопросы

...