Bjo*_*121 4 amazon-web-services terraform
我正在玩Terraform一段时间,我想知道这是否可行.最佳做法是为您在AWS上创建的每个资源分配标签(例如).因此,您首先要做的是提出标记策略(例如,哪个业务部门,应用程序的名称,负责它的团队,......).
但是,在Terraform中,这意味着您必须为每个资源重复每个标记块.这不是很方便,如果要更新其中一个标记名称,则必须更新您创建的每个资源.
例如:
resource "aws_vpc" "vpc" {
cidr_block = "${var.cidr}"
tags {
Name = "${var.name}"
Project = "${var.projectname}"
Environment = "${var.environment}"
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想在具有相同标签的VPC中创建子网和EC2,我必须重复该标签块.如果我想稍后更新其中一个标签名称,我必须单独更新每个资源,这非常耗时且乏味.
是否有可能在集中位置创建一个标签块并参考?我在考虑模块,但这似乎不适合模块的定义.
您还可以尝试0.10.3版本的本地值.它允许您为表达式分配符号本地名称,以便在配置中多次使用它而不重复.
# Define the common tags for all resources
locals {
common_tags = {
Component = "awesome-app"
Environment = "production"
}
}
# Create a resource that blends the common tags with instance-specific tags.
resource "aws_instance" "server" {
ami = "ami-123456"
instance_type = "t2.micro"
tags = "${merge(
local.common_tags,
map(
"Name", "awesome-app-server",
"Role", "server"
)
)}"
}
Run Code Online (Sandbox Code Playgroud)
Terraform 版本 .12 onwords,
这是变量
variable "sns_topic_name" {
type = string
default = "VpnTopic"
description = "Name of the sns topic"
}
Run Code Online (Sandbox Code Playgroud)
这是代码
locals {
common_tags = {
Terraform = true
}
}
# Create a Resource
resource "aws_sns_topic" "sns_topic" {
name = var.sns_topic_name
tags = merge(
local.common_tags,
{
"Name" = var.sns_topic_name
}
)
}
Run Code Online (Sandbox Code Playgroud)
输出将是
+ tags = {
+ "Name" = "VpnTopic"
+ "Terraform" = "true"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3470 次 |
| 最近记录: |