首页 > 其他分享 >Terraform 变量的使用(4)

Terraform 变量的使用(4)

时间:2023-09-05 22:31:40浏览次数:31  
标签:group 变量 region Terraform 使用 var security type

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 << EOF
security_group = "sg-572b3b6c"
EOF

如果变量定义文件名不是 terraform.tfvars 可以使用 -var-file 来指定文件名。



方法四:通过环境变量的方式

环境变量必须使用 TF_VAR_ 开头。

export TF_VAR_security_group=sg-572b3b6c



4 使用变量创建基础设施

改动如下:

# 创建密钥文件
cp ~/.ssh/id_rsa.pub .

# 创建安装 nginx 脚本文件
cat > setup_nginx.sh << EOF
#!/bin/bash
sudo yum install -y nginx
sudo nginx
EOF


# main文件新增user_data
resource "aws_instance" "web" {  
    ami = lookup(var.amis, var.region)
    instance_type = var.instance_type
    key_name = aws_key_pair.ssh.key_name
    user_data = "setup_nginx.sh"  	# 创建 EC2 实例后,调用执行 "setup_nginx.sh" 脚本
    tags = {    										# 将EC2 实例命名为 "nginx-web-server"
      Name = "nginx-web-server"
    }
}

# main文件防火墙新增80端口
resource "aws_security_group_rule" "web" {
  type = "ingress"
  from_port = 80
  to_port = 80
  protocol = "tcp"
  cidr_blocks = ["0.0.0.0/0"]
  security_group_id = var.security_group
}


更新基础设施

terraform plan
terraform apply

nginx 已经安装了,说明shell脚本已经执行了。但是nginx服务没有启动,这里后续再解决。


提交代码

echo id_rsa.pub >> .gitignore 
echo terraform.tfvars >> .gitignore 
git add .
git commit -m "using variables"




标签:group,变量,region,Terraform,使用,var,security,type
From: https://blog.51cto.com/u_11060853/7380428

相关文章

  • 《C++并发编程实战》读书笔记(4):原子变量
    1、标准原子类型标准原子类型的定义位于头文件<atomic>内。原子操作的关键用途是取代需要互斥的同步方式,但假设原子操作本身也在内部使用了互斥,就很可能无法达到期望的性能提升。有三种方法来判断一个原子类型是否属于无锁数据结构:所有标准原子类型(std::atomic_flag除外,因为它......
  • vue3探索——使用ref与$parent实现父子组件间通信
    在vue3中,可以使用vue3的APIdefineExpose()函数结合ref或者$parent,实现父子组件数据的传递。子组件向父组件传递数据defineExpose()和ref子组件:通过defineExpose()函数,向外暴露响应式数据或者方法//src/components/son.vue<template><div><h1>儿子有${{so......
  • Mybatisplus中如何使用databaseId来适配多种数据库
    Mybatisplus中如何使用databaseId来适配多种数据库当使用MyBatisPlus进行数据库访问时,我们可能会面临多数据库的情况,例如在同一个应用程序中同时使用MySQL和Oracle。在这种情况下,我们需要根据当前的数据库环境来选择执行相应的SQL语句。MyBatisPlus提供了一个名为databaseId的特......
  • 使用 vue 渲染静态模板
    最近再一次需要做纯静态页面(无任何脚本语言,只保留css和html),以往我直接使用ejs生成,但是工作中一直使用jsx和vue来组装页面,就突发奇想,难道react、vue不能只渲染纯静态页面吗?有了这个想法,我就想验证下可行性,万能百度开始,找了一圈,发现基本都是需要脚本依赖的,这就意味着必......
  • 七牛云的使用
    准备工作进入七牛云官网注册账号→绑定邮箱→完成认证登录七牛云→点击右上角头像→进入个人中心→进入密钥管理->复制AK和SK(待会儿要用到)点击左上角列表按钮→展开产品浮层→点击对象存储Kodo→进入空间管理→新建空间→记住存储空间名称(待会儿要用到......
  • 配置后端环境变量
    安装后端所需基本依赖项目的接口文档https://apifox.com/apidoc/shared-5a53a935-41de-43d0-9bd7-272baf4f7fc6下面是安装后端基本环境一、安装nodehttps://nodejs.cn/download/点击下载对应的版本安装完后在控制台输入node-v可查看是否安装成功二、下载hbuilderX编辑器https......
  • 【坑】VUE中动态数据使用 wow.js 没效果的问题
    一般来说正常使用都是在mounted函数中mounted(){this.$nextTick(()=>{this.$wow.init()})}这样如果是死数据是可以正常出现效果的但是如果是请求回来的数据是没有效果的需要改一下生成时机  此处的newList即为请求的数据watch:{newsl......
  • 2023你需要使用的最佳VSCode扩展
    VisualStudioCode(VSCode)是一款广受欢迎的多功能代码编辑器,在最新的StackOverflow开发者调查中,近75%的开发者将其选为首选集成开发环境。VSCode提供了一系列开箱即用的特性和功能,但其真正的威力在于市场上庞大的扩展生态系统。整理了VSCode30大扩展列表,希望大家能使用这些......
  • 使用 MYSQL 对列中特定范围的数字求和
    使用MySQL对列中特定范围的数字求和,可以使用SQL的SUM()函数结合WHERE子句来实现。以下是一个示例:SELECTSUM(column_name)ASsum_resultFROMtable_nameWHEREcolumn_name>=start_valueANDcolumn_name<=end_value;在上述代码中,将column_name替换为要计算求和的......
  • 关于在数据库系统MMAP的使用
    问题引出在数据库系统中对于文件I/O管理,通常有两种选择开发者自己实现bufferbool来管理文件I/O读入内存的数据使用Linux操作系统实现的MMAP系统调用映射到用户地址空间,并且利用对开发者透明的pagecache来实现页面的换入换出理论介绍 程序调用MMAP返回了指向文件内容......