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