Chcę wyzwalać funkcję HttpTrigger codziennie o godzinie 21:00 przy użyciu wyzwalacza timera. Czy jest to możliwe w Azure Function dla Pythona?

Nie jestem w stanie zrozumieć, jak mogę to wdrożyć? Czy jest sposób na zrealizowanie powyższego scenariusza?

Sprawdź poniższy kod.

Kod funkcji HttpTrigger

import logging

import azure.functions as func


def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')
            logging.info(name)

    if name:
        return func.HttpResponse(f"Hello {name}!")
    else:
        return func.HttpResponse(
             "Please pass a name on the query string or in the request body",
             status_code=400
        )

Kod funkcji TimerTrigger :-

import datetime
import logging
import requests

import azure.functions as func


def main(mytimer: func.TimerRequest) -> None:
    utc_timestamp = datetime.datetime.utcnow().replace(
        tzinfo=datetime.timezone.utc).isoformat()

    if mytimer.past_due:
        logging.info('The timer is past due!')

    logging.info('Python timer trigger function ran at %s', utc_timestamp)

    url = '<My URL>'
    PARAMS = {"name": "Akshay"}

    response_decoded_json = requests.post(url=url, params =PARAMS)
    print(response_decoded_json.text)
    logging.info("Result is :- ")
    logging.info(response_decoded_json.text)

Sprawdź poniższy obraz dziennika błędów :-

enter image description here

0
Akshay Godase 5 grudzień 2019, 15:12
Jakieś aktualizacje w tej sprawie?
 – 
George Chen
7 grudzień 2019, 18:14
Mam do czynienia z problemem The timer is past due! w funkcji TimerTrigger.
 – 
Akshay Godase
10 grudzień 2019, 08:21

1 odpowiedź

Oczywiście jest to dostępne, po prostu w funkcji wyzwalania timera wykonaj żądanie get / post. Poniżej znajduje się mój kod testowy.

import datetime
import logging
import requests

import azure.functions as func

def main(mytimer: func.TimerRequest) -> None:
    utc_timestamp = datetime.datetime.utcnow().replace(
        tzinfo=datetime.timezone.utc).isoformat()

    if mytimer.past_due:
        logging.info('The timer is past due!')

    logging.info('Python timer trigger function ran at %s', utc_timestamp)
    url = 'your function url'
    PARAMS = {"name": "test"}

    response_decoded_json = requests.post(url=url, params =PARAMS)
    print(response_decoded_json.text)

enter image description here

Otrzymałem odpowiedź z funkcji wyzwalacza http, zgodnie z twoim wymaganiem zmień wyrażenie cron na 0 0 21 * * *.

Aktualizacja: testuję, że jest dostępna.

enter image description here

Kod funkcji timera:

import datetime
import logging
import requests

import azure.functions as func


def main(mytimer: func.TimerRequest) -> None:
    utc_timestamp = datetime.datetime.utcnow().replace(
        tzinfo=datetime.timezone.utc).isoformat()

    if mytimer.past_due:
        logging.info('The timer is past due!')

    logging.info('Python timer trigger function ran at %s', utc_timestamp)
    url = 'https://functionname.azurewebsites.net/api/httptest?code=master key'
    PARAMS = {"name": "test"}

    response_decoded_json = requests.post(url=url, params =PARAMS)
    logging.info(response_decoded_json.text)

Kod funkcji HTTP:

import logging

import azure.functions as func


def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        return func.HttpResponse(f"Hello {name}!")
    else:
        return func.HttpResponse(
             "Please pass a name on the query string or in the request body",
             status_code=400
        )

Podczas przesyłania funkcji pamiętaj, aby dodać requests==2.22.0 w requirements.txt.

Załóżmy, że głównym problemem jest uzyskanie adresu URL funkcji httptrigger. Adres URL głównym parametrem, którego potrzebujesz, to nazwa aplikacji funkcji, nazwa funkcji i klucz główny (lub klucz domyślny). Nazwę aplikacji funkcji i nazwę funkcji właściwie już znasz.

O kodzie (kluczu), możesz najpierw wdrożyć dowolną funkcję, a następnie przejdź do strony zarządzania, gdzie będziesz mógł pobrać kod i wkleić po adresie URL, otrzymasz pełny adres URL wyzwalacza http. Następnie wgraj dwie funkcje, będzie dobrze.

enter image description here

1
George Chen 6 grudzień 2019, 12:57
Komentarze nie są przeznaczone do dłuższej dyskusji; ta rozmowa została przeniesiona do czat.
 – 
Samuel Liew
9 grudzień 2019, 16:08