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.
# 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 :
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# Tous les autres fichiers ou répertoires que vous souhaitez exclureBuild 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.
# 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-demodans la régionus-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.
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
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.
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_URIS'authentifier avec le dépôt ECR
Connectez-vous au dépôt ECR :
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_URILogin SucceededNOTE
Si vous utilisez un profil, utilisez l'option `--profile` :aws ecr get-login-password --region us-east-1 --profile my-sso-app | docker login --username AWS --password-stdin $ECR_URITagger 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.
docker tag bun-lambda-demo:latest ${ECR_URI}:latestEnsuite, poussez l'image vers le dépôt ECR.
docker push ${ECR_URI}:latestCréer une fonction AWS Lambda
Allez dans AWS Console > Lambda > Create Function > Sélectionnez Container image

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.

Ensuite, sélectionnez l'image latest, et cliquez sur Select 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.

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

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".

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.
curl -X GET https://[your-function-id].lambda-url.us-east-1.on.aws/Hello from Bun on Lambda!