Amazon web services 如何使用AWS中已经存在的地形资源(手动创建)?

Amazon web services 如何使用AWS中已经存在的地形资源(手动创建)?,amazon-web-services,terraform,Amazon Web Services,Terraform,有没有办法在我的地形中使用我的AWS帐户中已经存在的手动创建的资源?我不想改变它们,老实说,我也不想“碰”它们。我只需要为我正在创造的环境提供一些资源。 例如,vpc和IAM 我读过一些关于导入的内容,但我不确定这是否是答案?Terraform有两种方法可以使用它所应用的上下文或目录之外的资源 第一种方法允许您查找现有资源,并将有关资源的信息传递给其他资源。本文档提供了以下有用的示例: data "aws_ami" "ubuntu" { most_recent = true filte

有没有办法在我的地形中使用我的AWS帐户中已经存在的手动创建的资源?我不想改变它们,老实说,我也不想“碰”它们。我只需要为我正在创造的环境提供一些资源。 例如,vpc和IAM


我读过一些关于导入的内容,但我不确定这是否是答案?

Terraform有两种方法可以使用它所应用的上下文或目录之外的资源

第一种方法允许您查找现有资源,并将有关资源的信息传递给其他资源。本文档提供了以下有用的示例:

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_实例
资源,以便从该AMI构建它

即使您使用Terraform创建所有资源,这仍然很有用,因为它允许您拆分Terraform配置以限制爆炸半径,并控制同时更新的内容,同时还允许您访问有关这些资源的信息。文档中有一个示例,提供了一个很好的示例,其中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最初创建了它们一样。因此,当您下次运行
terraformapply
时,对Terraform配置所做的任何更改都将应用于现有资源。这也意味着,如果您运行
terraformdestroy
,那么资源将被删除