Hrvatski

Otključajte moć serverless računalstva uz Google Cloud Functions. Ovaj vodič istražuje HTTP okidače, pružajući programerima diljem svijeta znanje za izgradnju skalabilnih aplikacija vođenih događajima.

Google Cloud Functions: Sveobuhvatan vodič za HTTP okidače

Google Cloud Functions (GCF) je serverless izvršno okruženje koje vam omogućuje izgradnju i povezivanje usluga u oblaku. Uz Cloud Functions, pišete jednostavne, jednonamjenske funkcije koje su povezane s događajima emitiranim iz vaše infrastrukture i usluga u oblaku. Vaša funkcija se izvršava kada se dogodi događaj koji pratite. Ovaj pristup vam omogućuje razvoj aplikacija vođenih događajima bez upravljanja poslužiteljima ili radnim okruženjima.

Jedan od najčešćih načina za pokretanje Cloud funkcije je putem HTTP zahtjeva. Ovaj vodič će vas dublje uvesti u svijet HTTP okidača u Google Cloud Functions, pružajući vam znanje za izgradnju moćnih, skalabilnih i isplativih aplikacija.

Što su HTTP okidači?

HTTP okidač omogućuje vam izvršavanje vaše Cloud funkcije kao odgovor na HTTP zahtjev. U suštini, kada se HTTP zahtjev pošalje na određeni URL, Google Cloud Functions će automatski izvršiti povezanu funkciju. To čini HTTP okidače idealnima za izgradnju API-ja, web-dojavnika i web aplikacija vođenih događajima.

Ključne prednosti korištenja HTTP okidača:

Stvaranje Cloud funkcije s HTTP okidačem

Prođimo kroz proces stvaranja jednostavne Cloud funkcije s HTTP okidačem. Stvorit ćemo funkciju koja odgovara s porukom "Hello, World!". Ovaj primjer može se prilagoditi za različite globalne lokalitete jednostavnom izmjenom izlaznog niza.

Preduvjeti:

