Suomi

Hyödynnä palvelimettoman tietojenkäsittelyn teho Google Cloud Functions -palvelun avulla. Tämä opas perehdyttää HTTP-käynnistimiin ja tarjoaa kehittäjille maailmanlaajuisesti tiedot skaalautuvien, tapahtumapohjaisten sovellusten rakentamiseen.

Google Cloud Functions: Kattava opas HTTP-käynnistimiin

Google Cloud Functions (GCF) on palvelimeton suoritusympäristö, jonka avulla voit rakentaa ja yhdistää pilvipalveluita. Cloud Functions -palvelun avulla kirjoitat yksinkertaisia, yhteen tarkoitukseen keskittyviä funktioita, jotka liitetään pilvi-infrastruktuurisi ja -palveluidesi lähettämiin tapahtumiin. Funktiosi suoritetaan, kun seuraamasi tapahtuma ilmenee. Tämän lähestymistavan avulla voit kehittää tapahtumapohjaisia sovelluksia ilman palvelimien tai suoritusympäristöjen hallintaa.

Yksi yleisimmistä tavoista käynnistää Cloud Function -funktio on HTTP-pyynnön kautta. Tämä opas sukeltaa HTTP-käynnistimien maailmaan Google Cloud Functions -palvelussa tarjoten sinulle tiedot tehokkaiden, skaalautuvien ja kustannustehokkaiden sovellusten rakentamiseen.

Mitä ovat HTTP-käynnistimet?

HTTP-käynnistin mahdollistaa Cloud Function -funktion suorittamisen vastauksena HTTP-pyyntöön. Pohjimmiltaan, kun HTTP-pyyntö lähetetään tiettyyn URL-osoitteeseen, Google Cloud Functions suorittaa automaattisesti siihen liittyvän funktion. Tämä tekee HTTP-käynnistimistä ihanteellisia API-rajapintojen, webhookien ja tapahtumapohjaisten verkkosovellusten rakentamiseen.

HTTP-käynnistimien käytön keskeiset edut:

Cloud Function -funktion luominen HTTP-käynnistimellä

Käydään läpi prosessi, jossa luodaan yksinkertainen Cloud Function -funktio HTTP-käynnistimellä. Luomme funktion, joka vastaa "Hello, World!" -viestillä. Tätä esimerkkiä voidaan muokata eri globaaleille alueille yksinkertaisesti muuttamalla tulostemerkkijonoa.

Edellytykset:

