Amazon web services 如何在Terraform中使用数据源?
这个函数告诉我什么是数据源,但我不太理解它。有人能给我一个数据源的用例吗?它与使用变量配置有什么区别?数据源的使用有很多原因;但是他们的目标是做点什么,然后给你数据 让我们从他们的例子中看一下: 这使用数据源-这与资源不同!它只会给你信息,而不会创造任何东西。此示例将特别调用Amazon web services 如何在Terraform中使用数据源?,amazon-web-services,terraform,Amazon Web Services,Terraform,这个函数告诉我什么是数据源,但我不太理解它。有人能给我一个数据源的用例吗?它与使用变量配置有什么区别?数据源的使用有很多原因;但是他们的目标是做点什么,然后给你数据 让我们从他们的例子中看一下: 这使用数据源-这与资源不同!它只会给你信息,而不会创造任何东西。此示例将特别调用descripe imagesAWS API调用,按指定传入一些--filter选项,并返回一个可以从中获取信息的对象-看看这些 名字 所有者id 描述 图像识别码 。。。这个名单还有很多。如果我总是想获取与某些标记匹配
descripe images
AWS API调用,按指定传入一些--filter
选项,并返回一个可以从中获取信息的对象-看看这些
- 名字
- 所有者id
- 描述
- 图像识别码
祝你好运 数据源提供有关当前地形配置未管理的实体的信息 这可能包括:
- 来自领事馆的配置数据
- 有关手动配置的基础结构组件状态的信息
app-
的名称
data "aws_ami" "app_ami" {
most_recent = true
filter {
name = "name"
values = ["app-*"]
}
}
在本例中,我们可以使用获取有关具有名称前缀app-
的最新AMI图像的信息
data "aws_ami" "app_ami" {
most_recent = true
filter {
name = "name"
values = ["app-*"]
}
}
数据源导出属性,就像资源一样。我们可以使用语法data.TYPE.NAME.ATTR
插入这些属性。在我们的示例中,我们可以将AMI ID的值插值为data.aws\u AMI.app\u AMI.ID
,并将其作为
数据源在检索有关动态实体的信息时最为强大,这些实体的属性经常改变值。例如,下一次Terraform为我们的
aws_ami
数据源获取数据时,导出属性的值可能不同(我们可能已经构建并推送了一个新的ami)
变量用于静态值,即很少更改的值,例如访问和密钥,或服务器的标准sudoer列表。数据源用于从提供程序端获取数据,以便将其用作.tf文件中的配置,而不是硬编码。示例:下面的代码获取AWS AMI ID并使用它启动AWS实例
data "aws_ami" "std_ami" {
most_recent = true
owners = ["amazon"]
filter {
name = "root-device-type"
values = ["ebs"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
}
resource "aws_instance" "myec2" {
ami = data.aws_ami.std_ami.id
instance_type = "t2.micro"
}
好例子 Terraform数据源、资源和变量之间的主要区别是: 资源:在我们的平台上提供资源/infra。创建、更新和删除 变量在IAC上提供预定义值作为变量。由资源用于资源调配 数据源:从我们的infra/provider获取值,并为我们的资源提供数据以提供infra/resource
上面的例子解释得很好:)嗨,谢谢TJ。你的回答很清楚。我不明白为什么terraform没有以您的方式解释什么是数据源。:-)还有一个问题可能与数据源有关,也可能与数据源无关:我在现有的AWS云(手动创建)中创建了一些新服务(使用terraform)。现在,我在我的服务资源中指出了现有云的id(子网、角色、vpc id等),例如subnet_id=“${var.subnet_private1_id}”,我将subnet_private1_id设置为terraform.tfvars中的实际子网id,将来我将向另一个AWS云运行terraform代码。然后将重新配置与当前云相关的所有id I。我应该只将当前云的所有相关id设置为变量,还是使用datasource?你想使用
terraform import
T J Biddle:我不需要改变现有的东西,我只需要基于现有云创建新的东西,所以我不需要导入。请看Gotchya——我真的建议您尽可能多地将基础结构转换为代码;这会让事情变得更容易。谢谢你。换句话说,1)数据源是提供现有基础设施的信息,而不是创建新的服务。2) 它会根据过滤逻辑检索动态实体。1)是的!2) 每个数据源都是不同的。对于aws\u ami
数据源,因为它实际上调用了后面的CLI命令,并且支持过滤。对于其他数据源,可能没有筛选。每个数据源的配置特定于该数据源和provider.Oh。很高兴知道。再次感谢@d4nylhi@d4nill,感谢您的解释。归档文件数据源如何?当使用此文件时,将创建一个新文件,而不仅仅是“读取”某些内容。为什么他们认为数据源呢?@ Avele:这是一个我以前没有使用过的数据源,它看起来像是违反规范。如果你发现任何其他的例子,让我知道,我会更新我的答案。我想更准确地描述数据源的方法是,它们获取现有资源的状态,并将其合并为地形状态的一部分。存档文件data "aws_ami" "std_ami" {
most_recent = true
owners = ["amazon"]
filter {
name = "root-device-type"
values = ["ebs"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
}
resource "aws_instance" "myec2" {
ami = data.aws_ami.std_ami.id
instance_type = "t2.micro"
}