AWS Lambda é um serviço de computação serverless que permite executar código sem provisionar ou gerenciar servidores.
Neste guia, vamos implantar um servidor HTTP Bun no AWS Lambda usando um Dockerfile.
NOTE
Antes de continuar, certifique-se de ter:Criar um novo Dockerfile
Certifique-se de estar no diretório contendo seu projeto e crie um novo Dockerfile na raiz do seu projeto. Este arquivo contém as instruções para inicializar o container, copiar os arquivos do projeto local, instalar dependências e iniciar a aplicação.
# Use a imagem oficial do adaptador AWS Lambda para lidar com o runtime Lambda
FROM public.ecr.aws/awsguru/aws-lambda-adapter:0.9.0 AS aws-lambda-adapter
# Use a imagem oficial do Bun para executar a aplicação
FROM oven/bun:debian AS bun_latest
# Copie o adaptador Lambda para dentro do container
COPY --from=aws-lambda-adapter /lambda-adapter /opt/extensions/lambda-adapter
# Defina a porta como 8080. Isso é necessário para o adaptador AWS Lambda.
ENV PORT=8080
# Defina o diretório de trabalho como `/var/task`. Este é o diretório de trabalho padrão do Lambda.
WORKDIR "/var/task"
# Copie o package.json e bun.lock para dentro do container
COPY package.json bun.lock ./
# Instale as dependências
RUN bun install --production --frozen-lockfile
# Copie o restante da aplicação para dentro do container
COPY . /var/task
# Execute a aplicação.
CMD ["bun", "index.ts"]NOTE
Certifique-se de que o comando de início corresponde ao ponto de entrada da sua aplicação. Isso também pode ser `CMD ["bun", "run", "start"]` se você tiver um script start no seu `package.json`.Esta imagem instala dependências e executa sua aplicação com Bun dentro de um container. Se sua aplicação não tiver dependências, você pode omitir a linha RUN bun install --production --frozen-lockfile.
Crie um novo arquivo .dockerignore na raiz do seu projeto. Este arquivo contém os arquivos e diretórios que devem ser excluídos da imagem do container, como node_modules. Isso torna seus builds mais rápidos e menores:
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# Quaisquer outros arquivos ou diretórios que você deseja excluirBuild da imagem Docker
Certifique-se de estar no diretório contendo seu Dockerfile e faça o build da imagem Docker. Neste caso, vamos chamar a imagem de bun-lambda-demo e taguear como latest.
# cd /path/to/your/app
docker build --provenance=false --platform linux/amd64 -t bun-lambda-demo:latest .Criar um repositório ECR
Para enviar a imagem para o AWS Lambda, primeiro precisamos criar um repositório ECR para enviar a imagem.
Ao executar o comando a seguir, nós:
- Criamos um repositório ECR chamado
bun-lambda-demona regiãous-east-1 - Obtemos o URI do repositório e exportamos o URI do repositório como uma variável de ambiente. Isso é opcional, mas torna os próximos passos mais fáceis.
export ECR_URI=$(aws ecr create-repository --repository-name bun-lambda-demo --region us-east-1 --query 'repository.repositoryUri' --output text)
echo $ECR_URI[id].dkr.ecr.us-east-1.amazonaws.com/bun-lambda-demoNOTE
Se você estiver usando IAM Identity Center (SSO) ou configurou o AWS CLI com perfis, precisará adicionar a flag `--profile` aos seus comandos AWS CLI.Por exemplo, se seu perfil for chamado my-sso-app, use --profile my-sso-app. Verifique sua configuração AWS CLI com aws configure list-profiles para ver os perfis disponíveis.
export ECR_URI=$(aws ecr create-repository --repository-name bun-lambda-demo --region us-east-1 --profile my-sso-app --query 'repository.repositoryUri' --output text)
echo $ECR_URIAutenticar com o repositório ECR
Faça login no repositório ECR:
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_URILogin SucceededNOTE
Se estiver usando um perfil, use a flag `--profile`:aws ecr get-login-password --region us-east-1 --profile my-sso-app | docker login --username AWS --password-stdin $ECR_URITag e push da imagem docker para o repositório ECR
Certifique-se de estar no diretório contendo seu Dockerfile e tagueie a imagem docker com o URI do repositório ECR.
docker tag bun-lambda-demo:latest ${ECR_URI}:latestEm seguida, envie a imagem para o repositório ECR.
docker push ${ECR_URI}:latestCriar uma função AWS Lambda
Vá para AWS Console > Lambda > Create Function > Selecione Container image

Dê um nome à função, como my-bun-function.
Selecionar a imagem do container
Em seguida, vá para a seção Container image URI, clique em Browse images. Selecione a imagem que acabamos de enviar para o repositório ECR.

Em seguida, selecione a imagem latest e clique em Select image.

Configurar a função
Para obter uma URL pública para a função, precisamos ir para Additional configurations > Networking > Function URL.
Defina isso como Enable, com Auth Type NONE.

Criar a função
Clique em Create function na parte inferior da página, isso criará a função.

Obter a URL da função
Depois que a função for criada, você será redirecionado para a página da função, onde pode ver a URL da função na seção "Function URL".

Testar a função
🥳 Sua aplicação está agora online! Para testar a função, você pode ir para a aba Test ou chamar a URL da função diretamente.
curl -X GET https://[your-function-id].lambda-url.us-east-1.on.aws/Hello from Bun on Lambda!