Vaiheet:

  1. Luo uusi projekti (jos sinulla ei ole sellaista):

    Jos sinulla ei vielä ole GCP-projektia, luo sellainen Google Cloud Consolessa.

  2. Ota Cloud Functions API käyttöön:

    Siirry Cloud Consolessa Cloud Functions API:in ja ota se käyttöön.

  3. Luo funktiokansio:

    Luo uusi kansio Cloud Function -funktiollesi. Esimerkiksi:

    mkdir hello-http
    cd hello-http
  4. Kirjoita funktiokoodi:

    Luo tiedosto nimeltä `main.py` (tai `index.js` Node.js:lle) seuraavalla koodilla:

    Python (main.py):

    def hello_http(request):
        """HTTP Cloud Function.
        Args:
            request (flask.Request): Pyyntöobjekti.
            
        Returns:
            Vastausteksti, tai mikä tahansa arvojoukko, joka voidaan muuttaa
            Response-objektiksi käyttämällä `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. Luo vaatimustiedosto (vain Python):

    Jos käytät Pythonia, luo tiedosto nimeltä `requirements.txt` ja lisää siihen mahdolliset riippuvuudet, joita funktiosi tarvitsee. Tässä esimerkissä se ei ole ehdottoman välttämätöntä, mutta on hyvä käytäntö sisällyttää sellainen. Voit jättää sen tyhjäksi, jos sinulla ei ole riippuvuuksia.

  6. Ota funktio käyttöön:

    Käytä `gcloud functions deploy` -komentoa funktion käyttöönottoon. Korvaa `YOUR_FUNCTION_NAME` haluamallasi funktion nimellä.

    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

    Parametrien selitykset:

    • `YOUR_FUNCTION_NAME`: Nimi, jonka haluat antaa Cloud Function -funktiollesi.
    • `--runtime`: Funktion suoritusympäristö (esim. `python39`, `nodejs16`).
    • `--trigger-http`: Määrittää, että funktion tulisi käynnistyä HTTP-pyynnöistä.
    • `--allow-unauthenticated`: Sallii kenen tahansa kutsua funktiota ilman todennusta. Varoitus: Käytä tätä varoen tuotantoympäristöissä! Harkitse asianmukaisen todennuksen ja valtuutuksen käyttöönottoa.
  7. Testaa funktio:

    Käyttöönoton jälkeen `gcloud`-komento tulostaa funktioksesi URL-osoitteen. Voit sitten testata sitä lähettämällä HTTP-pyynnön kyseiseen osoitteeseen työkalulla, kuten `curl` tai Postman.

    curl YOUR_FUNCTION_URL

    Sinun pitäisi nähdä "Hello, World!" -viesti vastauksessa. Voit myös antaa nimen kyselyparametrina:

    curl "YOUR_FUNCTION_URL?name=YourName"

    Tämän pitäisi palauttaa "Hello, YourName!"

HTTP-pyynnön ja -vastauksen ymmärtäminen

Kun Cloud Function -funktio käynnistyy HTTP-pyynnöstä, se vastaanottaa objektin, joka sisältää tietoa pyynnöstä. Tämä objekti sisältää tyypillisesti:

Funktion tulisi sitten palauttaa HTTP-vastaus, joka sisältää:

Esimerkki: Eri HTTP-metodien käsittely

Tässä on esimerkki siitä, miten voit käsitellä eri HTTP-metodeja Cloud Function -funktiossasi:

Python (main.py):

from flask import escape

def http_method(request):
    """Vastaa mihin tahansa HTTP-pyyntöön.
    Args:
        request (flask.Request): HTTP-pyyntöobjekti.
    Returns:
        Vastausteksti tai mikä tahansa arvojoukko, joka voidaan muuttaa
        Response-objektiksi käyttämällä
        `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;
  }
};

Muista ottaa päivitetty funktio käyttöön `gcloud functions deploy` -komennolla.

HTTP-käynnistimien suojaaminen

Tietoturva on ensisijaisen tärkeää HTTP-käynnistimien kanssa työskennellessä, erityisesti kun käsitellään arkaluonteista dataa tai kriittisiä toimintoja. Tässä on joitain keskeisiä turvallisuusnäkökohtia:

Todennus ja valtuutus

Oletusarvoisesti HTTP:n käynnistämät Cloud Functions -funktiot ovat julkisesti saatavilla, jos käytät `--allow-unauthenticated` -lippua. Useimmissa tuotantoskenaarioissa haluat rajoittaa pääsyn valtuutetuille käyttäjille tai palveluille. Google Cloud tarjoaa useita vaihtoehtoja todennukseen ja valtuutukseen:

Syötteen validointi

Validoi aina Cloud Function -funktion vastaanottama syötedata estääksesi tietoturva-aukkoja, kuten SQL-injektiota tai XSS-hyökkäyksiä (cross-site scripting). Käytä asianmukaisia puhdistus- ja escape-tekniikoita suojautuaksesi haitalliselta syötteeltä.

HTTPS

Varmista, että Cloud Function -funktio on käytettävissä vain HTTPS-yhteyden kautta salataksesi asiakkaan ja funktion välisen viestinnän. Google Cloud Functions tarjoaa automaattisesti HTTPS-päätepisteet.

Käyttörajoitukset (Rate Limiting)

Ota käyttöön käyttörajoitukset estääksesi väärinkäytön ja palvelunestohyökkäykset (DoS). Voit käyttää palveluita, kuten Google Cloud Armor, suojataksesi Cloud Functions -funktioitasi liialliselta liikenteeltä.

HTTP-käynnistimien käyttökohteita

HTTP-käynnistimet ovat monipuolisia ja niitä voidaan käyttää monenlaisissa sovelluksissa. Tässä on joitain yleisiä käyttökohteita:

Esimerkkejä eri toimialoilta

Edistyneet tekniikat

Ympäristömuuttujien käyttö

Ympäristömuuttujien avulla voit määrittää Cloud Function -funktiosi ilman, että koodiin tarvitsee kovakoodata arkaluonteisia tietoja tai konfiguraatioarvoja. Voit asettaa ympäristömuuttujia `gcloud functions deploy` -komennolla tai Google Cloud Consolessa.

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

Koodissasi voit käyttää ympäristömuuttujia `os.environ`-sanakirjan (Python) tai `process.env`-objektin (Node.js) avulla.

Python:

import os

def your_function(request):
    api_key = os.environ.get('API_KEY')
    # Käytä API-avainta funktiossasi
    return f'API Key: {api_key}'

Node.js:

exports.yourFunction = (req, res) => {
  const apiKey = process.env.API_KEY;
  // Käytä API-avainta funktiossasi
  res.status(200).send(`API Key: ${apiKey}`);
};

Asynkronisten tehtävien käsittely

Pitkäkestoisille tai laskennallisesti intensiivisille tehtäville on parasta käyttää asynkronista käsittelyä HTTP-pyynnön estämisen välttämiseksi. Voit käyttää palveluita, kuten Google Cloud Tasks tai Cloud Pub/Sub, siirtääksesi nämä tehtävät erillisiin jonoihin.

Virheiden käsittely ja lokitus

Toteuta vankka virheidenkäsittely ja lokitus Cloud Functions -funktioissasi tunnistaaksesi ja ratkaistaksesi ongelmat nopeasti. Käytä Google Cloud Logging -palvelua kerätäksesi lokeja funktioistasi ja valvoaksesi niiden suorituskykyä.

Parhaat käytännöt

Yleisten ongelmien vianmääritys

Yhteenveto

Google Cloud Functions HTTP-käynnistimillä tarjoaa tehokkaan ja joustavan tavan rakentaa palvelimettomia sovelluksia. Ymmärtämällä tässä oppaassa käsiteltyjä käsitteitä ja tekniikoita voit hyödyntää Cloud Functions -palvelun tehoa luodaksesi skaalautuvia, kustannustehokkaita ja tapahtumapohjaisia ratkaisuja maailmanlaajuiselle yleisölle. Ota palvelimeton vallankumous vastaan ja vapauta pilvisovellustesi koko potentiaali!