Български

Отключете силата на безсървърните изчисления с Google Cloud Functions. Това ръководство разглежда HTTP тригери за изграждане на мащабируеми, събитийни приложения.

Google Cloud Functions: Изчерпателно ръководство за HTTP тригери

Google Cloud Functions (GCF) е безсървърна среда за изпълнение, която ви позволява да изграждате и свързвате облачни услуги. С Cloud Functions вие пишете прости функции с една цел, които са прикрепени към събития, излъчвани от вашата облачна инфраструктура и услуги. Вашата функция се изпълнява, когато събитието, което наблюдавате, се случи. Този подход ви позволява да разработвате управлявани от събития приложения, без да управлявате сървъри или среди за изпълнение.

Един от най-често срещаните начини за задействане на Cloud Function е чрез HTTP заявка. Това ръководство ще навлезе в света на HTTP тригерите в Google Cloud Functions, предоставяйки ви знанията за изграждане на мощни, мащабируеми и рентабилни приложения.

Какво представляват HTTP тригерите?

HTTP тригерът ви позволява да изпълнявате вашата Cloud Function в отговор на HTTP заявка. По същество, когато HTTP заявка бъде изпратена до конкретен URL адрес, Google Cloud Functions автоматично ще изпълни свързаната функция. Това прави HTTP тригерите идеални за изграждане на API, уебкуки и управлявани от събития уеб приложения.

Основни предимства от използването на HTTP тригери:

Създаване на Cloud Function с HTTP тригер

Нека преминем през процеса на създаване на проста Cloud Function с HTTP тригер. Ще създадем функция, която отговаря със съобщение "Hello, World!". Този пример може да бъде адаптиран за различни глобални локали чрез просто модифициране на изходния низ.

Предварителни изисквания:

