Latviešu

Atklājiet Google Cloud Functions bezserveru iespējas. Visaptverošs ceļvedis HTTP aktivizētājiem, dodot zināšanas mērogojamu, notikumu vadītu lietotņu izstrādei.

Google Cloud Functions: Visaptverošs ceļvedis HTTP aktivizētājiem

Google Cloud Functions (GCF) ir bezserveru izpildes vide, kas ļauj veidot un savienot mākoņpakalpojumus. Izmantojot Cloud Functions, jūs rakstāt vienkāršas, viena mērķa funkcijas, kas ir piesaistītas notikumiem, ko ģenerē jūsu mākoņu infrastruktūra un pakalpojumi. Jūsu funkcija tiek izpildīta, kad notiek jūsu vērojamais notikums. Šī pieeja ļauj jums izstrādāt notikumu vadītas lietojumprogrammas, nepārvaldot serverus vai izpildlaikus.

Viens no visizplatītākajiem veidiem, kā aktivizēt Cloud Function, ir ar HTTP pieprasījumu. Šis ceļvedis iedziļināsies HTTP aktivizētāju pasaulē Google Cloud Functions, sniedzot jums zināšanas, lai veidotu jaudīgas, mērogojamas un rentablas lietojumprogrammas.

Kas ir HTTP aktivizētāji?

HTTP aktivizētājs ļauj izpildīt jūsu Cloud Function, reaģējot uz HTTP pieprasījumu. Būtībā, kad HTTP pieprasījums tiek nosūtīts uz noteiktu URL, Google Cloud Functions automātiski izpildīs saistīto funkciju. Tas padara HTTP aktivizētājus ideāli piemērotus API, tīmekļa āķu un notikumu vadītu tīmekļa lietojumprogrammu veidošanai.

Galvenās HTTP aktivizētāju izmantošanas priekšrocības:

Cloud Function izveide ar HTTP aktivizētāju

Iziesim cauri vienkāršas Cloud Function izveides procesam ar HTTP aktivizētāju. Mēs izveidosim funkciju, kas atbild ar ziņojumu "Hello, World!". Šo piemēru var pielāgot dažādām globālām vietējām valodām, vienkārši mainot izvades virkni.

Priekšnosacījumi:

Soļi:

  1. Izveidojiet jaunu projektu (ja jums tāda nav):

    Ja jums vēl nav GCP projekta, izveidojiet to Google Cloud Console.

  2. Iespējojiet Cloud Functions API:

    Cloud Console atveriet Cloud Functions API un iespējojiet to.

  3. Izveidojiet funkciju direktoriju:

    Izveidojiet jaunu direktoriju savai Cloud Function. Piemēram:

    mkdir hello-http
    cd hello-http
  4. Uzrakstiet funkcijas kodu:

    Izveidojiet failu ar nosaukumu `main.py` (vai `index.js` Node.js gadījumā) ar šādu kodu:

    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. Izveidojiet prasību failu (tikai Python):

    Ja izmantojat Python, izveidojiet failu ar nosaukumu `requirements.txt` un pievienojiet visas atkarības, kas jūsu funkcijai ir nepieciešamas. Šim piemēram tas nav stingri nepieciešams, taču laba prakse ir to iekļaut. Varat to atstāt tukšu, ja jums nav nekādu atkarību.

  6. Izvietojiet funkciju:

    Izmantojiet komandu `gcloud functions deploy`, lai izvietotu savu funkciju. Aizstājiet `YOUR_FUNCTION_NAME` ar vēlamo nosaukumu savai funkcijai.

    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

    Parametru skaidrojums:

    • `YOUR_FUNCTION_NAME`: Nosaukums, ko vēlaties piešķirt savai Cloud Function.
    • `--runtime`: Izpildes vide jūsu funkcijai (piem., `python39`, `nodejs16`).
    • `--trigger-http`: Norāda, ka funkcija jāaktivizē ar HTTP pieprasījumiem.
    • `--allow-unauthenticated`: Ļauj ikvienam izsaukt funkciju bez autentifikācijas. Brīdinājums: Esiet piesardzīgi, iespējojot šo ražošanas vidē! Apsveriet iespēju ieviest pareizu autentifikāciju un autorizāciju.
  7. Pārbaudiet funkciju:

    Pēc izvietošanas `gcloud` komanda izvadīs jūsu funkcijas URL. Pēc tam varat to pārbaudīt, nosūtot HTTP pieprasījumu uz šo URL, izmantojot rīku, piemēram, `curl` vai Postman.

    curl YOUR_FUNCTION_URL

    Atbildē vajadzētu redzēt ziņojumu "Hello, World!". Varat arī nodot vārdu kā vaicājuma parametru:

    curl \"YOUR_FUNCTION_URL?name=YourName\"

    Tam vajadzētu atgriezt "Hello, YourName!"

