web-dev-qa-db-fra.com

Comment vérifier si une ressource spécifique existe déjà dans le script CloudFormation

J'utilise cloudformation pour créer une pile qui inclut une instance ec2 auto-mise à l'échelle et un compartiment S3. Pour le compartiment S3, DeletionPolicy est défini sur Conserver, ce qui fonctionne bien jusqu'à ce que je souhaite réexécuter mon script cloudformation. Comme lors des exécutions précédentes, le script a créé le compartiment S3, il échoue lors des exécutions suivantes, indiquant que mon compartiment S3 existe déjà. Aucune des autres ressources n'est bien entendu créée. Ma question est la suivante: comment puis-je vérifier si mon compartiment S3 existe d'abord dans le script cloudformation? Si tel est le cas, ignorez la création de ces ressources. J'ai examiné les conditions dans AWS, mais il semble que tout repose sur les paramètres, je n'ai pas encore trouvé de fonction qui vérifie les ressources existantes.

24
alexfvolk

Il n'y a pas de moyen évident de le faire, sauf si vous créez le modèle dynamiquement avec une vérification explicite. Les piles créées à partir du même modèle sont des entités indépendantes. Si vous créez une pile contenant un compartiment, supprimez la pile tout en conservant le compartiment, puis créez une nouvelle pile (même une avec le même nom). nouvelle pile et le compartiment créé dans le cadre de la pile précédente.

Si vous souhaitez utiliser le même compartiment S3 pour plusieurs piles (même si un seul d'entre eux existe à la fois), ce compartiment n'appartient pas vraiment à la pile - il serait plus logique de le créer dans une pile séparée, en utilisant un modèle séparé (en plaçant l'URL du compartiment dans la section "Résultats"), puis en le référençant à partir de votre pile d'origine à l'aide d'un paramètre.

19
bsvingen

Ajoutez simplement un paramètre d'entrée au modèle CloudFormation pour indiquer qu'un compartiment existant doit être utilisé ... sauf si vous ne savez pas déjà au moment où vous allez utiliser le modèle? Vous pouvez ensuite ajouter une nouvelle ressource ou non en fonction de la valeur du paramètre.

6
linuxfreakus