Koraci:

  1. Stvorite novi projekt (ako ga nemate):

    Ako već nemate GCP projekt, stvorite ga u Google Cloud Console.

  2. Omogućite Cloud Functions API:

    U Cloud Console, navigirajte do Cloud Functions API-ja i omogućite ga.

  3. Stvorite direktorij za funkciju:

    Stvorite novi direktorij za svoju Cloud funkciju. Na primjer:

    mkdir hello-http
    cd hello-http
  4. Napišite kod funkcije:

    Stvorite datoteku pod nazivom `main.py` (ili `index.js` za Node.js) sa sljedećim kodom:

    Python (main.py):

    def hello_http(request):
        """HTTP Cloud funkcija.
        Args:
            request (flask.Request): Objekt zahtjeva.
            
        Returns:
            Tekst odgovora, ili bilo koji skup vrijednosti koji se može pretvoriti u
            objekt Response koristeći `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 = 'Svijete'
        return f'Pozdrav, {name}!'

    Node.js (index.js):

    exports.helloHttp = (req, res) => {
      let name = 'Svijete';
      if (req.body.name) {
        name = req.body.name;
      } else if (req.query.name) {
        name = req.query.name;
      }
      res.status(200).send(`Pozdrav, ${name}!`);
    };
  5. Stvorite datoteku sa zahtjevima (samo za Python):

    Ako koristite Python, stvorite datoteku pod nazivom `requirements.txt` i dodajte sve ovisnosti koje vaša funkcija treba. Za ovaj primjer, to nije strogo potrebno, ali je dobra praksa uključiti je. Možete je ostaviti praznom ako nemate nikakvih ovisnosti.

  6. Implementirajte funkciju:

    Koristite naredbu `gcloud functions deploy` za implementaciju vaše funkcije. Zamijenite `YOUR_FUNCTION_NAME` željenim nazivom za vašu funkciju.

    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

    Objašnjenje parametara:

    • `YOUR_FUNCTION_NAME`: Naziv koji želite dati svojoj Cloud funkciji.
    • `--runtime`: Radno okruženje za vašu funkciju (npr. `python39`, `nodejs16`).
    • `--trigger-http`: Određuje da se funkcija treba pokretati HTTP zahtjevima.
    • `--allow-unauthenticated`: Omogućuje bilo kome da pozove funkciju bez autentifikacije. Upozorenje: Budite oprezni pri omogućavanju ovoga u produkcijskim okruženjima! Razmislite o implementaciji pravilne autentifikacije i autorizacije.
  7. Testirajte funkciju:

    Nakon implementacije, `gcloud` naredba će ispisati URL vaše funkcije. Tada je možete testirati slanjem HTTP zahtjeva na taj URL koristeći alat poput `curl` ili Postmana.

    curl YOUR_FUNCTION_URL

    Trebali biste vidjeti poruku "Pozdrav, Svijete!" u odgovoru. Također možete proslijediti ime kao parametar upita:

    curl "YOUR_FUNCTION_URL?name=VašeIme"

    Ovo bi trebalo vratiti "Pozdrav, VašeIme!"

Razumijevanje HTTP zahtjeva i odgovora

Kada se Cloud funkcija pokrene HTTP zahtjevom, ona prima objekt koji sadrži informacije o zahtjevu. Ovaj objekt obično uključuje:

Vaša funkcija bi zatim trebala vratiti HTTP odgovor, koji uključuje:

Primjer: Obrada različitih HTTP metoda

Ovdje je primjer kako obraditi različite HTTP metode u vašoj Cloud funkciji:

Python (main.py):

from flask import escape

def http_method(request):
    """Odgovara na bilo koji HTTP zahtjev.
    Args:
        request (flask.Request): HTTP objekt zahtjeva.
    Returns:
        Tekst odgovora ili bilo koji skup vrijednosti koji se može pretvoriti u
        objekt Response koristeći
        `make_response`.
    """
    if request.method == 'GET':
        return 'Ovo je GET zahtjev!'
    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'Ovo je POST zahtjev s porukom: {message}'
        else:
            return 'Ovo je POST zahtjev bez poruke.'
    else:
        return 'Nepodržana HTTP metoda.', 405

Node.js (index.js):

exports.httpMethod = (req, res) => {
  switch (req.method) {
    case 'GET':
      res.status(200).send('Ovo je GET zahtjev!');
      break;
    case 'POST':
      if (req.body.message) {
        const message = req.body.message;
        res.status(200).send(`Ovo je POST zahtjev s porukom: ${message}`);
      } else {
        res.status(200).send('Ovo je POST zahtjev bez poruke.');
      }
      break;
    default:
      res.status(405).send('Nepodržana HTTP metoda!');
      break;
  }
};

Ne zaboravite implementirati ažuriranu funkciju koristeći naredbu `gcloud functions deploy`.

Osiguranje vaših HTTP okidača

Sigurnost je od presudne važnosti pri radu s HTTP okidačima, posebno kada se radi o osjetljivim podacima ili kritičnim operacijama. Evo nekoliko ključnih sigurnosnih razmatranja:

Autentifikacija i autorizacija

Prema zadanim postavkama, Cloud funkcije pokrenute putem HTTP-a su javno dostupne ako koristite `--allow-unauthenticated`. U većini produkcijskih scenarija, htjet ćete ograničiti pristup ovlaštenim korisnicima ili uslugama. Google Cloud pruža nekoliko opcija za autentifikaciju i autorizaciju:

Validacija unosa

Uvijek provjeravajte ulazne podatke koje prima vaša Cloud funkcija kako biste spriječili sigurnosne ranjivosti kao što su SQL injection ili cross-site scripting (XSS). Koristite odgovarajuće tehnike sanitizacije i izbjegavanja (escaping) kako biste se zaštitili od zlonamjernog unosa.

HTTPS

Osigurajte da je vaša Cloud funkcija dostupna samo preko HTTPS-a kako biste kriptirali komunikaciju između klijenta i funkcije. Google Cloud Functions automatski pruža HTTPS krajnje točke.

Ograničavanje stope zahtjeva

Implementirajte ograničavanje stope zahtjeva (rate limiting) kako biste spriječili zlouporabu i napade uskraćivanja usluge (DoS). Možete koristiti usluge poput Google Cloud Armor za zaštitu vaših Cloud funkcija od prekomjernog prometa.

Slučajevi korištenja za HTTP okidače

HTTP okidači su svestrani i mogu se koristiti u širokom rasponu aplikacija. Evo nekih uobičajenih slučajeva korištenja:

Primjeri iz različitih industrija

Napredne tehnike

Korištenje varijabli okruženja

Varijable okruženja omogućuju vam konfiguriranje vaše Cloud funkcije bez tvrdo kodiranih osjetljivih informacija ili konfiguracijskih vrijednosti u vašem kodu. Možete postaviti varijable okruženja koristeći naredbu `gcloud functions deploy` ili u 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

U svom kodu možete pristupiti varijablama okruženja koristeći rječnik `os.environ` (Python) ili objekt `process.env` (Node.js).

Python:

import os

def your_function(request):
    api_key = os.environ.get('API_KEY')
    # Koristite API ključ u svojoj funkciji
    return f'API ključ: {api_key}'

Node.js:

exports.yourFunction = (req, res) => {
  const apiKey = process.env.API_KEY;
  // Koristite API ključ u svojoj funkciji
  res.status(200).send(`API ključ: ${apiKey}`);
};

Rukovanje asinkronim zadacima

Za dugotrajne ili računalno intenzivne zadatke, najbolje je koristiti asinkronu obradu kako bi se izbjeglo blokiranje HTTP zahtjeva. Možete koristiti usluge poput Google Cloud Tasks ili Cloud Pub/Sub za prebacivanje ovih zadataka u zasebne redove.

Rukovanje pogreškama i zapisivanje (logiranje)

Implementirajte robusno rukovanje pogreškama i zapisivanje u svojim Cloud funkcijama kako biste brzo identificirali i riješili probleme. Koristite Google Cloud Logging za prikupljanje zapisa iz vaših funkcija i praćenje njihove izvedbe.

Najbolje prakse

Rješavanje uobičajenih problema

Zaključak

Google Cloud Functions s HTTP okidačima pruža moćan i fleksibilan način za izgradnju serverless aplikacija. Razumijevanjem koncepata i tehnika o kojima se raspravljalo u ovom vodiču, možete iskoristiti snagu Cloud funkcija za stvaranje skalabilnih, isplativih i rješenja vođenih događajima za globalnu publiku. Prihvatite serverless revoluciju i otključajte puni potencijal svojih aplikacija u oblaku!