Был ли опыт миграции с Azure Functions на другую платформу?

«Был ли опыт миграции с Azure Functions на другую платформу?» — вопрос из категории Облачные платформы, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, у меня был опыт миграции набора серверных функций (serverless) с Azure Functions на AWS Lambda. Основной причиной была консолидация всей инфраструктуры проекта в рамках одного облачного провайдера (AWS) для упрощения управления и снижения затрат.

Ключевые шаги и сложности миграции:

  1. Анализ и планирование:

    • Сопоставление триггеров Azure (HTTP, Blob Storage, Service Bus) с их аналогами в AWS (API Gateway, S3, SQS/SNS).
    • Аудит зависимостей и конфигураций (переменные окружения, управляемые идентичности в Azure → IAM роли в AWS).
  2. Переписывание кода:

    • Функции были на C# (.NET Core). Код бизнес-логики в основном остался прежним, но пришлось переписать точки входа (handlers) и интеграции со специфичными сервисами AWS.
    • Пример (Azure → AWS):

      // Было в Azure Functions
      [FunctionName("ProcessBlob")]
      public static void Run([BlobTrigger("container/{name}")] Stream blob, string name, ILogger log)
      
      // Стало для AWS Lambda, реагирующей на S3
      public async Task FunctionHandler(S3Event s3Event, ILambdaContext context)
  3. Инфраструктура как код: Вся новая инфраструктура на AWS была описана с помощью Terraform (ранее использовался ARM в Azure), что сделало процесс повторяемым.

  4. Сложности:

    • Холодный старт (cold start): В AWS Lambda при определённых настройках он был более ощутим, потребовалась оптимизация пакета развёртывания.
    • Мониторинг и логирование: Переход с Azure Application Insights на AWS CloudWatch и X-Ray. Потребовалось время, чтобы настроить аналогичный уровень observability.
    • Поэтапный перенос: Миграция проводилась постепенно, используя стратегию «синего-зелёного» развёртывания, чтобы не прерывать работу сервиса.