Почему Бун?

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 в вашей системе. Вам необходимо установить его в свою систему, чтобы создать слой булочек.

  1. Установите 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.

  1. Пометьте изображение 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 предлагает больше, чем просто работу — это путешествие в самое сердце того, что будет дальше. Присоединяйтесь к нам и станьте частью революции, которая изменит технологическую среду предприятия.