Почему Бун?
JavaScript — один из самых популярных и широко используемых языков программирования в мире. Он поддерживает веб-приложения, мобильные приложения, настольное программное обеспечение и даже серверы. Однако у JavaScript также есть некоторые недостатки, такие как медленное время запуска, высокое потребление памяти и проблемы совместимости с различными движками и платформами.
Именно здесь на помощь приходит Bun JS. Bun JS — это новая среда выполнения JavaScript, цель которой — решить эти проблемы, предлагая быструю, легкую и кроссплатформенную альтернативу Node.js. Bun JS написан на Zig, языке программирования низкого уровня, ориентированном на производительность и безопасность. В качестве движка он использует JavaScript Core, тот же движок, который используется в устройствах Safari и iOS. Это означает, что Bun JS может выполнять код JavaScript быстрее и эффективнее, чем Node.js, который использует V8 в качестве своего движка.
Bun JS также предоставляет полный набор инструментов для разработки JavaScript, включая сборщик, средство запуска тестов и менеджер пакетов. Эти инструменты совместимы с API-интерфейсами Node.js, поэтому разработчики могут легко перенести существующий код и использовать свои любимые библиотеки и платформы. Bun JS также поддерживает TypeScript, который добавляет статическую типизацию и другие функции.
Bun JS все еще находится в разработке и еще не достиг стабильной версии. Однако он уже привлек большое внимание и интерес со стороны сообщества JavaScript. Некоторые из функций, запланированных для будущих выпусков, включают поддержку веб-сборки, собственные модули и дополнительные встроенные команды.
Сегодня давайте сосредоточимся на развертывании Bun.js в AWS Lambda.
Существует два способа развертывания Bun в Lambda: один — через добавление пользовательского слоя в Lambda, другой — через контейнеризацию приложения Bun с помощью Docker и его развертывание в Lambda.
Развертывание Bun путем добавления слоя:
Чтобы запустить Bun в Lambda, сначала вам нужно добавить собственный слой Lambda. Для этого вам понадобится операционная система на базе Unix (Mac или Linux) для установки Bun.js в вашей системе. Вам необходимо установить его в свою систему, чтобы создать слой булочек.
- Установите Bun.js в локальной системе:С помощью следующей команды установите Bun.js.
curl -fsSL https://bun.sh/install | bash
Перезагрузите систему, если необходимо.
2. Клонируйте репозиторий GitHub. Клонируйте официальный репозиторий Bun.js, чтобы создать слой Lambda и опубликовать его.
git clone https://github.com/oven-sh/bun.git
3. Установить и опубликовать слой. Следуйте командам, чтобы установить и опубликовать слой.
Примечание. Прежде чем продолжить создание слоя, убедитесь, что aws cli правильно настроен с использованием вашего идентификатора доступа и секрета.
cd bun/packages/bun-lambda bun install bun run publish-layer
Вам нужно получить что-то вроде этого
Примечание. На данный момент уровень поддерживает только архитектуру Arm64.
4. Создайте и настройте функцию Lambda: В консоли AWS создайте функцию с желаемым именем со средой выполнения Amazon Linux 2 и архитектурой Arm64.
После создания функции добавьте опубликованный пользовательский слой в функцию Lambda.
5. Добавить обработчик: В созданной функции Lambda получите настройки времени выполнения и добавьте обработчик как «index.fetch».
Вот и все, Lambda с пользовательской средой выполнения готова к работе. Теперь вы можете разместить свое приложение Bun.js.
Вот пример кода, который я добавил для тестирования приложения.
export default { async fetch(request) { console.log(request.headers.get("x-amzn-function-arn")); const responseBody = { message: "Response from Lambda Bun runtime" }; return new Response(JSON.stringify(responseBody), { status: 200, headers: { "Content-Type": "application/json", }, }); }, };
Ответ:
Развертывание Bun путем контейнеризации:
В этом методе вам необходимо поместить приложение Bun.js в контейнер, чтобы развернуть его в Lambda. Это распространенный способ развертывания приложения с настраиваемой средой выполнения, не поддерживаемой Lambda.
Добавьте файл Dockerfile в корневую папку приложения Bun.js, которое вы хотите развернуть.
Добавьте следующий код в файл Dockerfile.
FROM oven/bun:latest WORKDIR /app COPY . /app EXPOSE 3000 CMD [“bun”, “run”, “index.js”]
«FROM духовка/булочка:latest» здесь Docker использует предварительно созданный образ духовки/булочки, где образ уже настроен с помощью Bun.js.
Третья строка «EXPOSE 3000» предназначена для перенаправления порта приложения, поскольку мое приложение работает на порту 3000.
Код простого приложения Bun.js выглядит следующим образом:
const responseBody = { message: "Response from dockerized Bun runtime" }; const server = Bun.serve({ port: 3000, fetch(request) { return new Response(JSON.stringify(responseBody)); }, }); console.log(`Listening on localhost:${server.port}`);
Теперь нам нужно контейнеризировать приложение. Для контейнеризации следуйте команде.
sudo docker build -t bun-runtime .
Эта команда используется для создания образа Docker с тегом «bun-runtime». Убедитесь, что вы установили Docker в своей локальной системе.
После контейнеризации приложения нам нужно отправить его в ECR.
Итак, давайте создадим репозиторий ECR для хранения нашего образа контейнера, к которому позже будет обращаться Lambda для развертывания контейнера.
Теперь следуйте командам, чтобы отправить образ контейнера в ECR.
- Пометьте изображение Docker, чтобы отправить его в ECR.
sudo docker tag bun-runtime 837010728556.dkr.ecr.us-east-1.amazonaws.com/bun-repo:bun-runtime
2. Теперь войдите в ECR через терминал.
aws ecr get-login-password — region us-east-1 | sudo docker login — username AWS — password-stdin 837010728556.dkr.ecr.us-east-1.amazonaws.com
3. Загрузите образ контейнера в ECR.
sudo docker push 837010728556.dkr.ecr.us-east-1.amazonaws.com/bun-repo:bun-runtime
Теперь вы можете видеть в консоли, что образ контейнера помещен в репозиторий.
Теперь перейдите в консоль, создайте новую функцию Lambda и выберите «Образ контейнера».
Теперь выберите образ контейнера, который уже отправлен в ECR.
Затем нажмите «Создать функцию». Вот и все, Lambda развернет образ контейнера. Теперь вы можете проверить приложение, используя URL-адрес функции.
Это два распространенных способа развертывания Bun.js в AWS Lambda. Несмотря на то, что у нас есть альтернативные методы развертывания Bun.js в Lambda, эти методы снижают производительность лямбды. Хотя мы не можем использовать эти методы для развертывания производственных приложений, мы можем использовать их для экспериментов и изучения новых вещей.
Удачного взлома!!!
Об авторе
Хари Прасад — Full Stack разработчик с опытом разработки и развертывания приложений с использованием Node.js, React Native и Vue.js. Глубокое понимание бессерверной архитектуры и опыт работы с AWS Lambda, DynamoDB и PostgreSQL.
О CodeStax.Ai
В CodeStax.Ai мы стоим на стыке инноваций и корпоративных решений, предлагая технологическое партнерство, которое дает компаниям возможность повышать эффективность, инновации и рост, используя преобразующую силу платформ без кода и передовую интеграцию искусственного интеллекта.
Но настоящая магия? За кулисами — наше технологическое племя. Если у вас есть склонность к инновациям и страсть к переосмыслению норм, у нас есть для вас идеальная технологическая площадка. CodeStax.Ai предлагает больше, чем просто работу — это путешествие в самое сердце того, что будет дальше. Присоединяйтесь к нам и станьте частью революции, которая изменит технологическую среду предприятия.