API REST Google Cloud Functions, functions.patch Ошибка: для функции должен быть указан ровно один триггер - PullRequest
0 голосов
/ 29 марта 2020

Когда я извиняюсь за приведенный ниже код, я получаю сообщение «Для функции должен быть указан ровно один триггер». Когда я указываю триггер, я получаю «Внутренняя ошибка обнаружена». с каждой комбинацией, которую я пробую.

Я пытаюсь добиться отключения облачной функции, и, поскольку нет официального способа, я решил, что я исправлю функцию на что-то вроде тайм-аута 0 или установлю entryPoint на то, что не существует, но ничего не работает.

def patch_gcf_trigger(token_gcf_api):

    headers = {
        'Authorization': 'Bearer ' + token_gcf_api,
        'Accept': 'application/json'
    }

    url = 'https://cloudfunctions.googleapis.com/v1/projects/XXXXX/locations/us-central1/functions'
    r_dataj = requests.get(url, headers = headers).text
    r_data = json.loads(r_dataj)

    functions = r_data['functions']

    for func in functions:

        func_name = func['name']

        if 'cost_capper' in func_name:

            url = 'https://cloudfunctions.googleapis.com/v1/%s' % func_name
            payload = {}
            # payload['eventTrigger'] = {}
            # payload['eventTrigger']['eventType'] = 'google.pubsub.topic.publish'
            # payload['eventTrigger']['resource'] = 'projects/XXXXX/topics/testt'
            # payload['eventTrigger']['service'] = 'pubsub.googleapis.com'
            payload['entryPoint'] = 'testt'
            # payload['timeout'] = '120s'
            payloadj = json.dumps(payload)
            r_dataj = requests.patch(url, payloadj, headers = headers).text
            r_data = json.loads(r_dataj)
            print(r_data)

Функция выглядит следующим образом:

{
    "name": "projects/XXXXX/locations/us-central1/functions/cost_capper",
    "eventTrigger": {
        "eventType": "google.pubsub.topic.publish",
        "resource": "projects/XXXXX/topics/test_billing",
        "service": "pubsub.googleapis.com",
        "failurePolicy": {}
    },
    "status": "ACTIVE",
    "entryPoint": "main_start",
    "timeout": "60s",
    "availableMemoryMb": 256,
    "serviceAccountEmail": "XXXXX@appspot.gserviceaccount.com",
    "updateTime": "2020-03-11T15:03:15.217Z",
    "versionId": "5",
    "labels": {
        "deployment-tool": "console-cloud"
    },
    "sourceUploadUrl": "XXXXXXX",
    "runtime": "python37",
    "ingressSettings": "ALLOW_ALL"
}

1 Ответ

0 голосов
/ 30 марта 2020

Это помогает детально попробовать REST-запросы на боковой панели «Попробуйте» в документации, сообщения об ошибках более подробно там. И посмотрите в инструментах вашего браузера, чтобы увидеть фактический отправленный URL.

Вот что я пропустил:

Вы должны дополнительно предоставить параметр updateMask и указать там, какое поле вы хотите обновите, в моем случае поле eventTrigger. Также вы должны отправить это в качестве параметра url, пока бит json идет в теле запроса.

Сделано так с библиотекой запросов Python:

headers = {
    'Authorization': 'Bearer ' + token_gae_api,
    'Accept': 'application/json'
}

url = 'https://cloudfunctions.googleapis.com/v1/%s' % func_name

params = {}
params['updateMask'] ='eventTrigger'

payload = {}
payload['eventTrigger'] = {}
payload['eventTrigger']['eventType'] = 'google.pubsub.topic.publish'
payload['eventTrigger']['resource'] = 'projects/XXXXX/topics/cwm_trigger_topic'
payload['eventTrigger']['service'] = 'pubsub.googleapis.com'

r_dataj = requests.patch(url, json=payload, params=params, headers=headers).text
r_data = json.loads(r_dataj)

print(r_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...