Українська

Розкрийте потенціал серверлесс-обчислень з 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): Об'єкт запиту.
            
        Returns:
            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. Створіть файл `requirements.txt` (лише для 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`.
    """
    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-кінцеві точки.

Обмеження швидкості

Реалізуйте обмеження швидкості для запобігання зловживанню та атакам типу "відмова в обслуговуванні" (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')
    # Використовуйте API-ключ у вашій функції
    return f'API Key: {api_key}'

Node.js:

exports.yourFunction = (req, res) => {
  const apiKey = process.env.API_KEY;
  // Використовуйте API-ключ у вашій функції
  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 для створення масштабованих, економічно ефективних та подієво-орієнтованих рішень для глобальної аудиторії. Прийміть революцію серверлес та розкрийте повний потенціал ваших хмарних додатків!