Путешествие без сервера Alibaba Cloud

Serverless

В этой статье кратко изложены некоторые проблемы и решения, возникающие при разработке с помощью Alibaba Cloud serverless (далее именуемые «бессерверные»). .

Как выбрать инструменты разработки?

В связи с безсерверностью предоставляется 4 инструмента для разработки. Его можно разделить на две категории, одна из которых — инструмент командной строки:fcliа такжеfuncraft. Funcraft — это набор инструментов с гораздо более богатыми функциями, чем у fcli (не знаю, какие преимущества у fcli перед funcraft, меньше и легче?), да и документация гораздо более полная. Но отладка кода в командной строке — это боль, поэтому во всех примерах отладки в официальной документации funcraft рекомендуется использовать плагин VSCode (далее — «плагин»). Плагин VSCode основан на funcraft.

Другая категория — инструменты графического интерфейса:Web IDEа такжеVSCodeплагин. Оба инструмента имеют похожие функции, и Web IDE кажется более удобной в использовании, но автор все же рекомендует использовать плагин VSCode. Причина очень проста: Serverless не поддерживает функцию отката версии, поэтому код должен быть синхронизирован с репозиторием git, а Web IDE - нет. Для тех, кто поддерживает операции, связанные с git, даже если они это делают, небезопасно размещать информацию об авторизации на удаленном компьютере. Даже если это не на удаленно, более проблематично вводить пароль учетной записи каждый раз, когда код синхронизируется.

**Вывод: Плагин рекомендуется, хотя он глючит и плохо документирован. Но он уже может соответствовать функциям отладки разработки и управления кодом. ** Мы также используем плагины в качестве инструмента для анализа следующего контента.

Как изменить информацию о локальной конфигурации?

При использовании плагина необходимо сначала привязать учетную запись и выбрать соответствующую область. Он включает в себя два вычисления функций (вычисление функций) и поток функций (поток функций), которые пока не используются при разработке потока функций.Здесь мы поговорим о мерах предосторожности при использовании вычислений функций. Функция Вычислительные функции делятся на две части: локальные службы/функции (LOCAL RESOURCES) и удаленные службы/функции (REMOTE RESOURCES). Удаленные сервисы/функции относительно бесполезны, они могут только перечислить все сервисы и функции в текущей области и не могут изменять конфигурацию, просматривать журналы и т. д., можно вызывать и выполнять только функции событийного типа, а HTTP-функции — нет. Местная служба/функция найдетв текущем рабочем каталогеизtemplate.ymlфайл, а затем список служб/функций на основе информации о конфигурации. При создании бессерверного проекта с помощью плагина по умолчанию он будет создан в виде «имя службы/название функции», это можно изменить в template.yml, а соответствующий атрибутCodeUri.

Вывод: с помощью файла template.yml в корневом каталоге бессерверного проекта, а затем развернув соответствующую службу/функцию, вы можете изменить некоторую информацию о конфигурации службы и функции.

Как плагин реализует локальную отладку?

Docker должен быть установлен для локальной разработки и отладки.Во время разработки и отладки подключаемый модуль будет извлекать образ Docker, начинающийся с «aliyunfc», запускать контейнер через образ в качестве среды разработки и развертывать код в этом контейнере и выполнить его. Этот контейнер не будет создаваться при запуске/отладке, а будет создаваться и запускаться только при вызове функции, при этом он является лишь временной рабочей средой и будет уничтожен после выхода из программы. Поэтому, когда мы сталкиваемся с проблемами во время выполнения, мы также можем напрямую войти в контейнер для устранения неполадок. При выполнении локальной разработки и отладки соответствующие команды будут выполняться через терминал VSCode, но информация, отображаемая терминалом, неполная, поэтому иногдаЕсли вы нажимаете кнопку отладки или запуска, а консоль не выводит достоверную информацию, вам нужно терпеливо ждать, вполне вероятно, что команда выполняется в фоновом режиме..Вывод: рекомендуется изучить базовые знания Docker для облегчения устранения неполадок и решения проблем при использовании плагинов.

Как управлять зависимостями?

Serverless очень неудобен для управления зависимостями, его нужно загружать вручную во время развертывания, и он не может быть установлен автоматически в соответствии с файлом конфигурации. Также возможно принудительно выполнить автоматическую установку. Сначала скопируйте код и файлы конфигурации модуля через подпроцесс в/tmp(Только этот каталог имеет разрешение на запись), затем вызовите соответствующую команду установки модуля для установки и, наконец, в/tmpКаталог вызывается и выполняется посредством подпроцесса. Это увеличит количество кода (относительно бросания), что подходит для инженеров с сильными практическими способностями и достаточным количеством времени.

Официально рекомендуемый способ — упаковать и загрузить локальный код и зависимости вместе. Это может легко вызвать проблемы~ Большую часть времени разработки будет поддерживать зависимые модули через файл конфигурации.С одной стороны, это ради экономии места для хранения, а другой важной причиной является рассмотрение совместимости системной платформы. Некоторые модули поддерживают несколько систем, но каждая система выполняет разные файлы кода. Бессерверная удаленная операционная среда — это linux.Если случится так, что инженер-разработчик использует систему, отличную от Linux, а модуль также поддерживает несколько систем, это будет немного проблематично, потому что модули, разработанные локально и удаленно развернутые, несовместимы. Так что это также мой сильный толчок к разработке и развертыванию через контейнеры Docker в команде, а также к написанию«Удивительный инженер JavaScript») — важная причина выделить Docker.

Сторонние модули для проектов Python требуют некоторой ручной работы. В настоящее время мой подход состоит в том, чтобы пройтиPython -m venv xxкоманда для создания виртуальной среды в контейнере черезpip freezeкоманда для экспорта модуля, а затем скопировать модуль в корневой каталог проектаmodules/каталог, а в кодеsys.pathДобавьте этот каталог.Вывод: Для обеспечения согласованности локальных/удаленных модулей рекомендуется устанавливать в Docker-контейнер, но так как каталог кода доступен только для чтения, модули нужно копировать вручную.

Что делать, если скорость загрузки низкая?

Использование прокси - это традиционный выбор, материалов в сети много, и среда прокси для разных языков разная, здесь я ее представлять не буду. Сосредоточьтесь на другом способе мышления. Проблема, возникающая при использовании бессерверной интеграции для непрерывной интеграции, заключается в том, что каждый раз, когда код извлекается из GitHub, скорость очень низкая, что приводит к тайм-ауту функции. Позже я проконсультировался со службой поддержки и узнал, что это был сетевой брандмауэр (вы знаете, самый большой брандмауэр), а область развертывания функции была изменена на Гонконг, чтобы решить проблему.Вывод: При проблемах с сетью, вызванных брандмауэрами, вы можете попробовать переключить области, чтобы решить их.

Как исправить публичный IP?

Две реализации:

  1. обратный прокси. Это требует дополнительной машины для реализации, хотя это относительно просто, но этот способ не является «безсерверным».
  2. NAT-шлюз. Это услуга, предоставляемая Alibaba Cloud. При ее использовании вам необходимо закрыть конфигурацию функции «доступ к общедоступной сети», изменить ее на доступ к «частной сети» и выбрать созданный шлюз NAT. Пример, приведенный официальным лицом, также необходимо совмещать с EIP, конфигурация более хлопотная, и требуются дополнительные расходы.Вывод: две реализации имеют свои преимущества и недостатки, подумайте сами.

Информация об авторе:Чжу Делонг,люди и будущееСтарший фронтенд-инженер