嗨,我是Terraform的初学者。
在使用它时,我对使用现有基础架构作为数据和使用import命令感到困惑。因为我导入了现有的infra并丢失了我的子网和密钥对,如果有人解释我们可以如何明智地使用它,将会很有帮助。提前谢谢。
答案 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。