Рубрики
Без рубрики

Вы не можете добраться туда отсюда: как NetLify Lambda и Firebase привели меня в неверный тупик

[Обновление: видимо вы можете добраться туда отсюда! То есть, если вы используете FireBase-admin вместо @ Google-Cloud / firestore. У меня будет больше на это в будущем, но суть его обобщена здесь.] Некоторое время назад я изучал поддержку NetLify для FaunAdb: NoSQL-ориентированная база данных с некоторыми

[ Обновление: Видимо ты может добраться туда отсюда! То есть, если вы используете Firebase-admin. вместо @ Google-Cloud/firestore Отказ У меня будет больше на это в будущем, но суть его обобщена здесь .]

Некоторое время назад Я изучал Поддержка NetLify для FaunAdb : NoSQL-ориентированная база данных с некоторыми специальными функциями для обрабатывать транзакции по расселенным серверам баз данных . Я решил попробовать это, потому что это был удобный выбор, так как был Пример кода Я мог начать с. Пример использован лямбда функции как интерфейс к базе данных.

Я изменил оригинальные функции лямбда, чтобы поговорить с API fquunadb graphql (вместо fql ). В то время как которые работали В конце концов я почувствовал, что поддержка Fauna GraphQL еще не была довольно спелой, поэтому я оглянулся на альтернативы.

В конце концов я остановился на Облако пожарное Отказ Я основал этот новый проект на примере фауны, обмениваясь Фаунадб модуль с APOLLO-SERVER-LAMBDA Так что я мог бы написать свои собственные API GraphQL API и резольверов.

Одно из уточнений Я должен был сделать Был в том, чтобы протолкнуть все мои функциональные зависимости функций NetLify в папку/функции в моем проекте (отдельно и на одном уровне, что и папка/SRC, которая содержит мой React Client). Для этого я побежал NPM init В то время как внутри папки функций переместили набор зависимостей с пакета верхнего уровня. JSON к новым/функциям/package.json, добавил A WebPack.functions.js затем побежал Пряжа устанавливает Чтобы потянуть пакеты в новую папку Node_Modules.

Результатом было это:

Я поговорю о подпадках позже; Главное, чтобы заметить, что есть файлы пряжи, плюс Package.json, папка Node_modules, папка схемы и некоторые файлы .js для тестирования.

Оригинальный проект используется netlify_lambda Чтобы построить, который использует WebPack и Babel. Я столкнулся с некоторые проблемы Исправлена ими, затем снова бежал в них позже.

Разочарованный, я решил предчувствовать NetLify-Lambda и выбрал NetLify Dev Для создания и развертывания из командной строки. Недостаток заключался в том, что у меня не было возможности запустить локальный сервер, но я мог бы развернуть кандидаты в NetLify и тестировать их без предварительного проверки источника в Github или непосредственно на производство.

Было меньше движущихся частей, поскольку WebPack и Babel больше не нужны. При переходе этого маршрута вы, вероятно, установите переменную среды Aws_lambda_js_runtime к nodejs10.x в Build & Deploy Настройки для ваших функций.

Подробнее с клиентами и серверами GraphQL, чем с помощью лямбда в облаке, у меня были несколько наивных предположений о том, как все было развернуто в NetLify. Я думал, что функции были более или менее скопированы, и построить сценарии, работающие на сервере, где все будут счастливы, и мои функции будут Callable по URL-адресам.

Это совсем не то, что происходит.

Когда я начал с netlify_lambda, он будет использовать WebPack для создания файла вывода функций_будка. Мой конфигурация NetLify.toml имела это как Функции место нахождения.

[build]
  functions = "functions-build"
  # This will be run the site build
  command = "yarn build"
  # This is the directory is publishing to netlify's CDN
  publish = "build"

Когда я переключаюсь на использование NetLify Dev Я рассуждаю с выходной папкой и просто развернул «разобранный»/ Функции источник. Это не конец истории, хотя.

В проекте FAUNADB аутентификация была через переменную среды, значение которой был простым токеном. Аналогичный механизм используется Firebase, но вместо токена значение переменного является путь к файлу учетных данных, которые вы генерируете через консоль Firebase. Функции лямбда создают экземпляр FireBase, и этот экземпляр ищет переменную ENV для поиска файла учетных данных для аутентификации.

Кажется, что независимо от того, где я положил этот файл учетных данных или какой путь, который я использовал, клиент FireBase не сможет его найти. В ходе моего исследования я наткнулся на упоминание о дочерних условиях Zip-It-and-Ship-It Утилита, которые другие люди с другими проблемами рекомендуются для объединения функций в Zip-файлах.

Я попробовал это, изменив процесс сборки, чтобы вызвать сценарий Nodejs, который закрутил мои функции для Функции-dist Папка (изменение netlify.toml config, чтобы не иметь смысла к этому вместо Функции Исходная папка). Хотя не сразу исправить свои проблемы с файлом учетных данных, я заметил некоторые вещи.

Я начал осознавать, что в качестве каждого файла лямбда. Node_Modules папка. Более того, папка Node_Modules была «настроена», чтобы содержать только эти зависимости, явно требуемые каждой функцией.

Умный, но не умный

Это подумало, но я решил, что если я добавил свой файл .json в локальном проекте, затем сделал его зависимостью для каждой функции лямбда, она будет вытянута в папку Node_Modules. В этот момент у меня будет путь: ./creds/mycred.json.json. . Ура!

Это не совсем не работает – когда я осмотрел Zip-файлы, файлы учетных данных были в каждом zip-архиве, но клиент FireBase все еще не мог добраться до них.

Я признал, что мой полный провал на форуме поддержки NetLify, заявив, что планирую присоединиться к коммуне, чтобы научиться плеститься Гамаки Отказ

Должно быть, я вызвал немного жалости, так как Деннис из NetLify вскоре ответил, и дайте мне знать, что функции лямбда не могут на самом деле получить доступ к файловой системе. То, что я пытался (загрузка учетных данных через путь к файлу) было невозможно. Он предложил импортировать файл в каждый лямбда .js (который я уже сделал). Это не появляется, однако, что клиент Firebase позволяет вам тянуть учетные данные через импорт.

Кроме того, Dennis Worked, что, возможно, это не на самом деле подход, который я должен взять, в любом случае. У него был смысл. Единственная причина, по которой я пошел этот маршрут, был, потому что я следовал в одном из примеров NetLify, но обмениваясь Фаунадб пакет с Apollo-Server-лямбда может Просто добавил гораздо больше веса в функции лямбда; Если это так, вероятно, повлияет на разрядное время во время холодно начинается Отказ

Функции лямбда – Не решение для всего Отказ В моем случае я только хотел простого хранения данных с Frestend GraphQL, не подвергая запросы GraphQL в консоли браузера.

Я могу достичь того же концов, имея процесс узела хостит как aDe Client, так и сервер GraphQL. Я (почти) уверен, что я не буду бежать в какие-либо проблемы с доступом в файловой системе, и если так, я переключусь на Еще один метод аутентификации .

Оригинал: “https://www.freecodecamp.org/news/you-cant-get-there-from-here-how-netlify-lambda-and-firebase-led-me-to-a-serverless-dead-end/”