HTTP pieprasījuma un atbildes izpratne

Kad Cloud Function tiek aktivizēta ar HTTP pieprasījumu, tā saņem objektu, kas satur informāciju par pieprasījumu. Šis objekts parasti ietver:

Jūsu funkcijai pēc tam jāatgriež HTTP atbilde, kas ietver:

Piemērs: dažādu HTTP metožu apstrāde

Šeit ir piemērs, kā apstrādāt dažādas HTTP metodes jūsu 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;
  }
};

Atcerieties izvietot atjaunināto funkciju, izmantojot komandu `gcloud functions deploy`.

HTTP aktivizētāju drošība

Drošība ir vissvarīgākā, strādājot ar HTTP aktivizētājiem, īpaši, ja tiek apstrādāti sensitīvi dati vai kritiski svarīgas darbības. Šeit ir daži galvenie drošības apsvērumi:

Autentifikācija un autorizācija

Pēc noklusējuma Cloud Functions, kas tiek aktivizētas ar HTTP, ir publiski pieejamas, ja izmantojat `--allow-unauthenticated`. Lielākajā daļā ražošanas scenāriju jūs vēlēsities ierobežot piekļuvi autorizētiem lietotājiem vai pakalpojumiem. Google Cloud piedāvā vairākas autentifikācijas un autorizācijas iespējas:

Ievades validācija

Vienmēr validējiet ievades datus, ko saņem jūsu Cloud Function, lai novērstu drošības ievainojamības, piemēram, SQL injekciju vai starpvietņu skriptošanu (XSS). Izmantojiet atbilstošas sanācijas un aizsardzības metodes, lai pasargātu no ļaunprātīgas ievades.

HTTPS

Nodrošiniet, lai jūsu Cloud Function būtu pieejama tikai, izmantojot HTTPS, lai šifrētu saziņu starp klientu un funkciju. Google Cloud Functions automātiski nodrošina HTTPS galapunktus.

Pieprasījumu ierobežošana

Ieviesiet pieprasījumu ierobežošanu, lai novērstu ļaunprātīgu izmantošanu un pakalpojumu atteices (DoS) uzbrukumus. Varat izmantot tādus pakalpojumus kā Google Cloud Armor, lai pasargātu savas Cloud Functions no pārmērīgas datplūsmas.

HTTP aktivizētāju lietošanas gadījumi

HTTP aktivizētāji ir daudzpusīgi un tos var izmantot plašā lietojumprogrammu klāstā. Šeit ir daži biežāk sastopami lietošanas gadījumi:

Piemēri dažādās nozarēs

Papildu metodes

Vides mainīgo izmantošana

Vides mainīgie ļauj konfigurēt jūsu Cloud Function, nekodējot sensitīvu informāciju vai konfigurācijas vērtības tieši kodā. Vides mainīgos var iestatīt, izmantojot komandu `gcloud functions deploy` vai 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

Jūsu kodā vides mainīgajiem varat piekļūt, izmantojot `os.environ` vārdnīcu (Python) vai `process.env` objektu (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}`);
};

Asinhrono uzdevumu apstrāde

Ilgiem vai skaitļošanas ziņā intensīviem uzdevumiem vislabāk ir izmantot asinhronu apstrādi, lai izvairītos no HTTP pieprasījuma bloķēšanas. Jūs varat izmantot tādus pakalpojumus kā Google Cloud Tasks vai Cloud Pub/Sub, lai šos uzdevumus novirzītu uz atsevišķām rindām.

Kļūdu apstrāde un žurnālu ierakstīšana

Ieviesiet spēcīgu kļūdu apstrādi un žurnālu ierakstīšanu savās Cloud Functions, lai ātri identificētu un atrisinātu problēmas. Izmantojiet Google Cloud Logging, lai vāktu žurnālus no savām funkcijām un uzraudzītu to veiktspēju.

Labākā prakse

Bieži sastopamu problēmu novēršana

Secinājums

Google Cloud Functions ar HTTP aktivizētājiem nodrošina jaudīgu un elastīgu veidu, kā veidot bezserveru lietojumprogrammas. Izprotot šajā ceļvedī apspriestos jēdzienus un metodes, jūs varat izmantot Cloud Functions jaudu, lai radītu mērogojamus, rentablus un notikumu vadītus risinājumus globālai auditorijai. Apskaujiet bezserveru revolūciju un atveriet pilnu savu mākoņlietojumprogrammu potenciālu!