Je souhaite utiliser des variables d'environnement provenant d'un shell d'instance AWS Elastic Beanstalk.
Brève description
Dans AWS Elastic Beanstalk, les variables d'environnement ne sont pas exposées au système d'exploitation (OS). Lorsque les variables d'environnement sont définies sur Elastic Beanstalk, vous pouvez utiliser un utilitaire contenant des variables d'environnement provenant du système d'exploitation. Pour utiliser un utilitaire avec des variables d'environnement Elastic Beanstalk, vous devez utiliser un fichier .ebextension qui exporte les variables d'environnement vers les variables du système d'exploitation.
Pour utiliser des variables d'environnement provenant d'un shell d'instance Elastic Beanstalk, procédez comme suit :
- Utilisez l'utilitaire get-config pour lire vos variables d'environnement Elastic Beanstalk.
- Pour convertir la sortie get-config de JSON en variables shell, utilisez l'utilitaire jq utility disponible sur le site Web de jq.
- Enregistrez les variables dans le fichier /etc/profile.d/local.sh. Ce fichier est ensuite lu par Bash pour exporter les variables vers le système d'exploitation.
Résolution
- Créez un fichier .ebextension dans le bundle source de votre application, puis incluez les informations suivantes :
commands:
setvars:
command: /opt/elasticbeanstalk/bin/get-config environment | jq -r 'to_entries | .[] | "export \(.key)=\"\(.value)\""' > /etc/profile.d/local.sh
packages:
yum:
jq: []
Remarque : dans l'exemple ci-dessus, le fichier de configuration est nommé setvars.config.
- Enregistrez le fichier .ebextension, puis déployez-le dans votre environnement Elastic Beanstalk.
- Pour vérifier que le fichier .ebextension exporte bien les variables, utilisez SSH pour vous connecter à votre instance. Exécutez ensuite la commande suivante :
env | grep VARIABLE_NAME
Remarque : définissez VARIABLE_NAME sur une variable définie dans votre environnement. Avant d’effectuer un test, fermez toutes les sessions existantes. Utilisez ensuite SSH pour vous reconnecter.
Si vos variables d'environnement sont correctement définies, votre sortie ressemblera à l'exemple suivant. La variable RDS_PORT est définie dans l'environnement Elastic Beanstalk.
$ env|grep RDS_PORTRDS_PORT=3306
Remarque : l’utilisation de commandes dans le fichier .ebextension signifie que le fichier local.sh peut uniquement être mettre à jour via un nouveau déploiement. Si vous ajoutez ou modifiez une variable dans l'environnement, vous devez créer un nouveau déploiement avant que cette variable ne soit exportée vers le système d'exploitation.