Skip to content

AWS Lambda est un service de calcul serverless qui vous permet d'exécuter du code sans provisionner ni gérer de serveurs.

Dans ce guide, nous allons déployer un serveur HTTP Bun sur AWS Lambda en utilisant un Dockerfile.

NOTE

Avant de continuer, assurez-vous d'avoir :
  • Une application Bun prête à être déployée
  • Un compte AWS
  • AWS CLI installé et configuré
  • Docker installé et ajouté à votre PATH

Créer un nouveau Dockerfile

Assurez-vous d'être dans le répertoire contenant votre projet, puis créez un nouveau Dockerfile à la racine de votre projet. Ce fichier contient les instructions pour initialiser le conteneur, copier vos fichiers de projet locaux, installer les dépendances et démarrer l'application.

docker
# Utiliser l'image officielle de l'adaptateur Lambda AWS pour gérer le runtime Lambda
FROM public.ecr.aws/awsguru/aws-lambda-adapter:0.9.0 AS aws-lambda-adapter

# Utiliser l'image officielle Bun pour exécuter l'application
FROM oven/bun:debian AS bun_latest

# Copier l'adaptateur Lambda dans le conteneur
COPY --from=aws-lambda-adapter /lambda-adapter /opt/extensions/lambda-adapter

# Définir le port sur 8080. Ceci est requis pour l'adaptateur AWS Lambda.
ENV PORT=8080

# Définir le répertoire de travail sur `/var/task`. C'est le répertoire de travail par défaut pour Lambda.
WORKDIR "/var/task"

# Copier le package.json et bun.lock dans le conteneur
COPY package.json bun.lock ./

# Installer les dépendances
RUN bun install --production --frozen-lockfile

# Copier le reste de l'application dans le conteneur
COPY . /var/task

# Exécuter l'application.
CMD ["bun", "index.ts"]

NOTE

Assurez-vous que la commande de démarrage correspond au point d'entrée de votre application. Cela peut aussi être `CMD ["bun", "run", "start"]` si vous avez un script de démarrage dans votre `package.json`.

Cette image installe les dépendances et exécute votre application avec Bun dans un conteneur. Si votre application n'a pas de dépendances, vous pouvez omettre la ligne RUN bun install --production --frozen-lockfile.

Créez un nouveau fichier .dockerignore à la racine de votre projet. Ce fichier contient les fichiers et répertoires qui doivent être exclus de l'image du conteneur, comme node_modules. Cela rend vos builds plus rapides et plus petits :

docker
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# Tous les autres fichiers ou répertoires que vous souhaitez exclure

Build l'image Docker

Assurez-vous d'être dans le répertoire contenant votre Dockerfile, puis build l'image Docker. Dans ce cas, nous appellerons l'image bun-lambda-demo et la taguerons comme latest.

bash
# cd /path/to/your/app
docker build --provenance=false --platform linux/amd64 -t bun-lambda-demo:latest .

Créer un dépôt ECR

Pour pousser l'image vers AWS Lambda, nous devons d'abord créer un dépôt ECR pour pousser l'image.

En exécutant la commande suivante, nous :

  • Créons un dépôt ECR nommé bun-lambda-demo dans la région us-east-1
  • Obtenons l'URI du dépôt et exportons l'URI du dépôt comme variable d'environnement. Ceci est optionnel, mais rend les étapes suivantes plus faciles.
bash
export ECR_URI=$(aws ecr create-repository --repository-name bun-lambda-demo --region us-east-1 --query 'repository.repositoryUri' --output text)
echo $ECR_URI
txt
[id].dkr.ecr.us-east-1.amazonaws.com/bun-lambda-demo

NOTE

Si vous utilisez IAM Identity Center (SSO) ou avez configuré AWS CLI avec des profils, vous devrez ajouter l'option `--profile` à vos commandes AWS CLI.

Par exemple, si votre profil s'appelle my-sso-app, utilisez --profile my-sso-app. Vérifiez votre configuration AWS CLI avec aws configure list-profiles pour voir les profils disponibles.

bash
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_URI

S'authentifier avec le dépôt ECR

Connectez-vous au dépôt ECR :

bash
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_URI
txt
Login Succeeded

NOTE

Si vous utilisez un profil, utilisez l'option `--profile` :
bash
aws ecr get-login-password --region us-east-1 --profile my-sso-app | docker login --username AWS --password-stdin $ECR_URI

Tagger et pousser l'image docker vers le dépôt ECR

Assurez-vous d'être dans le répertoire contenant votre Dockerfile, puis taguez l'image docker avec l'URI du dépôt ECR.

bash
docker tag bun-lambda-demo:latest ${ECR_URI}:latest

Ensuite, poussez l'image vers le dépôt ECR.

bash
docker push ${ECR_URI}:latest

Créer une fonction AWS Lambda

Allez dans AWS Console > Lambda > Create Function > Sélectionnez Container image

Create Function

Donnez un nom à la fonction, comme my-bun-function.

Sélectionner l'image du conteneur

Ensuite, allez dans la section Container image URI, cliquez sur Browse images. Sélectionnez l'image que nous venons de pousser vers le dépôt ECR.

Select Container Repository

Ensuite, sélectionnez l'image latest, et cliquez sur Select image.

Select Container Image

Configurer la fonction

Pour obtenir une URL publique pour la fonction, nous devons aller dans Additional configurations > Networking > Function URL.

Définissez ceci sur Enable, avec le type d'authentification NONE.

Set the Function URL

Créer la fonction

Cliquez sur Create function en bas de la page, cela créera la fonction.

Create Function

Obtenir l'URL de la fonction

Une fois la fonction créée, vous serez redirigé vers la page de la fonction, où vous pouvez voir l'URL de la fonction dans la section "Function URL".

Function URL

Tester la fonction

🥳 Votre application est maintenant en ligne ! Pour tester la fonction, vous pouvez soit aller dans l'onglet Test, soit appeler directement l'URL de la fonction.

bash
curl -X GET https://[your-function-id].lambda-url.us-east-1.on.aws/
txt
Hello from Bun on Lambda!

Bun édité par www.bunjs.com.cn