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!
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!
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.