Čeština

Odemkněte sílu serverless computingu s Google Cloud Functions. Tato příručka zkoumá HTTP triggery a poskytuje vývojářům po celém světě znalosti k vytváření škálovatelných aplikací řízených událostmi.

Google Cloud Functions: Komplexní průvodce HTTP triggery

Google Cloud Functions (GCF) je serverless prostředí pro spouštění kódu, které vám umožňuje vytvářet a propojovat cloudové služby. S Cloud Functions píšete jednoduché, jednoúčelové funkce, které jsou připojeny k událostem emitovaným z vaší cloudové infrastruktury a služeb. Vaše funkce se spustí, když nastane událost, kterou sledujete. Tento přístup vám umožňuje vyvíjet aplikace řízené událostmi bez správy serverů nebo běhových prostředí.

Jedním z nejběžnějších způsobů, jak spustit Cloud Function, je prostřednictvím HTTP požadavku. Tato příručka se ponoří do světa HTTP triggerů v Google Cloud Functions a poskytne vám znalosti pro vytváření výkonných, škálovatelných a nákladově efektivních aplikací.

Co jsou HTTP Triggery?

HTTP trigger vám umožňuje spustit vaši Cloud Function v reakci na HTTP požadavek. V podstatě, když je HTTP požadavek odeslán na konkrétní URL, Google Cloud Functions automaticky spustí přidruženou funkci. Díky tomu jsou HTTP triggery ideální pro vytváření API, webhooků a webových aplikací řízených událostmi.

Klíčové výhody používání HTTP Triggerů:

Vytvoření Cloud Function s HTTP Triggerem

Pojďme si projít proces vytváření jednoduché Cloud Function s HTTP triggerem. Vytvoříme funkci, která odpoví zprávou "Hello, World!". Tento příklad lze upravit pro různá globální prostředí jednoduchou úpravou výstupního řetězce.

Předpoklady:

Kroky:

  1. Vytvořte nový projekt (pokud ho ještě nemáte):

    Pokud ještě nemáte projekt GCP, vytvořte jej v Google Cloud Console.

  2. Povolte Cloud Functions API:

    V Cloud Console přejděte na Cloud Functions API a povolte jej.

  3. Vytvořte adresář funkce:

    Vytvořte nový adresář pro vaši Cloud Function. Například:

    mkdir hello-http
    cd hello-http
  4. Napište kód funkce:

    Vytvořte soubor s názvem `main.py` (nebo `index.js` pro Node.js) s následujícím kódem:

    Python (main.py):

    def hello_http(request):
        """HTTP Cloud Function.
        Args:
            request (flask.Request): The request object.
            
        Returns:
            The response text, or any set of values that can be turned into a
            Response object using `make_response`
            .
        """
        request_json = request.get_json(silent=True)
        request_args = request.args
    
        if request_json and 'name' in request_json:
            name = request_json['name']
        elif request_args and 'name' in request_args:
            name = request_args['name']
        else:
            name = 'World'
        return f'Hello, {name}!'

    Node.js (index.js):

    exports.helloHttp = (req, res) => {
      let name = 'World';
      if (req.body.name) {
        name = req.body.name;
      } else if (req.query.name) {
        name = req.query.name;
      }
      res.status(200).send(`Hello, ${name}!`);
    };
  5. Vytvořte soubor požadavků (pouze Python):

    Pokud používáte Python, vytvořte soubor s názvem `requirements.txt` a přidejte všechny závislosti, které vaše funkce potřebuje. Pro tento příklad to není striktně nutné, ale je dobré si jeden zahrnout. Můžete jej nechat prázdný, pokud nemáte žádné závislosti.

  6. Nasaďte funkci:

    Použijte příkaz `gcloud functions deploy` k nasazení vaší funkce. Nahraďte `YOUR_FUNCTION_NAME` požadovaným názvem vaší funkce.

    Python:

    gcloud functions deploy YOUR_FUNCTION_NAME \
        --runtime python39 \
        --trigger-http \
        --allow-unauthenticated

    Node.js:

    gcloud functions deploy YOUR_FUNCTION_NAME \
        --runtime nodejs16 \
        --trigger-http \
        --allow-unauthenticated

    Vysvětlení parametrů:

    • `YOUR_FUNCTION_NAME`: Název, který chcete dát vaší Cloud Function.
    • `--runtime`: Běhové prostředí pro vaši funkci (např. `python39`, `nodejs16`).
    • `--trigger-http`: Určuje, že funkce by měla být spouštěna HTTP požadavky.
    • `--allow-unauthenticated`: Umožňuje komukoli volat funkci bez ověření. Upozornění: Při povolování tohoto nastavení v produkčním prostředí buďte opatrní! Zvažte implementaci správného ověřování a autorizace.
  7. Otestujte funkci:

    Po nasazení příkaz `gcloud` vypíše URL vaší funkce. Poté ji můžete otestovat odesláním HTTP požadavku na tuto URL pomocí nástroje, jako je `curl` nebo Postman.

    curl YOUR_FUNCTION_URL

    Měli byste vidět zprávu "Hello, World!" v odpovědi. Můžete také předat jméno jako parametr dotazu:

    curl "YOUR_FUNCTION_URL?name=YourName"

    Toto by mělo vrátit "Hello, YourName!"

Porozumění HTTP Požadavku a Odpovědi

