当前位置: 首页 > news >正文

【Terraform学习】本地变量(Terraform配置语言学习)

背景:

关于如何在机器上拉terraform代码,初始化就不重复了,需要的可以查看前面的文章:

【Terraform学习】Terraform-AWS部署快速入门(快速入门)_向往风的男子的博客-CSDN博客

使用本地变量命名资源

  • 每个配置的共享部分设置为重复使用的本地值减少重复并使此配置更清晰

  • 通过将以下代码段粘贴到main.tf顶部来定义本地变量

locals {name_suffix = "${var.resource_tags["project"]}-${var.resource_tags["environment"]}"
}
  • 任何Terraform配置中一样,配置的显示顺序不会影响Terraform解释配置的方式

  • 现在更新配置中的属性以使用此新的本地值

 module "vpc" {source  = "terraform-aws-modules/vpc/aws"version = "2.66.0"-  name = "vpc-${var.resource_tags["project"]}-${var.resource_tags["environment"]}"
+  name = "vpc-${local.name_suffix}"## ...}module "app_security_group" {source  = "terraform-aws-modules/security-group/aws//modules/web"version = "3.17.0"-  name        = "web-sg-${var.resource_tags["project"]}-${var.resource_tags["environment"]}"
+  name        = "web-sg-${local.name_suffix}"## ...}module "lb_security_group" {source  = "terraform-aws-modules/security-group/aws//modules/web"version = "3.17.0"-  name        = "lb-sg-${var.resource_tags["project"]}-${var.resource_tags["environment"]}"
+  name        = "lb-sg-${local.name_suffix}"## ...}module "elb_http" {source  = "terraform-aws-modules/elb/aws"version = "2.4.0"# Ensure load balancer name is unique
-  name = "lb-${random_string.lb_id.result}-${var.resource_tags["project"]}-${var.resource_tags["environment"]}"
+  name = "lb-${random_string.lb_id.result}-${local.name_suffix}"## ...}
  • 请注意,负载均衡器名称包含一个随机字符串,以便这些名称是唯一的,这是 AWS 中负载均衡器名称的要求

  • 应用配置以验证名称的值是否未更改

    • terraform apply


将变量与局部值组合

  • 变量值不同局部值可以使用动态表达式和资源参数

  • 许多项目要求以某种方式标记所有资源以跟踪它们。要强制实施此要求,请将本地值与变量结合使用,以便分配给资源的标签至少包括项目名称和环境

  • 将以下新变量定义添加到variables.tf

variable "project_name" {description = "Name of the project."type        = stringdefault     = "my-project"
}variable "environment" {description = "Name of the environment."type        = stringdefault     = "dev"
}
  • 接下来,将变量resource_tags的默认值更改为空映射

 variable "resource_tags" {description = "Tags to set for all resources"type        = map(string)
-   default     = {
-     project     = "my-project",
-     environment = "dev"
-   }
+   default     = { }}
  • 添加新块locals以创建所需标签和用户定义标签组合

locals {required_tags = {project     = var.project_name,environment = var.environment}tags = merge(var.resource_tags, local.required_tags)
}
  • 可以在单个块中定义配置本地值也可以使用多个locals

  • 更新局部变量的定义以使用新变量

 locals {
-  name_suffix = "${var.resource_tags["project"]}-${var.resource_tags["environment"]}"
+  name_suffix = "${var.project_name}-${var.environment}"}
  • 然后,更新main.tf中的tags引用,以使用新的本地值

-  tags = var.resource_tags
+  tags = local.tags
## ... replace all five occurrences of `tags = var.resource_tags`
  • 最后,向output.tf文件添加一个名为tags的输出。此输出将显示您在此配置中使用的标签

output "tags" {value = local.tags
}
  • 现在,应用这些更改以查看每个资源的标签

    • terraform apply

  • 接下来,运行另一个 apply,这次将环境更改为prod

    • terraform apply -var "environment=prod"

http://www.lryc.cn/news/123916.html

相关文章:

  • zabbix自动注册服务器以及部署代理服务器
  • 掌握Python的X篇_32_使用python编辑pdf文件_pdfrw
  • 【软件工程】软件测试
  • Android性能优化——内存优化
  • Android Studio实现图形验证码
  • JAVA面试数据库篇
  • Android高手进阶教程(三)之----Android 中自定义View的应用.
  • 第一百一十三回 dart中的getter/setter方法
  • 搭建Docker环境
  • 微服务08-多级缓存
  • Intel汇编和ATT汇编的区别?
  • MongoDB 备份与恢复
  • 探讨uniapp的网络通信问题
  • 【左神算法刷题班】第18节:汉诺塔问题、岛屿问题、最大路径和问题
  • 网络安全体系架构介绍
  • JSP实训项目设计报告—MVC简易购物商城
  • 41、可靠传输——停等ARQ
  • RK3568 cmake编译
  • 详细安装配置django
  • HTTP之cookie基础学习
  • 观察者模式和发布订阅模式
  • 利用ViewModel和LiveData进行数据管理
  • 前后端分离------后端创建笔记(05)用户列表查询接口(下)
  • 浅谈GIS和三维GIS的区别?
  • ArcGIS Maps SDK for JavaScript系列之三:在Vue3中使用ArcGIS API加载三维地球
  • 设计列表和超链接
  • rust包跨平台编译,macbook ,linux
  • JAVA集合-List
  • Python|OpenCV-绘制图形和添加文字的方法(2)
  • 使用GO编译wasm文件并在nodejs中使用