La documentation Terraform Data Sources me dit ce qu'est une source de données, mais je ne la comprends pas très bien. Quelqu'un peut-il me donner un cas d'utilisation de la source de données? Quelle est la différence entre cela et configurer quelque chose à l'aide de variables?
Les sources de données peuvent être utilisées pour un certain nombre de raisons; mais leur objectif est de faire quelque chose puis vous donner des données .
Prenons l'exemple de leur documentation :
# Find the latest available AMI that is tagged with Component = web
data "aws_AMI" "web" {
filter {
name = "state"
values = ["available"]
}
filter {
name = "tag:Component"
values = ["web"]
}
most_recent = true
}
Cela utilise la source de données aws_AMI - c'est différent d'une ressource! Il vous fournira simplement des informations et ne créera rien. Cet exemple en particulier appellera le describe-images
Appel de l'API AWS, passez quelques --filter
options comme spécifié, et retourne un objet dont vous pouvez obtenir des informations - jetez un œil à ces attributs !
... La liste continue. Ceci est vraiment utile si j'étais, disons - voulant toujours extraire la dernière AMI correspondant à certaines balises et garder une configuration de lancement à jour avec. Je pourrais utiliser ce fournisseur de données plutôt que de toujours devoir mettre à jour une variable ou coder en dur l'ID.
La source de données peut également être utilisée pour d'autres raisons; l'un de mes favoris est le fournisseur de modèles .
Bonne chance!
Les sources de données fournissent des informations sur les entités qui sont non gérées par la configuration Terraform actuelle.
Cela peut inclure:
En d'autres termes, les sources de données sont en lecture seule des vues sur l'état des composants préexistants externes à notre configuration.
Une fois que vous avez défini une source de données, vous pouvez utiliser les données ailleurs dans votre configuration Terraform.
Par exemple, supposons que nous voulons créer une configuration Terraform pour une nouvelle instance AWS EC2. Nous voulons utiliser une image AMI qui a été créée et téléchargée par un travail Jenkins à l'aide de l'AWS CLI, et non gérée par Terraform. Dans le cadre de la configuration de notre travail Jenkins, cette image AMI aura toujours un nom avec le préfixe app-
.
Dans ce cas, nous pouvons utiliser le aws_AMI
source de données pour obtenir des informations sur la dernière image AMI portant le préfixe de nom app-
.
data "aws_AMI" "app_AMI" {
most_recent = true
filter {
name = "name"
values = ["app-*"]
}
}
Les sources de données exportent les attributs, tout comme les ressources. Nous pouvons interpoler ces attributs en utilisant la syntaxe data.TYPE.NAME.ATTR
. Dans notre exemple, nous pouvons interpoler la valeur de l'ID AMI comme data.aws_AMI.app_AMI.id
, et passez-le comme l'argument AMI
pour notre aws_instance
ressource .
resource "aws_instance" "app" {
AMI = "${data.aws_AMI.app_AMI.id}"
instance_type = "t2.micro"
}
Les sources de données sont plus puissantes lors de la récupération d'informations sur les entités dynamiques - celles dont les propriétés changent souvent de valeur. Par exemple, la prochaine fois que Terraform récupérera des données pour notre aws_AMI
source de données, la valeur des attributs exportés peut être différente (nous pourrions avoir construit et poussé une nouvelle AMI).
Les variables sont utilisées pour les valeurs statiques, celles qui changent rarement, telles que vos clés d'accès et secrètes, ou une liste standard de sudoers pour vos serveurs.