本篇笔记参考官方教程。
作者学习环境: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命令查询输出