Amazon EC2 AMI personnalisée pas en cours d'exécution bootstrap (données utilisateur)
J'ai rencontré un problème lors de la création personnalisée AMIs (images) sur des instances EC2. Si je démarre une valeur par défaut de Windows 2012 server instance avec un bootstrap/l'utilisateur des données de script tels que;
<powershell>
PowerShell "(New-Object System.Net.WebClient).DownloadFile('http://download.microsoft.com/download/3/2/2/3224B87F-CFA0-4E70-BDA3-3DE650EFEBA5/vcredist_x64.exe','C:\vcredist_x64.exe')"
</powershell>
Il fonctionnera comme prévu et accédez à l'URL et télécharger le fichier et le stocker sur le Disque C:.
Mais si je configurer un Serveur Windows Instance, puis créer une image à partir d'elle, et l'enregistrer comme un AMI Personnalisée, puis de la déployer avec exactement le même personnalisé par l'utilisateur des données le script ne fonctionnera pas. Mais si je vais à l'instance url ( http://169.254.169.254/latest/user-data
), il va montrer le script a été importés avec succès, mais n'a pas été exécuté.
Après vérification des journaux d'erreur que j'ai remarqué cela sur une occasion régulière:
Failed to fetch instance metadata http://169.254.169.254/latest/user-data with exception The remote server returned an error: (404) Not Found.
Vous devez vous connecter pour publier un commentaire.
Mise à jour 4/15/2017: Pour EC2Launch et Windows Server 2016 AMIs
Par AWS documentation pour EC2Launch, Windows Server 2016 les utilisateurs peuvent continuer à utiliser l'persistent balises introduites dans EC2Config 2.1.10:
Les données de l'utilisateur exemple:
Pour les démarrages suivants:
Windows Server 2016, les utilisateurs doivent en outre permettre configurer et activer le EC2Launch au lieu de EC2Config. EC2Config était obsolète sur Windows Server 2016 AMIs en faveur de EC2Launch.
Exécuter le powershell suivante pour planifier une Tâche de Windows qui exécutera les données de l'utilisateur lors du démarrage suivant:
De par sa conception, cette tâche est désactivée après il est exécuté pour la première fois. Cependant, l'utilisation de l'persistent tag causes Invoke-UserData pour planifier une tâche séparée via Inscrivez-FunctionScheduler, pour persister les données de vos utilisateurs sur les bottes. Vous pouvez voir par vous-même à
C:\ProgramData\Amazon\EC2-Windows\Launch\Module\Scripts\Invoke-Userdata.ps1
.Résolution de problèmes supplémentaires:
Si vous rencontrez d'autres problèmes avec vos données d'utilisateur, les scripts, vous pouvez trouver de l'utilisateur de l'exécution des données des journaux à
C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log
pour les instances provenant de la WS 2016 de la base de AMI.Réponse originale à cette question: Pour EC2Config et les anciennes versions de Windows Server
De l'utilisateur de l'exécution des données est désactivé automatiquement après le démarrage initial. Lorsque vous avez créé votre image, il est probable que l'exécution avait déjà été désactivé. Ce qui est configurable manuellement dans
C:\Program Files\Amazon\Ec2ConfigService\Settings\Config.xml
.La la documentation pour la "Configuration d'une Instance de Windows à l'Aide de la EC2Config Service" propose plusieurs options:
Par programmation créer une tâche planifiée pour s'exécuter au démarrage du système à l'aide de
schtasks.exe /Create
, et le point de la tâche planifiée à l'utilisateur des données de script (ou un autre script) àC:\Program Files\Amazon\Ec2ConfigServer\Scripts\UserScript.ps1
.Par programmation de permettre à l'utilisateur de données plug-in Config.xml.
Exemple, à partir de la documentation:
<persist>true</persist>
pour activer le plug-in d'après les données de l'utilisateur à l'exécution.Exemple, à partir de la documentation:
Une autre solution qui a fonctionné pour moi est de exécutez Sysprep avec EC2Launch.
Le problème est que AWS ne pas retrouver la route vers le service de profil (169.254.169.254) dans votre AMI personnalisée. Voir la réponse par SanjitPatel dans ce post. Alors, quand j'ai essayé d'utiliser mon AMI personnalisée pour créer des demandes ponctuelles, mes nouvelles instances ont été, à défaut de trouver les données de l'utilisateur.
Fermeture avec Sysprep, essentiellement des forces AWS re-faire tous les travaux d'installation sur l'instance, comme si elle avait été exécuté pour la première fois. Ainsi, lorsque vous créez votre exemple, l'arrêter à l'aide de Sysprep et ensuite créer votre AMI personnalisée, AWS permet de configurer le service de profil d'itinéraire correctement pour les nouvelles instances et exécuter vos données utilisateur. Cela permet aussi d'éviter de modifier manuellement des Tâches de Windows et de l'exécution des données de l'utilisateur sur les bottes, en tant que persistent balise ne.
Voici une rapide étape par étape:
Espérons que cette aide!
À la fin du démarrage initial (UserData) script, ajoutez simplement persister balise comme indiqué ci-dessous.
Fonctionne parfaitement.
Pour ceux qui en ont obtenu ici de Google et utilisez un Serveur 2016 exemple, il semble que ce n'est plus possible.
Server2016 n'a pas ec2config service et donc vous ne pouvez pas utiliser l'persistent drapeau.
Décrit dans Anthony Neace post.
Serveur 2016 utilise EC2Launch et je n'ai pas encore vu comment c'est possible d'exécuter un script à chaque démarrage. Vous pouvez exécuter un script sur le premier démarrage, mais la suite des bottes de ne pas les exécuter.
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1
script Powershell. Ce script désactive la tâche et invoque ensuite les données de l'utilisateur. Donc, il vous suffit de réactiver la tâche dans les données de l'utilisateur à l'aide de Powershell