[ Обновление: Видимо ты может добраться туда отсюда! То есть, если вы используете 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/”