Když je Cloud Function spuštěna HTTP požadavkem, obdrží objekt obsahující informace o požadavku. Tento objekt obvykle zahrnuje:

Vaše funkce by poté měla vrátit HTTP odpověď, která zahrnuje:

Příklad: Zpracování různých HTTP metod

Zde je příklad, jak zpracovat různé HTTP metody ve vaší Cloud Function:

Python (main.py):

from flask import escape

def http_method(request):
    """Responds to any HTTP request.
    Args:
        request (flask.Request): HTTP request object.
    Returns:
        The response text or any set of values that can be turned into a
        Response object using
        `make_response`.
    """
    if request.method == 'GET':
        return 'This is a GET request!'
    elif request.method == 'POST':
        request_json = request.get_json(silent=True)
        if request_json and 'message' in request_json:
            message = escape(request_json['message'])
            return f'This is a POST request with message: {message}'
        else:
            return 'This is a POST request without a message.'
    else:
        return 'Unsupported HTTP method.', 405

Node.js (index.js):

exports.httpMethod = (req, res) => {
  switch (req.method) {
    case 'GET':
      res.status(200).send('This is a GET request!');
      break;
    case 'POST':
      if (req.body.message) {
        const message = req.body.message;
        res.status(200).send(`This is a POST request with message: ${message}`);
      } else {
        res.status(200).send('This is a POST request without a message.');
      }
      break;
    default:
      res.status(405).send('Unsupported HTTP method!');
      break;
  }
};

Nezapomeňte nasadit aktualizovanou funkci pomocí příkazu `gcloud functions deploy`.

Zabezpečení vašich HTTP Triggerů

Zabezpečení je prvořadé při práci s HTTP triggery, zejména při práci s citlivými daty nebo kritickými operacemi. Zde je několik klíčových bezpečnostních aspektů:

Ověřování a autorizace

Ve výchozím nastavení jsou Cloud Functions spouštěné HTTP veřejně přístupné, pokud použijete `--allow-unauthenticated`. Ve většině produkčních scénářů budete chtít omezit přístup pouze pro autorizované uživatele nebo služby. Google Cloud poskytuje několik možností pro ověřování a autorizaci:

Validace vstupu

Vždy validujte vstupní data přijatá vaší Cloud Function, abyste zabránili bezpečnostním zranitelnostem, jako je SQL injection nebo cross-site scripting (XSS). Použijte vhodné techniky sanitace a escapování k ochraně proti škodlivému vstupu.

HTTPS

Zajistěte, aby byla vaše Cloud Function přístupná pouze přes HTTPS, abyste zašifrovali komunikaci mezi klientem a funkcí. Google Cloud Functions automaticky poskytuje HTTPS koncové body.

Omezení rychlosti

Implementujte omezení rychlosti, abyste zabránili zneužití a útokům typu denial-of-service (DoS). Můžete použít služby jako Google Cloud Armor k ochraně vašich Cloud Functions před nadměrným provozem.

Případy použití pro HTTP Triggery

HTTP triggery jsou univerzální a lze je použít v široké škále aplikací. Zde je několik běžných případů použití:

Příklady napříč různými odvětvími

Pokročilé techniky

Používání proměnných prostředí

Proměnné prostředí vám umožňují konfigurovat vaši Cloud Function bez pevného zakódování citlivých informací nebo konfiguračních hodnot ve vašem kódu. Proměnné prostředí můžete nastavit pomocí příkazu `gcloud functions deploy` nebo v Google Cloud Console.

gcloud functions deploy YOUR_FUNCTION_NAME \
    --runtime python39 \
    --trigger-http \
    --set-env-vars API_KEY=YOUR_API_KEY,DATABASE_URL=YOUR_DATABASE_URL

Ve svém kódu můžete přistupovat k proměnným prostředí pomocí slovníku `os.environ` (Python) nebo objektu `process.env` (Node.js).

Python:

import os

def your_function(request):
    api_key = os.environ.get('API_KEY')
    # Use the API key in your function
    return f'API Key: {api_key}'

Node.js:

exports.yourFunction = (req, res) => {
  const apiKey = process.env.API_KEY;
  // Use the API key in your function
  res.status(200).send(`API Key: ${apiKey}`);
};

Zpracování asynchronních úkolů

Pro dlouhotrvající nebo výpočetně náročné úkoly je nejlepší použít asynchronní zpracování, abyste se vyhnuli blokování HTTP požadavku. Můžete použít služby jako Google Cloud Tasks nebo Cloud Pub/Sub k přesměrování těchto úkolů do samostatných front.

Zpracování chyb a protokolování

Implementujte robustní zpracování chyb a protokolování ve vašich Cloud Functions, abyste rychle identifikovali a vyřešili problémy. Použijte Google Cloud Logging ke shromažďování protokolů z vašich funkcí a sledování jejich výkonu.

Doporučené postupy

Řešení běžných problémů

Závěr

Google Cloud Functions s HTTP triggery poskytují výkonný a flexibilní způsob, jak vytvářet serverless aplikace. Pochopením konceptů a technik popsaných v této příručce můžete využít sílu Cloud Functions k vytváření škálovatelných, nákladově efektivních a událostmi řízených řešení pro globální publikum. Přijměte serverless revoluci a odemkněte plný potenciál vašich cloudových aplikací!