Lietuvių

Išnaudokite serverless kompiuterijos galią su Google Cloud Functions. Šis vadovas nagrinėja HTTP paleidiklius, suteikdamas kūrėjams visame pasaulyje žinių, reikalingų kurti mastelio keitimui pritaikytas, įvykiais pagrįstas programas.

Google Cloud Functions: Išsamus HTTP paleidiklių vadovas

Google Cloud Functions (GCF) yra serverless vykdymo aplinka, leidžianti kurti ir sujungti debesijos paslaugas. Naudodami Cloud Functions, rašote paprastas, vienos paskirties funkcijas, kurios yra prijungtos prie įvykių, sklindančių iš jūsų debesijos infrastruktūros ir paslaugų. Jūsų funkcija vykdoma, kai įvyksta stebimas įvykis. Šis metodas leidžia kurti įvykiais pagrįstas programas, nevaldant serverių ar vykdymo aplinkų.

Vienas iš labiausiai paplitusių būdų paleisti Cloud funkciją yra per HTTP užklausą. Šis vadovas gilinsis į HTTP paleidiklių pasaulį Google Cloud Functions, suteikdamas jums žinių, kaip kurti galingas, mastelio keitimui pritaikytas ir ekonomiškas programas.

Kas yra HTTP paleidikliai?

HTTP paleidiklis leidžia vykdyti jūsų Cloud funkciją atsakant į HTTP užklausą. Iš esmės, kai HTTP užklausa yra siunčiama į konkretų URL, Google Cloud Functions automatiškai įvykdys susijusią funkciją. Tai daro HTTP paleidiklius idealius kuriant API, webhook'us ir įvykiais pagrįstas interneto programas.

Pagrindiniai HTTP paleidiklių naudojimo privalumai:

Cloud funkcijos su HTTP paleidikliu kūrimas

Pereikime per paprastos Cloud funkcijos su HTTP paleidikliu kūrimo procesą. Sukursime funkciją, kuri atsako „Hello, World!“ žinute. Šį pavyzdį galima pritaikyti įvairioms pasaulinėms lokalizacijoms, tiesiog pakeičiant išvesties eilutę.

Būtinos sąlygos:

