amazon-ec2 - 使用 Terraform 通过 EC2 创建时,如何向 AWS EBS 添加标签?
问题描述
我正在尝试为使用 PROD 的 AMI 的 TEST 环境创建 EC2 实例。一切都正确创建,但我无法弄清楚如何将标签添加到随之创建的 EBS 卷中?
标签在 EC2 上工作,但不会应用于 EBS 或根卷。我也尝试在它们上添加标签映射,但这是无效的。有任何想法吗?
provider "aws" {
region = "us-east-1"
}
data "aws_ami" "existing_sft_ami" {
most_recent = true
filter {
name = "name"
values = [var.prod_name]
}
owners = [
var.aws_account_id]
}
data "aws_subnet" "subnet" {
id = var.aws_subnet_id
}
resource "aws_instance" "sftp" {
ami = data.aws_ami.existing_sft_ami.id
instance_type = "t2.micro"
availability_zone = var.availability_zone
subnet_id = data.aws_subnet.subnet.id
key_name = var.ssh_key_name
vpc_security_group_ids = [var.aws_security_group_id]
root_block_device {
delete_on_termination = true
}
ebs_block_device {
device_name = "/dev/sdb"
delete_on_termination = true
}
tags = {
Name = var.name
Owner = var.owner
Created = formatdate("DD MMM YYYY hh:mm ZZZ", timestamp())
Environment = "TEST"
}
}
解决方案
您需要使用附加volume_tags
参数来标记卷。另外,为了让你的代码更干一点,你可以用一个locals
块来做到这一点。
locals {
tags = {
Name = var.name
Owner = var.owner
Created = formatdate("DD MMM YYYY hh:mm ZZZ", timestamp())
Environment = var.environment
}
}
resource "aws_instance" "sftp" {
ami = data.aws_ami.existing_sft_ami.id
instance_type = "t2.micro"
availability_zone = var.availability_zone
subnet_id = data.aws_subnet.subnet.id
key_name = var.ssh_key_name
vpc_security_group_ids = [var.aws_security_group_id]
root_block_device {
delete_on_termination = true
}
ebs_block_device {
device_name = "/dev/sdb"
delete_on_termination = true
}
tags = local.tags
volume_tags = local.tags
}
推荐阅读
- python - 使用 Ecs Ec2 将 Python 应用程序与 redis 连接
- excel - 在本地窗口中展开 [+] 工作簿对象变量时 Excel VBA 挂起
- javascript - 从 Javascript 客户端设置标头值
- java - Android Firebase 如何在注册到数据库之前等待图像上传?
- python - 使用比较运算符时如何避免循环中不需要的赋值?
- pytest - conftest 中的固定装置何时加载?
- batch-file - 如何对目录中的所有 .cs 文件运行命令并将文件路径存储为变量以用作 Windows 上的命令
- apache - 在移动设备上使用 ssl 时网站不显示,但在桌面上显示
- python - xlwings:在 Mac 上专门从 python 设置单元格格式
- javascript - 如何使 javascript carousel 的过滤器起作用