Déployer un projet Symfony sur Amazon Elastic Beanstalk (French)

2013-11-01

  symfony    french    amazon    deployment 

Nous allons ici voir comment déployer un projet utilisant le framework Symfony (sous Git) en utilisant une application Amazon Elastic Beanstalk, un des services Amazon Web Services.

Ce service vous permet de déployer une application et de redimensionner la plateforme en fonction de la charge que votre application engendre. Vous pouvez aussi gérer plusieurs environnements pour votre application.

Amazon a mis en place des outils regroupés sous le nom d'une archive : AWS Dev Tools.

Télécharger et installer AWS Dev Tools

Pensez à bien obtenir la dernière version en vous rendant sur http://aws.amazon.com/code/6752709412171743.

Installez les outils dans /opt et ajoutez les répertoires nécessaires à la variable d'environnement PATH :


$ sudo wget -O /opt/aws.zip https://s3.amazonaws.com/elasticbeanstalk/cli/AWS-ElasticBeanstalk-CLI-2.5.1.zip
$ sudo unzip -d /opt /opt/aws.zip
$ export PATH=$PATH:/opt/AWS-ElasticBeanstalk-CLI-2.5.1/api/bin/:/opt/AWS-ElasticBeanstalk-CLI-2.5.1/eb/linux/python2.7/

Les outils AWS Dev Tools sont maintenant prêts à l'emploi.

Configurer son repository Git pour déployer son application

Nous allons maintenant utiliser un script de configuration fourni dans les AWS Dev Tools pour configurer notre repository Git et lui ajouter quelques commandes utiles.

Pour ce faire, placez-vous à la racine de votre repository Git et exécutez le script suivant :


$ /opt/AWS-ElasticBeanstalk-CLI-2.5.1/AWSDevTools/Linux/AWSDevTools-RepositorySetup.sh

Normalement, vous ne devriez avoir aucun output mais avoir désormais un répertoire AWSDevTools de créer dans le répertoire .git. Pour vérifier cela :


$ ls .git/AWSDevTools
aws  aws.elasticbeanstalk.config  aws.elasticbeanstalk.push

Votre projet Git est paré, vous avez désormais accès aux nouvelles commandes suivantes :

  • git aws.config : qui vous permettra de configurer vos identifiants Amazon ainsi que votre application et environnement,
  • git aws.push : qui vous permettra de pusher votre repository sur votre application Amazon.

Configurez alors votre projet Git en tapant la commande git aws.config :


$ git aws.config
 
AWS Access Key: 
AWS Secret Key: 
AWS Region [default to us-east-1]:
AWS Elastic Beanstalk Application: 
AWS Elastic Beanstalk Environment: 
 
NOTE: "git aws.push" will use the credentials found in the following file:
 
/home//.elasticbeanstalk/aws_credential_file
 
You can supply different credentials by editing that file or editing
.elasticbeanstalk/config to reference a different file.  The file should
have the following format:
 
AWSAccessKeyId=your key
AWSSecretKey=your secret

Comme spécifié ici, un fichier vous a été créé avec vos identifiants d'API Amazon (Access key et Secret key) dans le fichier /home//.elasticbeanstalk/aws_credential_file.

Notez également que le répertoire .elasticbeanstalk est également automatiquement ajouté à votre .gitignore.

Déployez l'application !

Vous n'avez plus qu'à taper la commande :

$ git aws.push

Les images d'environnements Amazon Elastic Beanstalk fournissent également quelques hooks utiles, comme le lancement d'un composer install lorsqu'un fichier composer.json est présent à la racine du projet.

Pour voir l'ensemble des hooks disponibles, vous pouvez les lister de cette façon, en vous connectant sur le serveur :


$ ls -R /opt/elasticbeanstalk/hooks/appdeploy/
/opt/elasticbeanstalk/hooks/appdeploy/:
enact  pre
 
/opt/elasticbeanstalk/hooks/appdeploy/enact:
01_flip.sh  09clean.sh  99_reload_app_server.sh
 
/opt/elasticbeanstalk/hooks/appdeploy/pre:
01_unzip.sh  02_setup_envvars.sh  05_configure_php.sh  10_composer_install.sh  12_update_permissions.sh

Définir vos propres hooks lors du déploiement

Amazon vous permet de définir vos propres hooks lors du déploiement en ajoutant des fichiers .config dans un répertoire .ebextensions à la racine de votre repository.

Ils seront alors exécutés dans l'ordre alphabétique (protip: vous pouvez les préfixer par un numéro : 01installcomposer.config, 02assetsinstall.config, etc ...).

Les fichiers de configuration sont au format YAML et peuvent contenir plusieurs commandes, elles aussi exécutées par ordre alphabétique, par exemple :


container_commands:
  01updatecomposer:
    command: "composer.phar self-update"
    leader_only: true
  02getcomposer:
    command: "cd /var/app/ondeck/html/ && composer.phar install --prefer-source"
    leader_only: true

Pour information, sachez que lorsque l'application est en cours de déploiement, l'action se passe dans le répertoire /var/app/ondeck/ et une fois déployée, elle est disponible dans /var/app/current/.

Il est également possible de définir des variables d'environnement, créer des utilisateurs, installer des packages, etc ... pour plus d'informations sur les syntaxes disponibles, rendez-vous sur : http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html.

Comments