DevOps Elastic Hayway
Document

SUBSCRIBE TO GET FULL ACCESS TO THE E-BOOKS FOR FREE 🎁SUBSCRIBE NOW

Professional Dropdown with Icon

SUBSCRIBE NOW TO GET FREE ACCESS TO EBOOKS

AWSLesson 35 / 479 min readUpdated September 13, 2026

Elastic Beanstalk : déployer une app

À la fin de ce tutoriel, vous créerez une application Elastic Beanstalk, déploierez une version Hello World (Flask / Python 3.12 sur Amazon Linux 2023) en environnement single instance, testerez le CNAME HTTP, pousserez une nouvelle version, puis terminerez l’environnement et supprimerez l’application — en ca-central-1, profil lab.

Niveau : Intermédiaire · Temps estimé : 60–75 min · Versions testées : Elastic Beanstalk 2026, Python 3.12 AL2023, AWS CLI v2 · Dernière vérification : 2026-09-10 · Region : ca-central-1

Slug draft : aws-elastic-beanstalk · Slug live : aws-beanstalk-5 (WP #1298) · Série : AWS Solutions Architect · Mot-clé SEO : Elastic Beanstalk

Publish : HOLD · Absorbe / enrichit : live EN thin /aws-beanstalk-5/ (PHP Sample Application)

← Précédent : CloudFormation · → Suivant : ECS Fargate · Hub : Démarrer avec AWS

Prérequis

  • Profil AWS CLI lab avec droits Elastic Beanstalk, EC2, S3 (bundles), IAM (rôles de service Beanstalk déjà présents ou créables)
  • AWS CLI v2, zip, Python 3 local pour le zip source
  • Budget d’alerte : Beanstalk facture surtout l’EC2 (+ EBS) ; en single instance pas d’ELB — terminate vite
  • Notions EC2 / SG et un premier contact IaC (CloudFormation)
export AWS_PROFILE=lab
export AWS_DEFAULT_REGION=ca-central-1
aws sts get-caller-identity

Vérifiez l’identité lab — jamais un compte de production.

Ce que nous allons construire

Client ──HTTP──► CNAME *.elasticbeanstalk.com
                      │
                      ▼
              Env Beanstalk (single instance)
              ├── EC2 t3.micro (AL2023 / Python 3.12)
              ├── Platform + health checks
              └── Application Version (ZIP S3)
                      │
                      ▼
              Flask Hello World (port 8000 via plateforme)

(Schéma — alt : « Client HTTP vers CNAME Beanstalk, environnement single instance EC2 Python 3.12 AL2023 et version ZIP ».)

Beanstalk est un PaaS : vous fournissez le code (ZIP), AWS provisionne et opère EC2, sécurité de base, plateforme et health. Pour le lab on reste en single instance (pas de load balancer) afin de limiter le coût.

Étape 1 — PaaS vs EC2 nu vs Lambda / ECS

Approche Quand ça a du sens Limites
EC2 nu Contrôle total AMI, agent, réseau Ops à votre charge (patch, scaling, deploy)
Elastic Beanstalk App web classique (Flask/Django/Node) vite en prod « gérée » Moins flexible qu’ECS ; plateformes imposées
Lambda API events, scale à zéro Timeout, packing, pas de process long
ECS Fargate Conteneurs, microservices, contrôle du runtime Plus de concepts (task, service, ALB)

Beanstalk a encore du sens en 2026 pour : POC / PME, équipes qui veulent un pipeline de déploiement sans orchestrer des conteneurs, et pour l’examen SA (connaître Application / Environment / Platform / Version). Dès que vous avez besoin de multi-services, sidecars ou images custom fines → ECS Fargate.

Étape 2 — Concepts Beanstalk

Concept Rôle
Application Conteneur logique (nom) qui regroupe versions et environnements
Environment Déploiement concret (EC2, SG, CNAME, health) — ex. lab-eb-env
Platform Stack OS + runtime — ici Python 3.12 running on 64bit Amazon Linux 2023
Version Label + source bundle (ZIP dans S3) déployable sur un env

Un environnement pointe vers une version à la fois. Mettre à jour = créer une nouvelle version puis update-environment. Option DX : la EB CLI (eb init, eb create --single, eb deploy) encapsule ces appels ; ce lab privilégie AWS CLI + ZIP pour moins de friction d’install.

Contenu d’origine conservé (live aws-beanstalk-5)

Le live (WP #1298, slug aws-beanstalk-5) proposait un déploiement console PHP Sample Application. On conserve ce parcours ; le lab CLI principal reste Flask / Python 3.12.

Variante console — PHP Sample (origine)

  1. Console → ca-central-1 → Elastic Beanstalk → Create application.
  2. Application name : MyApp (ou lab-eb-php).
  3. Platform : PHP (AL2023 si proposé).
  4. Application code : Sample application (pas de ZIP custom).
  5. Create → attendre Ready / Health Ok.
  6. Ouvrir l’Application URL (*.elasticbeanstalk.com) : la page PHP sample confirme le déploiement.

En lab, gardez single instance (pas d’ALB) même en console. Le CLI Flask (ZIP, versions) reste le chemin principal. Le titre EN « Serverless … Beanstalk » est imprécis : Beanstalk = PaaS (EC2 ± ELB), pas Lambda.

Étape 3 — ZIP Hello World (Flask)

Créez un dossier de lab et deux fichiers (aucun secret) :

mkdir -p ~/lab-eb && cd ~/lab-eb

application.py (entrée attendue par la plateforme Python Beanstalk) :

from flask import Flask
application = Flask(__name__)

@application.route("/")
def hello():
    return "Hello from Elastic Beanstalk labn"

if __name__ == "__main__":
    application.run(host="0.0.0.0", port=8000)

requirements.txt :

Flask==3.0.3

Empaquetez (fichiers à la racine du ZIP) :

zip -q lab-eb-v1.zip application.py requirements.txt

Étape 4 — Application, version S3, environnement single instance

Récupérez un solution stack Python 3.12 AL2023 à jour, créez l’app, uploadez le ZIP, puis l’environnement :

APP=lab-eb-app
ENV=lab-eb-env
BUCKET="lab-eb-${ACCOUNT_ID:=$(aws sts get-caller-identity --query Account --output text)}-ca"
STACK=$(aws elasticbeanstalk list-available-solution-stacks 
  --query "SolutionStacks[?contains(@, 'Python 3.12') && contains(@, 'Amazon Linux 2023')]|[0]" 
  --output text)
echo "Platform: $STACK"

aws s3 mb "s3://$BUCKET" --region ca-central-1 2>/dev/null || true
aws s3 cp lab-eb-v1.zip "s3://$BUCKET/lab-eb-v1.zip"

aws elasticbeanstalk create-application 
  --application-name "$APP" 
  --description "Lab Beanstalk devopselastichayway"

aws elasticbeanstalk create-application-version 
  --application-name "$APP" 
  --version-label v1 
  --source-bundle S3Bucket="$BUCKET",S3Key=lab-eb-v1.zip

# Single instance = pas d'ELB (économie lab)
aws elasticbeanstalk create-environment 
  --application-name "$APP" 
  --environment-name "$ENV" 
  --solution-stack-name "$STACK" 
  --version-label v1 
  --option-settings 
    Namespace=aws:elasticbeanstalk:environment,OptionName=EnvironmentType,Value=SingleInstance 
    Namespace=aws:autoscaling:launchconfiguration,OptionName=InstanceType,Value=t3.micro 
    Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role

Si le profil d’instance aws-elasticbeanstalk-ec2-role n’existe pas encore, créez-le une fois via la console Beanstalk (« Create service role ») ou IAM (trust ec2.amazonaws.com + politiques managed Beanstalk) — hors détail de ce lab.

Attendez le statut Ready :

aws elasticbeanstalk wait environment-updated --environment-names "$ENV"
# ou boucle :
aws elasticbeanstalk describe-environments --environment-names "$ENV" 
  --query 'Environments[0].{Status:Status,Health:Health,CNAME:CNAME}'

La création peut prendre 5–15 minutes (EC2 + plateforme + health).

Étape 5 — Health, CNAME et test HTTP

CNAME=$(aws elasticbeanstalk describe-environments --environment-names "$ENV" 
  --query 'Environments[0].CNAME' --output text)
echo "http://$CNAME/"
curl -sS "http://$CNAME/"

Health Green / Ok = instance joignable et app répond. En single instance le CNAME pointe directement vers l’IP publique de l’EC2 (pas d’ALB). Ouvrez aussi l’onglet Health / Events en console pour lire les messages de déploiement.

Étape 6 — Déployer une nouvelle version

Modifiez le message dans application.py, recréez un ZIP et déployez :

# après édition du return "Hello v2 from Beanstalk labn"
zip -q lab-eb-v2.zip application.py requirements.txt
aws s3 cp lab-eb-v2.zip "s3://$BUCKET/lab-eb-v2.zip"

aws elasticbeanstalk create-application-version 
  --application-name "$APP" 
  --version-label v2 
  --source-bundle S3Bucket="$BUCKET",S3Key=lab-eb-v2.zip

aws elasticbeanstalk update-environment 
  --environment-name "$ENV" 
  --version-label v2

aws elasticbeanstalk wait environment-updated --environment-names "$ENV"
curl -sS "http://$CNAME/"

Alternative DX : eb deploy après eb init -p "Python 3.12 running on 64bit Amazon Linux 2023" et eb create --single — utile au quotidien, mais la CLI AWS reste le chemin exam / CI explicite.

Étape 7 — Coûts (single instance)

Élément Lab single instance
EC2 t3.micro Facturé à l’heure (Free Tier si éligible / compte)
EBS root Quelques Go gp3
ELB / ALB Absent grâce à SingleInstance
Beanstalk API Gratuit
Bucket S3 des ZIP Quasi négligeable

Un env load-balanced ajoute un ALB (~ tarif horaire) : évitez-le pour ce lab. Terminate dès la vérif — une EC2 oubliée le week-end coûte plus que le tutoriel.

Étape 8 — Comparaison courte pour la suite du cours

Outil Rôle dans la série
CloudFormation IaC déclaratif des ressources (Beanstalk peut être une ressource CFN)
SAM Spécialisé serverless (Lambda) au-dessus de CFN
Beanstalk PaaS app web ZIP → plateforme gérée
ECS Fargate Conteneurs sans gérer les EC2 — suite naturelle Module H

Pour l’examen : Beanstalk ≠ serverless ; vous payez l’infra sous-jacente. Choisissez Beanstalk pour simplicité d’app monolithique ; ECS/EKS pour orchestration ; Lambda pour fonctions.

Vérification

aws elasticbeanstalk describe-environments --environment-names "$ENV" 
  --query 'Environments[0].{Status:Status,Health:Health,Version:VersionLabel,Tier:Tier.Name}'
aws elasticbeanstalk describe-application-versions --application-name "$APP" 
  --query 'ApplicationVersions[].VersionLabel'
curl -sS -o /dev/null -w "%{http_code}n" "http://$CNAME/"

Checklist : Status Ready · Health Green · v2 déployée · HTTP 200 · plan de nettoyage prêt.

Nettoyage (obligatoire)

aws elasticbeanstalk terminate-environment --environment-name "$ENV"
aws elasticbeanstalk wait environment-terminated --environment-names "$ENV"

aws elasticbeanstalk delete-application 
  --application-name "$APP" 
  --terminate-env-by-force

aws s3 rb "s3://$BUCKET" --force

Sans terminate-environment, l’EC2 continue de facturer. Vérifiez ensuite qu’aucune instance aws:elasticbeanstalk:environment-name ne reste dans EC2.

Erreurs fréquentes

Symptôme Cause Correction
Env Degraded / Red App crash, mauvais entrypoint Logs Beanstalk / CloudWatch ; fichier application.py + Flask
IamInstanceProfile invalide Rôle EC2 Beanstalk absent Créer aws-elasticbeanstalk-ec2-role
Timeout create Plateforme / SG / quotas Events describe-events ; attendre ou recreate
502 / pas de réponse Health check trop tôt Attendre Ready ; vérifier SG HTTP 80
Coût surprise Env load-balanced oublié Toujours SingleInstance en lab + terminate
Sample PHP Red / confusion « serverless » Health trop tôt ou stub EN Attendre Ready ; Beanstalk = PaaS ≠ Lambda

Debug utile : aws elasticbeanstalk describe-events --environment-name "$ENV" --max-items 15.

Quiz (5 questions)

1. En lab Free Tier / budget serré, on crée un environnement Beanstalk : – A. Load-balanced multi-AZ avec ALB
– B. Single instance (EnvironmentType=SingleInstance)
– C. Toujours avec NAT Gateway dédiée

2. Une application version Beanstalk, c’est surtout : – A. Une AMI EC2 figée
– B. Un label + source bundle (ZIP) déployable
– C. Un cluster EKS

3. Fin de lab correcte : – A. Arrêter l’EC2 à la main seulement
– B. terminate-environment puis delete-application
– C. Laisser le CNAME public une semaine

4. Le stub live aws-beanstalk-5 déploie une Sample Application en : – A. Uniquement Lambda
– B. PHP (Sample Code) via Create Application console
– C. Uniquement Terraform obligatoire

5. Beanstalk pour l’examen Solutions Architect est surtout : – A. Un service serverless gratuit sans EC2
– B. Un PaaS (Application / Environment / Platform / Version) qui facture l’infra sous-jacente
– C. Un équivalent strict d’EKS

Réponses : 1‑B · 2‑B · 3‑B · 4‑B · 5‑B

Pour aller plus loin

Maillage série AWS (P1)

← Précédent CloudFormation : premier stack
→ Suivant ECS Fargate
Aussi Lambda + API Gateway · Démarrer avec AWS

Retour parcours AWS — hub de la série et leçons sœurs.

Share your love

Leave a Reply

Your email address will not be published. Required fields are marked *