Je suis assis avec une situation où j'ai besoin de provisionner des instances EC2 avec des packages au démarrage. Il existe quelques contraintes (entreprise/entreprise):
En raison principalement de la deuxième contrainte, je me demandais quel était le meilleur endroit pour placer l'approvisionnement. C'est ce que j'ai trouvé
Provision dans Terraform
Comme il est indiqué, je prévois simplement en terraform les cas nécessaires. Si je regroupe ces ressources dans des modules, le provisionnement ne "s'échappera" pas. Les désavantages
Provisioning dans Packer
Ceci est basé sur le hypothèse que Packer vous permet de provisionner au-dessus des AMI afin que les AMI puissent être "étendues". En outre, cela ne sera utilisé que dans AWS, il n'utilisera donc pas nécessairement d'autres constructeurs. L'approvisionnement dans Packer rend le code Terraform beaucoup plus simple et l'application de terraform deviendra plus rapide car ce n'est qu'une AMI que vous lancez.
Pour moi, ces deux méthodes ont leur place. Mais ce que je veux vraiment savoir, c'est quand choisissez-vous Packer Provisioning plutôt que Terraform Provisioning?
L'utilisation de Packer pour créer des images finies (ou presque terminées) raccourcit considérablement le temps nécessaire au déploiement de nouvelles instances et vous permet également d'utiliser des groupes de mise à l'échelle automatique.
Si Terraform exécute un provisionneur tel que Chef ou Ansible à chaque création d'instance EC2, vous ajoutez un laps de temps pour que le provisionneur s'exécute au moment où vous devez déployer de nouvelles instances. À mon avis, il est préférable de faire la configuration à l'avance et à l'avance à l'aide de Packer pour cuire autant que possible dans l'AMI, puis utiliser des scripts/outils de données utilisateur comme Consul-Template pour fournir un environnement spécifique différences.
Packer peut certainement s'appuyer sur des images et nécessite en fait un source_AMI
à préciser. Je recommande fortement de baliser vos AMI d'une manière qui vous permette d'utiliser source_AMI_filter
dans Packer et Terraform aws_AMI
source de données donc lorsque vous apportez des modifications à votre AMI Packer, Terraform les récupérera automatiquement pour les construire ou les déployer à la prochaine opportunité.
Personnellement, je prépare une AMI "de base" raisonnablement légère qui effectue un durcissement de base et configure la surveillance et la journalisation que je veux pour toutes les instances qui sont déployées et s'assure également que Packer chiffre le volume racine de l'AMI. Toutes les autres images sont ensuite construites à partir de la dernière AMI "de base" et n'ont pas à se soucier de s'assurer que ces choses sont installées/configurées ou de chiffrer le volume racine.
En intégrant votre configuration dans l'AMI, vous pouvez également évoluer vers le modèle d'infrastructure immuable qui présente des avantages majeurs dans la mesure où vous savez que vous pouvez toujours supprimer une instance qui rencontre des problèmes et la remplacer très rapidement par une nouvelle. Selon votre niveau de maturité, vous pouvez même supprimer l'accès aux instances afin qu'il ne soit plus possible de modifier quoi que ce soit sur l'instance une fois qu'elle a été déployée, ce qui, selon mon expérience, est un facteur majeur des problèmes opérationnels.
Très occasionnellement, vous pouvez rencontrer quelque chose qui rend très difficile la création d'une AMI et dans ces cas, vous pouvez choisir d'exécuter vos scripts de provisioning dans un provisionneur Terraform lors de sa création. Parfois, il est tout simplement plus facile de déplacer un processus existant vers l'utilisation de provisioners avec Terraform que de créer les AMI, mais je pousserais à déplacer les choses vers Packer si possible.
J'ai rencontré la même situation. Selon ma compréhension
Enfin, c'est votre décision et votre fréquence de lancement des instances EC2.