1 变量定义变量
Terraform 可以将变量的内容写到一个单独的文件中,是main文件引用此文件的定义的变量的值,便于使用阅读。
上接Terraform 服务器托管网创建第一个云基础设施 (3) 创建云基础设施的Terraform文件的基础上进行修改。
$ cat variables.tf
variable "region" { // 变量名 region,不可用重复。花括号里面是参数
type = string // 输入变量的类型
default = "us-west-2" // 变量的默认值
description = "AWS region" // 变量的描述
}
variable "amis" {
type = map
default = {
us-west-2 = "ami-002829755fa238bfa"
}
description = "AWS ID"
}
variable "instance_type" {
type = string
default = "t2.micro"
description = "EC2 instance type"
}
variable "public_key" {
type = string
default = "id_rsa.pub"
description = "SSH public key"
}
variable "security_group" {
type = string
description = "security group ID"
}
2 变量引用方法
引用变量
引用变量,只需要在变量名前面加上 var.
即可引用自定义的变量。
如引用 region 的变量:
provider "aws" {
region = "us-west-2" # 原始的写法
}
provider "aws" {
region = var.region # 引用变量
}
内置函数
其他内置函数,查询官方文档。
lookup:允许从map中获取值.
# 变量定义
variable "amis" {
type = map
default = {
us-west-2 = "ami-002829755fa238bfa"
}
description = "AWS ID"
}
# 变量引用
resource "aws_instance" "web" {
ami = lookup(var.amis, var.region) # var.region = "us-west-2",ami的值对应变量中的 "ami-002829755fa238bfa"
...
}
file:读取给定文件的内容,并返回字符串。
# 变量定义
variable "public_key" {
type = string
default = "id_rsa.pub"
description = "SSH public key"
}
# 变量引用
resource "aws_key_pair" "ssh" {
key_name = "admin"
public_key = file(var.public_key) # 会读取 "id_rsa.pub" 文件中的值,需要在当前目录下创建此文件。
}
3 设置输入变量
执行 plan 或者 apply 的时候,如果没有给变量设置默认值,就会提示我们输入变量的内容。
# 变量定义
variable "security_group" { # 没有设置默认值
type = string
description = "security group ID"
}
# 变量引用
resource "aws_security_group_rule" "ssh" {
type = "ingress"
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
security_group_id = var.security_group # 变量引用
}
方法一:手动输入变量
% terraform plan
var.security_group
security group ID
Enter a value: sg-572b3b6c # 手动输入防火墙id 才会继续执行。
方法二:命令行输入变量
terraform plan -var security_group=sg-572b3b6c
方法三:通过文件传递变量
cat > terraform.tfvars
如果变量定义文件名不是 terraform.tfvars
可以使用 -var-file
来指定文件名。
方法四:通过环境变量的方式
环境变量必须使用 TF_VAR_
开头。
export TF_VAR_security_group=sg-572b3b6c
4 使用变量创建基础设施
改动如下:
# 创建密钥文件
cp ~/.ssh/id_rsa.pub .
# 创建安装 nginx 脚本文件
cat > setup_nginx.sh
更新基础设施
terraform plan
terraform apply
提交代码
echo id_rsa.pub >> .gitignore
echo terraform.tfvars >> .gitignore
git add .
git commit -m "using variables"
5 数据源使用
在前面的操作实践中,仍然需要手动置顶安服务器托管网全组ID。事实上 Terraform 为我们提供了更好的处理方式。利用data_source 数据源,从云供应商抓起想要的数据信息。
下面使用数据源的方法获取安全组ID。
数据源声明
数据源使用 data {} 代码块进行声明
// 数据源
data "aws_security_groups" "default" { // 数据源为"aws_security_groups",数据源名称"default"
filter { // 过滤参数找出符合条件的安全组
name = "group-name" // 过滤 group_name = default 的安全组
values = ["default"]
}
}
数据源调用
resource "aws_security_group_rule" "ssh" {
type = "ingress"
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
security_group_id = data.aws_security_groups.default.ids[0] // 调用数据源的信息,列表的第一个值
}
6 声明变量输出
数据源使用 output {} 代码块进行声明.
变量输出声明
新建一个 outputs.tf
文件来保存输出变量的内容。
$ cat oytputs.tf
output "DNS" { // 输出变量名称 "DNS"
value = aws_instance.web.public_dns // 返回给用户的结果。
description = "AWS EC2 public DNS" // 可选参数。描述信息
}
output "IP" {
value = aws_instance.web.public_ip
description = "AWS EC2 public IP"
sensitive = true // 可选参数。敏感信息输出可以设为true
}
方法一:apply 查看变量输出
terraform apply 完成之后会显示输出变量的值。
$ terraform apply
...
Enter a value: yes
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
DNS = "ec2-35-92-34-143.us-west-2.compute.amazonaws.com"
IP =
方法二:output 子命令查看变量输出
需要apply之后才能查看。
$ terraform output
DNS = "ec2-35-92-34-143.us-west-2.compute.amazonaws.com"
IP = "35.92.34.143"
方法三:output 子命令查看指定变量输出
$ terraform output IP
"35.92.34.143"
提交代码
git commit -am "using output variables"
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 不同局域网下使用Python自带HTTP服务进行文件共享「端口映射」
1. 前言
2. 视频教程
3. 本地文件服务器搭建
4. 本地文件服务器的发布
5. 公网访问测试
6. 结语文章目录 1. 前言 2. 视频教程 3. 本地文件服务器搭建 3.1 python的安装和设置 3.2 cpolar的安装和注册 4. 本地文件服务器的发布 4.1 Cpolar云端设置 4.2 Cpolar本地设置 5. 公网访问测试 6. 结语 转载自内…