web-dev-qa-db-fra.com

Comment définir les variables d'environnement sur l'instance EC2 via les données utilisateur

J'essaie de définir des variables d'environnement avec les données utilisateur EC2s, mais rien de ce que je fais ne semble fonctionner

voici les scripts de données utilisateur que j'ai essayés

#!/bin/bash
echo "export Host_URL=checkEmai-LoadBala-ICHJ82KG5C7P-23235232.us-east-1.elb.amazonaws.com" >> /env.sh 
source /env.sh

Et un autre:

#!/bin/bash
echo "#!/bin/bash" >> /env.sh
echo "export Host_URL=checkEmai-LoadBala-ICHJ82KG5C7P-67323523.us-east-1.elb.amazonaws.com" >> /env.sh 
chmod +x /env.sh
/env.sh

Ils ne font absolument rien, et si je me connecte et lance la commande source /env.sh ou /env.sh Ça marche. donc cela doit être quelque chose d'interdit que j'essaie de faire.

Voici la sortie de /var/log/cloud-init-output.log en utilisant -e -x

+ echo 'export Host_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709021.us-east-1.elb.amazonaws.com'
+ source /env.sh
++ export Host_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709022.us-east-1.elb.amazonaws.com
++ Host_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709022.us-east-1.elb.amazonaws.com

Encore, echo $Host_URL est vide

Comme demandé, le script complet UserData

#!/bin/bash
set -e -x 
echo "export Host_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709021.us-east-1.elb.amazonaws.com" >> /env.sh 
source /env.sh
/startup.sh staging 2649
13
Gleeb

L'une des approches les plus configurables pour définir des variables d'environnement pour les instances EC2 consiste à utiliser Systems Manager Parameter Store . Cette approche facilitera la gestion de différents paramètres pour un grand nombre d'instances EC2, toutes deux chiffrées à l'aide de AWS KMS ainsi qu'en texte brut. Il permettra également de modifier les valeurs des paramètres avec un minimum de changements dans le niveau d'instance EC2. Les étapes sont les suivantes.

  • Définissez les paramètres de chaîne (chiffrés avec KMS ou non chiffrés) dans EC2 Systems Manager Parameter Store.
  • Dans le rôle IAM qu'EC2 assume, accordez l'autorisation requise pour accéder au magasin de paramètres.
  • À l'aide des commandes AWS CLI pour EC2 System Manager, lisez les paramètres et exportez vers les variables d'environnement dans la section Données utilisateur en utilisant Get-Parameter ou Get-Parameters Commandes AWS CLI et - contrôle de la sortie de la commande selon les besoins.

par exemple, en utilisant la commande Get-Parameter pour récupérer le paramètre db_connection_string (Unencrypted).

export DB_CONNECTION =$(aws --region=us-east-2 ssm get-parameter --name "db_connection" --query 'Value')

Remarque: Pour plus de détails sur la configuration des clés AWS KMS, la définition des chaînes chiffrées, la gestion des stratégies IAM, etc., reportez-vous aux articles suivants.

10
Ashan

Le script de données utilisateur sur EC2 s'exécute après le démarrage dans son propre processus. Les variables d'environnement sont définies dans ce processus et disparaissent à la fin du processus. Vous ne verrez pas les variables d'environnement dans d'autres processus, c'est-à-dire le shell de connexion ou d'autres programmes, d'ailleurs.

Vous devrez trouver un moyen d'intégrer ces variables d'environnement dans le programme dont vous avez besoin pour les voir.

Où avez-vous besoin de ces variables pour être disponibles? Dans "/startup.sh staging 2649"?

ÉDITER

Essaye ça:

#!/bin/bash
set -e -x 
export Host_URL="checkEmai-LoadBala-ICHJ82KG5C7P-2141709021.us-east-1.elb.amazonaws.com"
/startup.sh staging 2649

Modifiez ensuite "/startup.sh" et placez la ligne suivante en haut:

echo $Host_URL > /tmp/var

Démarrez l'instance, puis collez/tmp/var ici.

10
Ziffusion

Je trouve que c'est un moyen assez simple de définir des variables d'environnement pour tous les utilisateurs utilisant les données utilisateur. Cela me permet de configurer des applications afin que la même AMI puisse fonctionner avec plusieurs scénarios:

#!/bin/bash
echo export DB_CONNECTION="some DB connection" >> /etc/profile
echo export DB_USERNAME="my user" >> /etc/profile
echo export DB_PASSWORD="my password" >> /etc/profile

Désormais, tous les utilisateurs auront DB_CONNECTION, DB_USERNAME et DB_PASSWORD définis comme variables d'environnement.

6
hamx0r

Vous pouvez ajouter un autre script Shell dans /etc/profile.d/yourscript.sh qui contiendra l'ensemble des variables d'environnement que vous souhaitez ajouter.

Ce script s'exécutera à chaque démarrage et votre variable sera disponible pour tous les utilisateurs.

#!/bin/sh
echo 'export AWS_DEFAULT_REGION=ap-southeast-2' > ~/myconfiguration.sh
chmod +x ~/myconfiguration.sh
Sudo cp ~/myconfiguration.sh /etc/profile.d/myconfiguration.sh

Le code ci-dessus crée un script Shell pour définir la variable d'environnement pour la région par défaut aws et le copie dans profile.d.

3
hardik khandelwal

Après avoir fait les choses dans le script de données utilisateur, le processus se termine. Ainsi, quelle que soit la variable d'environnement que vous exportez, elle ne sera pas présente dans le processus suivant. Une façon consiste à placer les exportations dans le fichier .bashrc afin qu'il soit également disponible lors de la prochaine session.

    echo "export Host_URL=checkEmai-LoadBala-ICHJ82KG5C7P-23235232.us-east-1.elb.amazonaws.com" >> ~/.bashrc
1
harsh.tibrewal