Est-il possible de forcer la recréation d'une instance EC2 ou RDS à l'aide de piles de cloudformation?
Ma pile reste bloquée à un point où la simple destruction et la création de la ressource le corrigeront, au lieu de cela j'ai dû supprimer la pile entière pour continuer le travail.
Éditer:
Ce problème m'a frappé deux fois. J'ai d'abord créé une instance AWS :: RDS :: avec quelques valeurs par défaut, puis j'ai essayé de la rétrograder vers "EngineVersion": "5.5". Changer cela est censé se produire avec une interruption, mais les instances mysql ne peuvent pas être rétrogradées de 5.6 à 5.5, donc la pile a été laissée dans l'état UPDATE_FAILED et je ne peux pas recréer RDS sans une astuce désagréable.
L'autre occurrence était que j'ai plusieurs "AWS :: EC2 :: Instance" qui télécharge et exécute un script à partir de ses "UserData" évidemment si Y change le script téléchargé, je dois recréer l'instance, et il n'y a aucun moyen de le faire. Encore une fois, j'utilise la même astuce pour faire recréer la machine.
L'astuce désagréable:
Au lieu d'utiliser un groupe de mise à l'échelle automatique d'une machine, j'ai résolu les deux problèmes en changeant la zone de disponibilité dans les propriétés ... mais je me suis laissé de mauvais goût
cfn-hup
: docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…Réponses:
Pour les instances EC2 sauvegardées par l'instance, une astuce consiste à ajouter un commentaire au script de données utilisateur contenant un numéro de version, une date ou similaire, puis de le modifier chaque fois que vous souhaitez que l'instance soit recréée:
Toute modification de
UserData
entraînera le remplacement de l'instance (c'est-à-dire la régénération). Le comportement du script de données utilisateur doit être le même, car la seule modification est un commentaire. Notez que cela ne fonctionne pas pour les instances soutenues par EBS.Pour RDS, vous pouvez prendre un instantané DB de l'instance RDS actuelle, puis modifier votre modèle pour utiliser cet instantané avec
DBSnapshotIdentifier
:À chaque
DBSnapshotIdentifier
modification, l'instance de base de données sera remplacée. L'utilisation d'instantanés vous permettra également de conserver les données à partir du moment où l'instantané a été créé. (Si vous souhaitez effacer les données, vous pouvez créer un instantané vide et le transmettre en entrée. Ou supprimer et recréer la pile CloudFormation entière.)Une approche plus générique consiste à modifier le nom logique de la ressource. Depuis la modification d'un modèle de pile dans les documents CloudFormation:
la source
Si vous le placez dans un AutoScalingGroup, vous pouvez modifier le AutoScalingGroup min / max / default à 0, puis dès qu'il commence à détruire l'ancienne instance, vous pouvez ensuite mettre le min / max / default au 1/1/1 et presto: nouvelle instance.
la source
Si vos EC2 sont dans un AutoScalingGroup, vous pouvez définir la
AutoScalingGroupName
propriété avec un numéro de version.Chaque fois que vous modifiez ce numéro de version, CFN: 1. crée un nouveau groupe de mise à l'échelle automatique et fait tourner les instances souhaitées 2. tue les instances de l'ancien groupe de mise à l'échelle automatique et le supprime
Voici un morceau de code de ma pile où j'utilise cette technique pour forcer un grand nombre de machines EC2 à recréer et à extraire automatiquement de nouveaux logiciels de S3.
la source