L'utilisateur des données de scripts n'est pas en cours d'exécution sur mon AMI personnalisée, mais le fait de travailler dans la norme Amazon linux
J'ai cherché sur beaucoup de sujet sur les "données d'utilisateur du script ne fonctionne pas" dans ces quelques jours, mais jusqu'à maintenant, je n'ai pas eu la moindre idée sur mon cas, merci à vous de m'aider à comprendre ce qui s'est passé, merci beaucoup!
Selon AWS Données utilisateur explication:
Lorsque vous lancez une instance Amazon EC2, vous avez la possibilité de transmettre les données de l'utilisateur à l'instance qui peut être utilisé pour la configuration automatique des tâches et même exécuter des scripts après l'instance commence.
J'ai donc essayé de passer mes propres données utilisateur lorsqu'une instance de lancement, c'est mon user-data:
\#!/bin/bash
echo 'test' > /home/ec2-user/user-script-output.txt
Mais il n'existe pas de fichier dans ce chemin d'accès: /home/ec2-user/user-script-output.txt
J'ai vérifié /var/lib/cloud/instance/user-data.txt
, le fichier existe et même que mon utilisateur des données de script.
Aussi, j'ai vérifié le journal en /var/log/cloud-init.log
, il n'y a pas de message d'erreur.
Mais l'utilisateur des données de script fonctionne si je lance une nouvelle instance avec Amazon linux(2014.09.01), mais je ne suis pas sûr de ce que la différence entre mes AMI (basé sur linux Amazon) et Amazon linux.
La seule autre partie que j'ai vu est si j'exécute ce script:
sudo yum list installed | grep cloud-init
Mon AMI:
cloud-init.noarch 0.7.2-8.33.amzn1 @amzn-main
Amazon linux:
cloud-init.noarch 0.7.2-8.33.amzn1 installé
Je ne suis pas sûr que ce est la raison?
Si vous avez besoin de plus d'informations, je suis heureux de fournir, s'il vous plaît laissez-moi savoir ce qui s'est passé dans mon propre AMI et comment le résoudre?
merci beaucoup
Mise à jour
Viens de trouver une réponse à partir de ce post,
Si j'ajoute #cloud-boothook dans le haut de l'utilisateur du fichier de données, il fonctionne!
#cloud-boothook
#!/bin/bash
echo 'test' > /home/ec2-user/user-script-output.txt
Mais toujours pas très bien pourquoi.
- Double Possible de Comment rendre les données d'utilisateur EC2 travail fraîchement construit AMI, fait avec Packer
- Le #cloud-boothook solution ne fonctionne pas pour moi. UserData est toujours pas en cours d'exécution.
Vous devez vous connecter pour publier un commentaire.
User_data est exécuté uniquement lors de la première mise en place. Que votre image est un programme personnalisé, je suppose qu'il ont déjà été lancés une fois et ainsi de user_data est désactivée.
Pour windows, il peut être fait en cochant une case dans Services Ec2 Propriétés. Je suis à la recherche pour le moment comment le faire de manière automatisée à la fin de la coutume de création d'image.
Pour linux, je suppose que le mécanisme est le même, et user_data doit être ré-activée sur votre image personnalisée.
La
#cloud-boothook
faire cela fonctionne, car il modifie le script à partir d'unuser_data
mécanisme pour un nuage boothook qui s'exécute à chaque démarrage.EDIT :
Voici le code pour réactiver démarrer sur windows à l'aide de powershell:
(Je sais la question de l'accent linux, mais il peut aider d'autres personnes ...)
Que j'ai testé, il y avait quelques bootstrap données dans
/var/lib/cloud
répertoire.Après j'ai vidé le répertoire, les Données de l'Utilisateur script a travaillé normalement.
J'utilise CentOS et la logique de userdata il est simple:
Dans le fichier /etc/rc.locaux il y a un appel pour un initial.sh script, mais il a l'air d'un drapeau:
initial.sh le fichier est-il que l'exécution des données utilisateur, mais à la fin il supprime le drapeau. Donc, si vous voulez que votre nouvel AMI à exécuter par l'utilisateur des données de nouveau, il suffit de créer le drapeau à nouveau avant de créer l'image:
J'ai aussi été confronté au même problème sur Ubuntu 16.04 hvm AMI. J'ai soulevé la question à AWS support mais je ne pouvais pas trouver la raison exacte/bug qui l'affecte.
Mais j'ai quelque chose qui pourrait vous aider.
Si ces choses encore n'est-ce pas de travail, vous pouvez le tester encore en forçant l'utilisateur des données de l'exécuter manuellement. Aussi tailf
/var/log/cloud-init-output.log
pour le cloud-init état. Il doit se terminer par quelque chose comme modules:finale pour rendre vos données utilisateur de la course. Il ne devrait pas coincé sur les modules:config.sudo rm -rf /var/lib/cloud/*
sudo cloud-init init
sudo cloud-init modules -m final
Je n'ai pas la moindre idée de si les commandes ci-dessus va travailler sur CentOS ou pas. Je l'ai testé sur Ubuntu.
Dans mon cas, j'ai aussi essayé de supprimer le fichier /var/lib/répertoire de nuage, mais encore il n'a pas pu exécuter l'utilisateur des données dans notre scénario. Mais je suis venu avec différentes solution pour elle. Ce que nous avons fait, c'est que nous avons créé un script avec les commandes ci-dessus et fait que le script à exécuter lors de l'initialisation du système.
J'ai ajouté en dessous de la ligne dans /etc/rc.local pour y arriver.
sudo bash /home/ubuntu/force-user-data.sh || exit 1
Mais ici, c'est le catch, il va exécuter le script à chaque démarrage, qui rend vos données utilisateur pour exécuter à chaque démarrage, tout comme le #cloud-boothook. Pas de soucis, vous pouvez simplement modifier en supprimant simplement les force-user-data.sh lui-même à la fin. Si votre force-user-data.sh va ressembler à quelque chose comme
#!/bin/bash
sudo rm -rf /var/lib/cloud/*
sudo cloud-init init
sudo cloud-init modules -m final
sudo rm -f /home/ubuntu/force-user-data.sh
exit 0
Je vais apprécier si quelqu'un peut mettre quelques lumières sur pourquoi il est incapable d'exécuter l'utilisateur des données.
J'ai eu beaucoup de mal avec cela. Je vais fournir des informations détaillées à pied-si.
Mon pli, c'est que je suis en utilisant terraform pour instancier les hôtes par l'intermédiaire d'une configuration de lancement et de mise à l'échelle automatique de groupe.
Je ne pouvais PAS le faire fonctionner en ajoutant le script inline dans lc.tf
J'ai pu récupérer les données de l'utilisateur,
mais il a remarqué que j'étais en train de me avec les guillemets toujours en elle.
C'est comment je l'ai eu à travailler: j'ai déménagé à tirer à partir d'un modèle plutôt car ce que vous voyez est ce qui obtenez vous.
Cela signifie que j'ai aussi besoin de déclarer mon fichier de modèle comme suit:
Mais j'avais toujours une erreur dans le cloud init journaux
/var/log/cloud-init.journal
[AVERTISSEMENT]: non Gérée non-multipart (text/x-pas-multipart) userdata: 'Content-Type: text/cloud...'
Puis j'ai trouvé cet article à propos de l'utilisateur mise en forme des données de l'utilisateur Qui fait sens, si les données utilisateur peuvent venir dans plusieurs parties, peut-être cloud-init besoins cloud-init commandes en un seul endroit et le script dans l'autre.
Donc mon bootscript.tpl ressemble à ceci:
Les Données de l'utilisateur doit s'exécuter correctement sans l'aide de
#cloud-boothook
(qui est utilisé pour activer les Données de l'Utilisateur le plus tôt possible au cours du processus de démarrage).J'ai commencé un nouvel AMI Amazon Linux et utilisé vos Données Utilisateur, en plus d'un bit supplémentaire:
Cet été créé avec succès trois fichiers.
Données utilisateur, les scripts sont exécutés comme
root
, de sorte qu'il doit avoir l'autorisation de créer des fichiers dans n'importe quel endroit.Je remarque que dans votre code fourni, un exemple se réfère à
/home/ec2-user/user-script/output.txt
(avec un sous-répertoire) et un exemple se réfère à/home/ec2-user/user-script-output.txt
(pas de sous-répertoire). La commande serait compréhensible échouer si vous essayez de créer un fichier dans un répertoire inexistant, mais votre "mise à Jour" exemple semble montrer qu'il a effectivement fonctionné.c'est la réponse qu'un exemple: vous assurer que vous avez dans le titre uniquement
#!/bin/bash