web-dev-qa-db-fra.com

Référencement de variables env à partir de fichiers de configuration .ebextensions Elastic Beanstalk

Est-il possible de référencer les propriétés d'environnement de conteneur PARAM1/PARAM2 etc. à partir des fichiers de configuration .ebextensions. Si c'est le cas, comment? J'ai essayé $ PARAM1 mais cela semblait être une valeur vide.

Je souhaite que le nom d'hôte au démarrage contienne DEV, QA ou PROD, que je transmets à mon conteneur via la variable d'environnement PARAM1.

commands:
  01-set-correct-hostname:
    command: hostname myappname{$PARAM1}.com
35
Kevin

En fin de compte, vous ne pouvez le faire que dans la section container_commands et non dans la section commands.

Cela marche:

container_commands:
  01-set-correct-hostname:
    command: "hostname myappname{$PARAM1}.com"

Voir http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-container_commands pour plus d'informations.

25
Kevin

Voici ce qui a fonctionné pour moi. J'ai essayé l'approche acceptée et elle n'a pas produit le résultat souhaité (des accolades ont été incluses dans la sortie). Le dépannage des commandes exécutées à partir d'un fichier .config lors du téléchargement sur Elastic Beanstalk constitue également un défi (ou je ne sais tout simplement pas où chercher).

Environnement AWS:

  • Type - haricot élastique
  • Plate-forme - Amazon Linux 2015.09 v2.0.4 64 bits sous PHP 5.6

Propriétés d'environnement Elastic Beanstalk (Configuration -> Configuration logicielle -> Propriétés d'environnement):

  • Nom de la propriété - HELLO_VARIABLE
  • Valeur de la propriété - test

Exemple de fichier .config inclus dans le dossier .ebextensions de l'artefact de déploiement:

container_commands:
  0_test-variable:
    cwd: /tmp
    command: "touch ${HELLO_VARIABLE}_0_.txt"
  1_test-variable:
    cwd: /tmp
    command: "touch {$HELLO_VARIABLE}_1_.txt"
  2_test-variable:
    cwd: /tmp
    command: "touch $HELLO_VARIABLE_2_.txt"

Une fois que l'artefact a été déployé à l'aide d'Elastic Beanstalk, le répertoire/tmp d'une instance EC2 contient les fichiers suivants (notez les accolades et la position de $):

  • touchez $ {HELLO_VARIABLE} _0_.txt crée /tmp/test_0_.txt
  • touch {$ HELLO_VARIABLE} _1_.txt crée /tmp/{testBuch_1_.txt
  • touchez $ HELLO_VARIABLE_2_.txt crée /tmp/.txt
10
Maciej

Pour rendre les variables d'environnement disponibles à l'étape des commandes, je les analyse dans un fichier source bash.

000001.envvars.config

...
commands:
  000001_envvars_to_bash_source_file:
    command: |
      # source our elastic beanstalk environment variables
      /opt/elasticbeanstalk/bin/get-config --output YAML environment|Perl -ne "/^\w/ or next; s/: /=/; print qq|\$_|" > /var/tmp/envvars
      chmod 400 /var/tmp/envvars
...

Alors j'utilise: -

source /var/tmp/envvars

dans les commandes suivantes.

6
gilesw

La réponse acceptée est assez obsolète.

Vous pouvez maintenant utiliser le fichier /opt/elasticbeanstalk/support/envvars qui est déjà un script Shell prêt à être recherché:

commands:
  01_update_composer:
    command: |
      . /opt/elasticbeanstalk/support/envvars
      /usr/bin/composer.phar self-update

container_commands:
  01_run_composer:
  command: |
    composer.phar install --no-scripts --no-dev  # already has user-specified env variables

Mettre à jour:

Après des recherches plus approfondies, container_commands: inclut vos variables d’environnement, mais pas commands:.

6
Roman Zhuzha

Ce blog décrit en détail différentes options pour y parvenir.

https://www.onica.com/blog/how-to-call-and-export-variables-in-elastic-beanstalk/

0
Chacko Mathew