terraform中数据和导入之间的差异

时间:2017-06-13 07:38:53

标签: cloud terraform

嗨,我是Terraform的初学者。

在使用它时,我对使用现有基础架构作为数据和使用import命令感到困惑。因为我导入了现有的infra并丢失了我的子网和密钥对,如果有人解释我们可以如何明智地使用它,将会很有帮助。提前谢谢。

1 个答案:

答案 0 :(得分:2)

  

Terraform导入的当前实现只能导入资源到该状态。它不会生成配置。

https://www.terraform.io/docs/import/index.html

导入资源时,您应该已经创建了配置,因此terraform不会破坏resource.s

terraform import resource id

terraform plan -out=tfplan.out

该计划将输出它对资源所做的更改,黄色用于修改,绿色新用户,红色销毁。

  

-out = path - 保存生成的执行计划的路径。然后,此计划可以与terraform应用一起使用,以确保仅应用此计划中显示的更改。请阅读下面保存计划的警告。

https://www.terraform.io/docs/commands/plan.html#out-path

terraform apply tfplan.out

数据源返回有关资源的属性,例如,如果子网ID是唯一已知的,则数据源可以提取有关它的其他信息,如VPC ID。

variable "subnet_id" {}

data "aws_subnet" "selected" {
  id = "${var.subnet_id}"
}

resource "aws_security_group" "subnet" {
  vpc_id = "${data.aws_subnet.selected.vpc_id}"

  ingress {
    cidr_blocks = ["${data.aws_subnet.selected.cidr_block}"]
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
  }
}
  

此数据源的参数充当用于查询当前区域中可用子网的过滤器。给定的过滤器必须与一个子网完全匹配,该子网的数据将作为属性导出。

     

availability_zone - (可选)子网必须驻留的可用区域。

     

cidr_block - (可选)所需子网的cidr块。

     

ipv6_cidr_block - (可选)所需子网的Ipv6 cidr块

     

default_for_az - (可选)所需子网是否必须是其关联可用区的默认子网的布尔约束。

     

filter - (可选)自定义过滤器块,如下所述。

     

id - (可选)要检索的特定子网的ID。

     

state - (可选)所需子网必须具有的状态。

     

tags - (可选)标记的映射,每对标记必须与所需子网上的一对完全匹配。

     

vpc_id - (可选)所需子网所属的VPC的ID。

https://www.terraform.io/docs/providers/aws/d/subnet.html