web-dev-qa-db-fra.com

Accès aux variables d'environnement dans les extensions Web AWS Beanstalk

J'essaie d'accéder à une variable d'environnement que j'ai définie dans la configuration AWS Beanstalk. J'ai besoin d'y accéder dans un fichier de configuration dans .ebextensions ou dans un fichier copié en place dans un fichier de configuration. J'ai essayé ce qui suit:

container_commands:
  update_nginx_config:
    command: "cp .ebextensions/files/nginx/nginx.conf /etc/nginx/nginx.conf"

Et dans mon nginx.conf fichier, j'ai essayé d'accéder à $MYVAR, ${MYVAR} et {$MYVAR}, dont certains ont été suggérés ici et ici (ce dernier étant directement dans un fichier de configuration).

files:
  "/etc/nginx/nginx.conf" :
    mode: "000644"
    owner: root
    group: root
    content: |
      $MYVAR ${MYVAR} {$MYVAR}

Cela ne fonctionne pas non plus. Dans tous les cas, les noms de variables sont juste sortis tels que $MYVAR, donc Beanstalk ne reconnaît pas mes variables. J'ai trouvé ce qui suit dans la documentation AWS about container_commands:

Ils ont également accès à des variables d'environnement telles que vos informations d'identification de sécurité AWS.

C'est super, mais cela ne dit pas comment .

Comment puis-je accéder à une variable d'environnement avec des extensions électroniques, que ce soit dans un fichier de configuration lui-même ou dans un fichier séparé qui est copié en place?

Merci d'avance!

32
ba0708

J'ai contacté le support technique d'Amazon pour une réponse à cette question, et voici leur réponse:


Malheureusement, les variables ne sont pas disponibles directement dans les extensions électroniques. La meilleure option consiste à créer un script qui est ensuite exécuté à partir de commandes de conteneur comme celle-ci:

files:
  "/home/ec2-user/setup.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash

      # Commands that will be run on container_commmands
      # Here the container variables will be visible as environment variables.

container_commands:
  set_up:
    command: /home/ec2-user/setup.sh

Ainsi, si vous créez un script Shell et l'invoquez via une commande de conteneur, vous aurez alors accès aux variables d'environnement dans votre script Shell comme suit: $ENVIRONMENT_VARIABLE. J'ai testé cela, et cela fonctionne.

Si vous rencontrez des problèmes lors de l'exécution d'un script en tant que root et que vous ne pouvez pas lire les variables d'environnement configurées, essayez d'ajouter ce qui suit en haut de votre script.

. /opt/elasticbeanstalk/support/envvars

Selon votre cas d'utilisation, vous devrez peut-être changer un peu votre approche (du moins je l'ai fait), mais c'est une solution de travail. J'espère que ça aidera quelqu'un!

48
Andy0708

De cette réponse: https://stackoverflow.com/a/47817647/2246559

Vous pouvez utiliser la fonction GetOptionSetting décrite ici: https://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/ebextensions-functions.html

Par exemple, si vous définissez le worker_processes variable, elle pourrait ressembler à:

files:
  "/etc/nginx/nginx.conf" :
    mode: "000644"
    owner: root
    group: root
    content: |
      worker_processes `{"Fn::GetOptionSetting": {"Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "MYVAR"}}`;

Notez les backticks `` dans l'appel de fonction.

11
Danny Sullivan