Разработка Serverless Functions для сайта (Google Cloud Functions)

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Разработка Serverless Functions для сайта (Google Cloud Functions)
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Разработка Serverless Functions для сайта (Google Cloud Functions)

Google Cloud Functions (2nd gen) — serverless-функции на базе Cloud Run. В отличие от 1st gen, 2nd gen поддерживает до 60 минут выполнения, несколько одновременных запросов на один экземпляр и более широкий выбор рантаймов: Node.js, Python, Go, Java, .NET, Ruby, PHP.

Первое поколение vs второе

2nd gen функции используют Cloud Run под капотом. Это даёт: concurrency до 1000 запросов на экземпляр (vs 1 в 1st gen), поддержку VPC Connector, больший лимит памяти (32 GB), кастомные домены без проксирования.

Пример функции: обработка вебхука

import functions_framework
import json
import hmac
import hashlib
from google.cloud import pubsub_v1

publisher = pubsub_v1.PublisherClient()
TOPIC_PATH = "projects/my-project/topics/webhook-events"

@functions_framework.http
def process_webhook(request):
    # Проверка подписи
    signature = request.headers.get("X-Signature-256", "")
    secret = get_secret("webhook-secret")

    expected = "sha256=" + hmac.new(
        secret.encode(), request.data, hashlib.sha256
    ).hexdigest()

    if not hmac.compare_digest(signature, expected):
        return json.dumps({"error": "Invalid signature"}), 401, {"Content-Type": "application/json"}

    event = request.get_json()

    # Публикуем в Pub/Sub для асинхронной обработки
    publisher.publish(TOPIC_PATH, json.dumps(event).encode("utf-8"))

    return json.dumps({"received": True}), 200, {"Content-Type": "application/json"}

Функция на Node.js с TypeScript

import { http, HttpFunction } from "@google-cloud/functions-framework";
import { SecretManagerServiceClient } from "@google-cloud/secret-manager";

const secretClient = new SecretManagerServiceClient();

const contactForm: HttpFunction = async (req, res) => {
  res.set("Access-Control-Allow-Origin", "https://your-site.com");

  if (req.method === "OPTIONS") {
    res.set("Access-Control-Allow-Methods", "POST");
    res.set("Access-Control-Allow-Headers", "Content-Type");
    res.status(204).send("");
    return;
  }

  if (req.method !== "POST") {
    res.status(405).json({ error: "Method not allowed" });
    return;
  }

  const { name, email, message } = req.body;

  // Получение API-ключа из Secret Manager
  const [version] = await secretClient.accessSecretVersion({
    name: "projects/my-project/secrets/sendgrid-api-key/versions/latest"
  });
  const apiKey = version.payload?.data?.toString();

  await sendEmail({ name, email, message, apiKey });
  res.json({ ok: true });
};

http("contactForm", contactForm);

Деплой

# Node.js
gcloud functions deploy contact-form \
  --gen2 \
  --runtime nodejs20 \
  --region europe-west1 \
  --source . \
  --entry-point contactForm \
  --trigger-http \
  --allow-unauthenticated \
  --memory 256MB \
  --timeout 30s

# Python
gcloud functions deploy process-webhook \
  --gen2 \
  --runtime python312 \
  --region europe-west1 \
  --source . \
  --entry-point process_webhook \
  --trigger-http \
  --memory 512MB

Переменные окружения

gcloud functions deploy my-function \
  --set-env-vars DATABASE_URL=postgresql://...,NODE_ENV=production

# Или через Secret Manager (рекомендуется для секретов)
gcloud functions deploy my-function \
  --set-secrets 'API_KEY=my-secret:latest'

Функция-подписчик Pub/Sub

@functions_framework.cloud_event
def process_pubsub_message(cloud_event):
    import base64

    data = base64.b64decode(cloud_event.data["message"]["data"]).decode("utf-8")
    event = json.loads(data)

    # Обработка события: синхронизация с CRM, отправка уведомления, etc.
    handle_event(event)

Запускается автоматически при публикации сообщения в топик Pub/Sub.

Подключение к Cloud SQL

Для PostgreSQL/MySQL используйте Cloud SQL Auth Proxy через Unix socket — не TCP:

import sqlalchemy

def create_engine():
    return sqlalchemy.create_engine(
        f"postgresql+pg8000://user:pass@/dbname",
        creator=lambda: pg8000.connect(
            user="user",
            password="pass",
            database="dbname",
            unix_sock="/cloudsql/project:region:instance/.s.PGSQL.5432"
        )
    )

В Cloud Run (и Cloud Functions 2nd gen) Cloud SQL Auth Proxy запускается как sidecar автоматически при указании --add-cloudsql-instances.

CI/CD через Cloud Build

# cloudbuild.yaml
steps:
  - name: node:20
    entrypoint: npm
    args: [install]

  - name: node:20
    entrypoint: npm
    args: [run, build]

  - name: gcr.io/google.com/cloudsdktool/cloud-sdk
    args:
      - gcloud
      - functions
      - deploy
      - contact-form
      - --gen2
      - --region=europe-west1
      - --source=.
      - --runtime=nodejs20
      - --entry-point=contactForm
      - --trigger-http

Сроки

Базовые функции с деплоем и переменными окружения — 2–3 дня. Pub/Sub интеграция и Cloud SQL — плюс 2 дня.