有没有办法在我的AWS账户中已经存在的Terraform资源中使用这些资源,这些资源是手动创建的?我不想更改它们,说实话,我不想“触摸”它们。我只需要一些用于我所创建环境的资源。例如,vpc和IAM。
我已经读过一些有关导入的信息,但是我不确定这是答案吗?
Terraform有两种使用资源的方式,这些资源位于要应用的上下文或目录之外。
第一个是数据源,它使您可以查找现有资源并将有关它们的信息传递给其他资源。所述aws_ami
数据源的文档提供了这种有用的例子:
data "aws_ami" "ubuntu" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
owners = ["099720109477"] # Canonical
}
resource "aws_instance" "web" {
ami = "${data.aws_ami.ubuntu.id}"
instance_type = "t2.micro"
tags = {
Name = "HelloWorld"
}
}
这样,Terraform可以获取与数据源中指定的条件相匹配的现有AMI,选择最新的AMI,然后将AMI的ID传递给aws_instance
资源,以便从该AMI构建它。
即使使用Terraform创建所有资源,它也仍然有用,因为它允许您拆分Terraform配置以限制爆炸半径并控制同时更新的内容,同时仍然允许您访问有关这些资源的信息。该aws_subnet_ids
文档中有提供这个地方的子网,则可能已在不同的上下文或目录到你要创建的实例创建由Terraform一个很好的例子,一个例子:
data "aws_subnet_ids" "private" {
vpc_id = "${var.vpc_id}"
tags = {
Tier = "Private"
}
}
resource "aws_instance" "app" {
count = "3"
ami = "${var.ami}"
instance_type = "t2.micro"
subnet_id = "${element(data.aws_subnet_ids.private.ids, count.index)}"
}
使用现有资源的第二种方法是将其导入州。这使Terraform可以开始管理现有资源,就像Terraform最初创建它们一样。这样,对Terraform配置所做的任何更改都将在下次运行时应用于现有资源terraform apply
。这也意味着,如果您运行terraform destroy
了该资源,则该资源将被删除。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句