Стъпки:

  1. Създаване на нов проект (ако нямате такъв):

    Ако все още нямате GCP проект, създайте такъв в Google Cloud Console.

  2. Активиране на Cloud Functions API:

    В Cloud Console навигирайте до Cloud Functions API и го активирайте.

  3. Създаване на директория за функция:

    Създайте нова директория за вашата Cloud Function. Например:

    mkdir hello-http
    cd hello-http
  4. Напишете кода на функцията:

    Създайте файл на име `main.py` (или `index.js` за Node.js) със следния код:

    Python (main.py):

    def hello_http(request):
        """HTTP Cloud Function.
        Args:
            request (flask.Request): The request object.
            <https://flask.palletsprojects.com/en/1.1.x/api/#flask.Request>
        Returns:
            The response text, or any set of values that can be turned into a
            Response object using `make_response`
            <https://flask.palletsprojects.com/en/1.1.x/api/#flask.Flask.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. Създаване на файл с изисквания (само за Python):

    Ако използвате Python, създайте файл на име `requirements.txt` и добавете всички зависимости, от които се нуждае вашата функция. За този пример това не е строго необходимо, но е добра практика да включите такъв. Можете да го оставите празен, ако нямате зависимости.

  6. Внедряване на функцията:

    Използвайте командата `gcloud functions deploy`, за да внедрите вашата функция. Заменете `YOUR_FUNCTION_NAME` с желаното име за вашата функция.

    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

    Обяснение на параметрите:

    • `YOUR_FUNCTION_NAME`: Името, което искате да дадете на вашата Cloud Function.
    • `--runtime`: Средата за изпълнение на вашата функция (напр. `python39`, `nodejs16`).
    • `--trigger-http`: Указва, че функцията трябва да бъде задействана от HTTP заявки.
    • `--allow-unauthenticated`: Позволява на всеки да извика функцията без удостоверяване. Предупреждение: Бъдете внимателни, когато активирате това в производствена среда! Помислете за прилагане на правилно удостоверяване и оторизация.
  7. Тестване на функцията:

    След внедряване, командата `gcloud` ще изведе URL адреса на вашата функция. След това можете да я тествате, като изпратите HTTP заявка до този URL адрес, използвайки инструмент като `curl` или Postman.

    curl YOUR_FUNCTION_URL

    Трябва да видите съобщението "Hello, World!" в отговора. Можете също така да предадете име като параметър за заявка:

    curl "YOUR_FUNCTION_URL?name=YourName"

    Това трябва да върне "Hello, YourName!"

Разбиране на HTTP заявката и отговора

Когато Cloud Function се задейства от HTTP заявка, тя получава обект, съдържащ информация за заявката. Този обект обикновено включва:

Вашата функция след това трябва да върне HTTP отговор, който включва:

Пример: Обработка на различни HTTP методи

Ето пример за това как да обработвате различни HTTP методи във вашата 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`<https://flask.palletsprojects.com/en/2.0.x/api/#flask.Flask.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;
  }
};

Не забравяйте да внедрите актуализираната функция, използвайки командата `gcloud functions deploy`.

Защита на вашите HTTP тригери

Сигурността е от първостепенно значение при работа с HTTP тригери, особено когато се борави с чувствителни данни или критични операции. Ето някои ключови съображения за сигурност:

Удостоверяване и оторизация

По подразбиране Cloud Functions, задействани от HTTP, са публично достъпни, ако използвате `--allow-unauthenticated`. В повечето производствени сценарии ще искате да ограничите достъпа само до оторизирани потребители или услуги. Google Cloud предоставя няколко опции за удостоверяване и оторизация:

Валидиране на входните данни

Винаги валидирайте входните данни, получени от вашата Cloud Function, за да предотвратите уязвимости в сигурността като SQL инжекция или междусайтов скриптинг (XSS). Използвайте подходящи техники за дезинфекция и екраниране, за да се предпазите от злонамерени входни данни.

HTTPS

Уверете се, че вашата Cloud Function е достъпна само чрез HTTPS, за да шифровате комуникацията между клиента и функцията. Google Cloud Functions автоматично предоставя HTTPS крайни точки.

Ограничаване на честотата (Rate Limiting)

Приложете ограничаване на честотата, за да предотвратите злоупотреби и атаки за отказ на услуга (DoS). Можете да използвате услуги като Google Cloud Armor, за да защитите вашите Cloud Functions от прекомерен трафик.

Случаи на употреба за HTTP тригери

HTTP тригерите са многофункционални и могат да се използват в широк спектър от приложения. Ето някои често срещани случаи на употреба:

Примери в различни индустрии

Разширени техники

Използване на променливи на средата

Променливите на средата ви позволяват да конфигурирате вашата Cloud Function, без да кодирате чувствителна информация или стойности на конфигурацията във вашия код. Можете да зададете променливи на средата, използвайки командата `gcloud functions deploy` или в 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

Във вашия код можете да осъществявате достъп до променливи на средата, използвайки речника `os.environ` (Python) или обекта `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}`);
};

Обработка на асинхронни задачи

За дълготрайни или интензивни изчислителни задачи е най-добре да използвате асинхронна обработка, за да избегнете блокиране на HTTP заявката. Можете да използвате услуги като Google Cloud Tasks или Cloud Pub/Sub, за да разтоварите тези задачи в отделни опашки.

Обработка на грешки и регистриране

Приложете стабилна обработка на грешки и регистриране във вашите Cloud Functions, за да идентифицирате и разрешите проблеми бързо. Използвайте Google Cloud Logging, за да събирате логове от вашите функции и да наблюдавате тяхната производителност.

Най-добри практики

Отстраняване на често срещани проблеми

Заключение

Google Cloud Functions с HTTP тригери предоставят мощен и гъвкав начин за изграждане на безсървърни приложения. Чрез разбиране на концепциите и техниките, обсъдени в това ръководство, можете да използвате силата на Cloud Functions, за да създадете мащабируеми, рентабилни и управлявани от събития решения за глобална аудитория. Прегърнете безсървърната революция и отключете пълния потенциал на вашите облачни приложения!