Как развернуть Deno на AWS Lambda
AWS Lambda — это серверless вычислительная услуга, предоставляемая Amazon Web Services. Она позволяет запускать код без выделения или управления серверами.
Вот пошаговое руководство по развертыванию приложения Deno на AWS Lambda с использованием Docker.
Предварительные условия для этого:
Шаг 1: Создайте приложение Deno
Создайте новое приложение Deno, используя следующий код:
Deno.serve((req) => new Response("Hello World!"));
Сохраните этот код в файле с именем main.ts.
Шаг 2: Создайте Dockerfile
Создайте новый файл с именем Dockerfile со следующим содержимым:
# Set up the base image
FROM public.ecr.aws/awsguru/aws-lambda-adapter:0.8.4 AS aws-lambda-adapter
FROM denoland/deno:bin-1.45.2 AS deno_bin
FROM debian:bookworm-20230703-slim AS deno_runtime
COPY --from=aws-lambda-adapter /lambda-adapter /opt/extensions/lambda-adapter
COPY --from=deno_bin /deno /usr/local/bin/deno
ENV PORT=8000
EXPOSE 8000
RUN mkdir /var/deno_dir
ENV DENO_DIR=/var/deno_dir
# Copy the function code
WORKDIR "/var/task"
COPY . /var/task
# Warmup caches
RUN timeout 10s deno run -A main.ts || [ $? -eq 124 ] || exit 1
CMD ["deno", "run", "-A", "main.ts"]
Этот Dockerfile использует проект aws-lambda-adapter, чтобы адаптировать обычные HTTP-серверы, такие как Deno.serve, к API runtime AWS Lambda.
Мы также используем образ denoland/deno:bin-1.45.2, чтобы получить бинарник Deno, и debian:bookworm-20230703-slim в качестве базового образа. Образ debian:bookworm-20230703-slim используется для уменьшения размера образа.
Переменная среды PORT установлена в значение 8000, чтобы сообщить адаптеру AWS Lambda, что мы слушаем на порту 8000.
Переменная среды DENO_DIR установлена в значение /var/deno_dir, чтобы хранить кэшированный исходный код Deno и транспилированные модули в каталоге /var/deno_dir.
Шаг подготовки кэша используется для подготовки кэша Deno перед вызовом функции. Это делается для уменьшения времени холодного запуска функции. Эти кэши содержат скомпилированный код и зависимости вашего кода функции. Этот шаг запускает ваш сервер на 10 секунд, а затем завершается.
При использовании файла package.json, помните, что необходимо выполнить deno install для установки node_modules из вашего файла package.json перед подготовкой кэшей или запуском функции.
Шаг 3: Сборка Docker образа
Соберите Docker образ, используя следующую команду:
docker build -t hello-world .
Шаг 4: Создание репозитория Docker ECR и отправка образа
Используя AWS CLI, создайте репозиторий ECR и отправьте Docker образ в него:
aws ecr create-repository --repository-name hello-world --region us-east-1 | grep repositoryUri
Это должно вывести URI репозитория, похожий на <account_id>.dkr.ecr.us-east-1.amazonaws.com/hello-world.
Проверьте Docker с ECR, используя URI репозитория из предыдущего шага:
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <account_id>.dkr.ecr.us-east-1.amazonaws.com
Пометьте Docker образ с URI репозитория, снова используя URI репозитория из предыдущих шагов:
docker tag hello-world:latest <account_id>.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
Наконец, отправьте Docker образ в репозиторий ECR, используя URI репозитория из предыдущих шагов:
docker push <account_id>.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
Шаг 5: Создание функции AWS Lambda
Теперь вы можете создать новую функцию AWS Lambda из консоли управления AWS.
- Перейдите в консоль управления AWS и перейдите к службе Lambda.
- Нажмите кнопку "Создать функцию".
- Выберите "Контейнерный образ".
- Введите имя функции, например, "hello-world".
- Нажмите кнопку "Просмотреть образы" и выберите образ, который вы отправили в ECR.
- Нажмите кнопку "Создать функцию".
- Подождите, пока функция не будет создана.
- Вкладке "Настройка", перейдите в раздел "URL функции" и нажмите "Создать URL функции".
- Выберите "NONE" для типа аутентификации (это сделает функцию lambda общедоступной).
- Нажмите кнопку "Сохранить".
Шаг 6: Тестирование функции Lambda
Теперь вы можете посетить URL вашей функции Lambda, чтобы увидеть ответ от вашего приложения Deno.
🦕 Вы успешно развернули приложение Deno на AWS Lambda с использованием Docker. Теперь вы можете использовать эту настройку для развертывания более сложных приложений Deno на AWS Lambda.
© 2018–2024 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/tutorials/aws_lambda