terraform 入门(四):定义输入变量、使用输出查询数据

586 阅读1分钟

本篇笔记参考官方教程

作者学习环境:VMware虚拟机,centos7。

本笔记继上一篇笔记学习。之前创建的例子都是使用的硬编码值,本片笔记目的是terraform配置中包含变量,以达到动态和灵活配置infrastructure。具体应用是可以定义创建实例的名称。

1.重新apply

上一篇中,我们destroy了在aws上构建的的实例,重新构建一次:

terraform init
terraform apply

2.使用变量设置实例名称

使用定义新 instance_name 变量的块创建一个名为 variables.tf 的新文件。

在当前文件夹(learn-terraform-aws-instance)下,touch variable.tf,vim variable.tf。

variable "instance_name" {
  description = "Value of the Name tag for the EC2 instance"
  type        = string
  default     = "ExampleAppServerInstance"
}

在apply过程中,terraform会加载文件夹中所有.tf结尾的文件。

定义好变量文件后,编辑main.tf文件中的aws_instance资源块以使用新变量。(此处的-是删除代码中此行,+是加入此行代码)

resource "aws_instance" "app_server" {
   ami           = "ami-08d70e59c07c61a3a"
   instance_type = "t2.micro"

   tags = {
-    Name = "ExampleAppServerInstance"
+    Name = var.instance_name
   }
 }

若在apply时,未声明变量,则使用变量文件中的默认值。

声明变量时使用:terraform apply -var "instance_name=YetAnotherName"

执行后,发现EC2中的实例名字被变成了新设置的参数。

思问:为什么编辑main.tf文件时 Name = var.instance_name,要以var开头,声明变量也使用 -var。

3.使用输出查询数据

在learn-terraform-aws-instance文件夹下创建outputs.tf。将以下代码加入文件中,输出EC2实例的id和ip地址。

output "instance_id" {
  description = "ID of the EC2 instance"
  value       = aws_instance.app_server.id
}

output "instance_public_ip" {
  description = "Public IP address of the EC2 instance"
  value       = aws_instance.app_server.public_ip
}

apply后,在返回的信息段尾会有:

Outputs:
instance_id = "i-0bf954919ed765de1" 
instance_public_ip = "54.186.202.254"

也可以使用terraform output命令查询输出