terraform 中数据和导入之间的区别

kee*_*ing 3 cloud terraform

嗨,我是 Terraform 的初学者。

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

str*_*gjz 5

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

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

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

terraform import resource id

terraform plan -out=tfplan.out

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

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

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"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

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

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

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

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

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