Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS et Python: Déploiement d'application sous E...

AWS et Python: Déploiement d'application sous Elastic Beanstalk

Tour d'horizon des capacités d'Elastic Beanstalk pour le déploiement d'application python.

Olivier Hervieu

March 04, 2013
Tweet

More Decks by Olivier Hervieu

Other Decks in Programming

Transcript

  1. AWS: présentation rapide • Collection de services WEB lancée en

    2002. • Actuellement: plus de 20 services disponibles dans 8 zones géographiques (Amérique du Sud, US, Asie, Europe...) • Services les plus connus: ◦ EC2 (Elastic Cloud Compute) ◦ S3 (Simple Storage Service) ◦ Elastic MapReduce ◦ RDS ◦ DynamoDB
  2. AWS: Elastic Beanstalk • Service PaaS permettant à des utilisateurs

    de créer des applications et de les déployer sur AWS, • Lancé en Janvier 2011 avec, initialement Java comme seul language supporté, • Support de python ajouté en Aout 2012.
  3. Prérequis • python (2.7, 3.x) • git • ruby (1.8.7

    et supérieur) • AWS Elastic Beanstalk Client package (fourni l'outil eb permettant le déploiement)
  4. Pas à pas > mkdir simple > cd simple >

    git init . > eb init > eb start
  5. Première application > echo "Flask" > requirements.txt > git add

    requirements.txt > cat <<EOF > application.py import flask application = flask.Flask(__name__) @application.route('/') def hello_world(): return "Hello world!" if __name__ == '__main__': application.run(host='0.0.0.0', debug=True) EOF > git add application.py > git commit -m "The simplest app on earth" > git aws.push
  6. Première application • L'application se déploit au bout de quelques

    instants • `eb status` permet de consulter l'état du déploiement > eb status URL : simpleblog-env-nq4qa8zsu4.elasticbeanstalk.com Status : Ready Health : Green
  7. Aller plus loin • L'application déployée est simpliste. ◦ comment

    installer des dépendances ◦ comment configurer la machine ▪ variables d'environnement ▪ packages systèmes supplémentaires ▪ script de migration / bootstrapping de l'application ◦ comment accéder aux logs ◦ configuration d'une base de donnée etc...
  8. .ebextensions Scripts permettant la configuration: • de l'application en elle-même

    • des instances sur lesquelles l'application est éxecutée
  9. Modification des instances • Il est possible: ◦ d'installer des

    packages supplémentaires, ◦ créer des utilisateurs et des groupes ◦ démarrer/arrêter des services ◦ ... • Example: installation de package packages: yum: libmemcached: [] ruby-devel: [] gcc: [] rpm: epel: http://.../epel-release-5-4.noarch.rpm rubygems: chef: '0.10.2'
  10. Modifications des instances • Example: création d'utilisateur users: myuser: groups:

    - group1 - group2 uid: "50" homeDir: “/tmp” • A noter: l'installation des dépendances python se fait via le fichier requirements.txt (ces dépendances sont alors installées dans un virtualenv sur l'instance)
  11. Bootstrap/Gestion de l'application • Deux niveaux: ◦ `commands` ◦ `container_commands`:

    effectuées dans le virtualenv de l'application Example: container_commands: 01syncdb: command: "python syncdb.py" leader_only: true 02migrate: command: "python migrate.py" leader_only: true 99customize: command: "scripts/customize.sh"
  12. Configuration de l'application • Via 3 "namespace": ◦ aws:elasticbeanstalk:application:environment :

    variables d'environnement accessibles par l'application ◦ aws:elasticbeanstalk:container:python : paramètres d'éxecution (nombre de processus) ◦ aws:elasticbeanstalk:container:python:staticfiles : localisation des fichiers static
  13. Accès à RDS et autres services AWS • RDS: ◦

    Retour à eb init. Nécessaire de créer l'instance RDS ◦ Accessible via SQLAlchemy • Autres Services: ◦ Accessible via les instances Role d'Amazon ◦ Configuration peu aisée mais la documentation sur AWS est relativement complète.