2016-11-28 4 views
0

Je suis en train de déployer du code sur un environnement AWS EB de serveur Web à instance unique qui provisionne/met à jour ma base de données RDS connectée. J'ai un fichier .ebextensions qui appelle le code de déploiement:AWS Elastic Beanstalk Ordre de déploiement

--- 
container_commands: 
    01deploydb: 
    command: /var/www/html/php/cli/deploy-db.php 
    leader_only: true 

Sur le même déploiement, je laissai tomber le fichier-db.php deploy arrière d'un répertoire dans /cli/. Au déploiement, j'obtiens ERROR: [Instance: i-*****] Command failed on instance. Return code: 127 Output: /bin/sh: /var/www/html/php/cli/deploy-db.php: No such file or directory. container_command 01deploydb in .ebextensions/01_db.config failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.

Si je déploie une version qui n'inclut pas la commande, puis déployer une deuxième mise à jour incluant la commande, il n'y a pas d'erreur. Cependant, l'ajout de la commande et du fichier appelé en même temps produit l'erreur. Une séquence similaire s'est produite plus tôt avec une commande/un fichier différent.

Ma question est la suivante: y a-t-il un ordre/une séquence documentée sur la façon dont AWS met à jour l'environnement? Je m'attendais à ce que ma nouvelle version soit entièrement déployée (et le fichier .php installé) avant que les commandes container_commands ne soient appelées.

Répondre

2

La section commandes: s'exécute avant la mise en place des fichiers de projet. C'est ici que vous pouvez installer des paquets de serveur par exemple.

La section container_commands: s'exécute dans un répertoire de transfert avant que les fichiers ne soient placés dans leur destination finale. Ici vous pouvez modifier vos fichiers si vous en avez besoin. Chemin d'accès actuel est ce répertoire de mise en scène afin que vous puissiez courir comme ça (je pourrais obtenir le répertoire de l'application mal, il faudrait peut-être php/cli/deploy-db.php)

container_commands: 
    01deploydb: 
    command: cli/deploy-db.php 
    leader_only: true 

Référence pour ci-dessus: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

Vous pouvez également exécuter un poste déployer des scripts. Ce n'est pas très bien documenté (du moins ce n'était pas le cas). Vous pouvez faire quelque chose comme ça (il ne sera pas le seul dirigeant bien, mais vous pouvez placer un fichier dans ce répertoire par un container_commands:):

files: 
    "/opt/elasticbeanstalk/hooks/appdeploy/post/99_deploy.sh": 
     mode: "000755" 
     owner: root 
     group: root 
     content: | 
      #!/usr/bin/env bash 
      /var/www/html/php/cli/deploy-db.php 
+0

Merci @Gustaf! – Calteran