Žingsniai:

  1. Sukurkite naują projektą (jei jo neturite):

    Jei dar neturite GCP projekto, sukurkite jį Google Cloud Console.

  2. Įjunkite Cloud Functions API:

    Cloud Console, pereikite į Cloud Functions API ir ją įjunkite.

  3. Sukurkite funkcijos katalogą:

    Sukurkite naują katalogą savo Cloud funkcijai. Pavyzdžiui:

    mkdir hello-http
    cd hello-http
  4. Parašykite funkcijos kodą:

    Sukurkite failą pavadinimu `main.py` (arba `index.js` Node.js atveju) su šiuo kodu:

    Python (main.py):

    def hello_http(request):
        """HTTP Cloud funkcija.
        Args:
            request (flask.Request): Užklausos objektas.
            
        Returns:
            Atsakymo tekstas arba bet koks rinkinys reikšmių, kurias galima paversti
            Response objektu naudojant `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. Sukurkite reikalavimų failą (tik Python):

    Jei naudojate Python, sukurkite failą pavadinimu `requirements.txt` ir pridėkite visas priklausomybes, kurių reikia jūsų funkcijai. Šiam pavyzdžiui tai nėra griežtai būtina, bet tai yra gera praktika. Galite palikti jį tuščią, jei neturite jokių priklausomybių.

  6. Įdiekite funkciją:

    Naudokite `gcloud functions deploy` komandą, kad įdiegtumėte savo funkciją. Pakeiskite `YOUR_FUNCTION_NAME` norimu funkcijos pavadinimu.

    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

    Parametrų paaiškinimas:

    • `YOUR_FUNCTION_NAME`: Pavadinimas, kurį norite suteikti savo Cloud funkcijai.
    • `--runtime`: Jūsų funkcijos vykdymo aplinka (pvz., `python39`, `nodejs16`).
    • `--trigger-http`: Nurodo, kad funkciją turėtų paleisti HTTP užklausos.
    • `--allow-unauthenticated`: Leidžia bet kam iškviesti funkciją be autentifikacijos. Įspėjimas: Būkite atsargūs įjungdami tai gamybinėse aplinkose! Apsvarstykite tinkamos autentifikacijos ir autorizacijos įgyvendinimą.
  7. Išbandykite funkciją:

    Po įdiegimo, `gcloud` komanda išves jūsų funkcijos URL. Tada galite ją išbandyti, siųsdami HTTP užklausą į tą URL, naudodami įrankį, pvz., `curl` ar Postman.

    curl YOUR_FUNCTION_URL

    Atsakyme turėtumėte pamatyti „Hello, World!“ žinutę. Taip pat galite perduoti vardą kaip užklausos parametrą:

    curl "YOUR_FUNCTION_URL?name=YourName"

    Tai turėtų grąžinti „Hello, YourName!“

HTTP užklausos ir atsakymo supratimas

Kai Cloud funkcija yra paleidžiama HTTP užklausa, ji gauna objektą, kuriame yra informacija apie užklausą. Šis objektas paprastai apima:

Tada jūsų funkcija turėtų grąžinti HTTP atsakymą, kuris apima:

Pavyzdys: Skirtingų HTTP metodų tvarkymas

Štai pavyzdys, kaip tvarkyti skirtingus HTTP metodus jūsų Cloud funkcijoje:

Python (main.py):

from flask import escape

def http_method(request):
    """Atsako į bet kokią HTTP užklausą.
    Args:
        request (flask.Request): HTTP užklausos objektas.
    Returns:
        Atsakymo tekstas arba bet koks rinkinys reikšmių, kurias galima paversti
        Response objektu naudojant
        `make_response`.
    """
    if request.method == 'GET':
        return 'Tai yra GET užklausa!'
    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'Tai yra POST užklausa su žinute: {message}'
        else:
            return 'Tai yra POST užklausa be žinutės.'
    else:
        return 'Nepalaikomas HTTP metodas.', 405

Node.js (index.js):

exports.httpMethod = (req, res) => {
  switch (req.method) {
    case 'GET':
      res.status(200).send('Tai yra GET užklausa!');
      break;
    case 'POST':
      if (req.body.message) {
        const message = req.body.message;
        res.status(200).send(`Tai yra POST užklausa su žinute: ${message}`);
      } else {
        res.status(200).send('Tai yra POST užklausa be žinutės.');
      }
      break;
    default:
      res.status(405).send('Nepalaikomas HTTP metodas!');
      break;
  }
};

Nepamirškite įdiegti atnaujintos funkcijos naudodami `gcloud functions deploy` komandą.

HTTP paleidiklių apsauga

Saugumas yra svarbiausias dalykas dirbant su HTTP paleidikliais, ypač kai dirbama su jautriais duomenimis ar kritinėmis operacijomis. Štai keletas pagrindinių saugumo aspektų:

Autentifikacija ir autorizacija

Pagal numatytuosius nustatymus, Cloud funkcijos, paleidžiamos per HTTP, yra viešai prieinamos, jei naudojate `--allow-unauthenticated`. Daugumoje gamybinių scenarijų norėsite apriboti prieigą tik autorizuotiems vartotojams ar paslaugoms. Google Cloud suteikia keletą autentifikacijos ir autorizacijos parinkčių:

Įvesties patvirtinimas

Visada patikrinkite įvesties duomenis, gautus jūsų Cloud funkcijoje, kad išvengtumėte saugumo pažeidžiamumų, tokių kaip SQL injekcija ar tarpvietinis skriptavimas (XSS). Naudokite tinkamas sanitizacijos ir „escaping“ technikas, kad apsisaugotumėte nuo kenkėjiškos įvesties.

HTTPS

Užtikrinkite, kad jūsų Cloud funkcija būtų pasiekiama tik per HTTPS, kad šifruotumėte ryšį tarp kliento ir funkcijos. Google Cloud Functions automatiškai suteikia HTTPS galinius punktus.

Užklausų skaičiaus ribojimas

Įgyvendinkite užklausų skaičiaus ribojimą, kad išvengtumėte piktnaudžiavimo ir paslaugos trikdymo (DoS) atakų. Galite naudoti paslaugas, tokias kaip Google Cloud Armor, kad apsaugotumėte savo Cloud Functions nuo per didelio srauto.

HTTP paleidiklių panaudojimo atvejai

HTTP paleidikliai yra universalūs ir gali būti naudojami įvairiose programose. Štai keletas dažniausiai pasitaikančių panaudojimo atvejų:

Pavyzdžiai iš skirtingų pramonės šakų

Pažangios technikos

Aplinkos kintamųjų naudojimas

Aplinkos kintamieji leidžia konfigūruoti jūsų Cloud funkciją, neįrašant jautrios informacijos ar konfigūracijos verčių tiesiai į kodą. Galite nustatyti aplinkos kintamuosius naudodami `gcloud functions deploy` komandą arba 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

Savo kode galite pasiekti aplinkos kintamuosius naudodami `os.environ` žodyną (Python) arba `process.env` objektą (Node.js).

Python:

import os

def your_function(request):
    api_key = os.environ.get('API_KEY')
    # Naudokite API raktą savo funkcijoje
    return f'API raktas: {api_key}'

Node.js:

exports.yourFunction = (req, res) => {
  const apiKey = process.env.API_KEY;
  // Naudokite API raktą savo funkcijoje
  res.status(200).send(`API raktas: ${apiKey}`);
};

Asinchroninių užduočių tvarkymas

Ilgai trunkančioms ar skaičiavimams imlioms užduotims geriausia naudoti asinchroninį apdorojimą, kad nebūtų blokuojama HTTP užklausa. Galite naudoti paslaugas, tokias kaip Google Cloud Tasks ar Cloud Pub/Sub, kad perkeltumėte šias užduotis į atskiras eiles.

Klaidų tvarkymas ir registravimas

Įgyvendinkite patikimą klaidų tvarkymą ir registravimą savo Cloud funkcijose, kad greitai nustatytumėte ir išspręstumėte problemas. Naudokite Google Cloud Logging, kad rinktumėte žurnalus iš savo funkcijų ir stebėtumėte jų našumą.

Geriausios praktikos

Dažniausių problemų sprendimas

Išvada

Google Cloud Functions su HTTP paleidikliais suteikia galingą ir lankstų būdą kurti serverless programas. Suprasdami šiame vadove aptartas sąvokas ir technikas, galite išnaudoti Cloud Functions galią kurdami mastelio keitimui pritaikytus, ekonomiškus ir įvykiais pagrįstus sprendimus pasaulinei auditorijai. Priimkite serverless revoliuciją ir atskleiskite visą savo debesijos programų potencialą!